微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈,后台实现
2016-03-23 10:16
1096 查看
上一篇文章讲了在页面对自定义分享的配置,接下来小编将继续娓娓道来后台对页面需要的参数是如何支持的。微信还真是让人欢喜让人忧。
前台页面需要的数据这酱紫的:
那么在后台就应该提供相应的参数和数据值。
首先APPID是公众号的唯一标识,timestamp是时间戳,nonceStr签名的获取,jsApiList是需要使用得JS接口列表。还有就是公共方法中的对分享链接自定义的标题、描述、链接以及头像等。
标题、描述、链接和头像都是可以在后台设置的,最重要的就是签名,
signatrue签名需要签名机制来生成。
签名机制:
1、通过access_token采用httpGet方式的请求获取jsapi_ticket(有效期为7200秒),获取方法此处略。
2、通过得到的jsapi_ticket和随机字符串noncestr,时间戳timestamp,当前网页的URL(不包含#及其后面部分),对这几个参数按照ASCII码从小到大排序(字典序),使用URL键值对的格式(key1=value1&key2=value2…)拼接成字符串string1,这里所有的参数均为小写字符。
3、然后对string1进行SHA1加密。字段名和字段值都采用原始值,不进行URL转义。
前台页面需要的数据这酱紫的:
wx.config({ debug: false, appId: '${shakeMap.appId}', timestamp: '${shakeMap.timestamp}', nonceStr: '${shakeMap.nonceStr}', signature: '${shakeMap.signature}', jsApiList: [ 'checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage' ] }); wx.ready(function () { <%--公共方法--%> var shareData = { title: '${title}', desc: '${description}', link: '${url}', imgUrl: '${headImgUrl}', success: function (res) { //alert('已分享'); }, cancel: function (res) { } };
那么在后台就应该提供相应的参数和数据值。
首先APPID是公众号的唯一标识,timestamp是时间戳,nonceStr签名的获取,jsApiList是需要使用得JS接口列表。还有就是公共方法中的对分享链接自定义的标题、描述、链接以及头像等。
标题、描述、链接和头像都是可以在后台设置的,最重要的就是签名,
signatrue签名需要签名机制来生成。
签名机制:
1、通过access_token采用httpGet方式的请求获取jsapi_ticket(有效期为7200秒),获取方法此处略。
2、通过得到的jsapi_ticket和随机字符串noncestr,时间戳timestamp,当前网页的URL(不包含#及其后面部分),对这几个参数按照ASCII码从小到大排序(字典序),使用URL键值对的格式(key1=value1&key2=value2…)拼接成字符串string1,这里所有的参数均为小写字符。
3、然后对string1进行SHA1加密。字段名和字段值都采用原始值,不进行URL转义。
public static Map<String, String> sign(String jsapi_ticket, String url) { Map<String, String> ret = new HashMap<String, String>(); String nonce_str = create_nonce_str(); String timestamp = create_timestamp(); String string1; String signature = ""; //注意这里参数名必须全部小写,且必须有序 string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + timestamp + "&url=" + url; System.out.println(string1); try { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(string1.getBytes("UTF-8")); signature = byteToHex(crypt.digest()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } ret.put("url", url); ret.put("jsapi_ticket", jsapi_ticket); ret.put("nonceStr", nonce_str); ret.put("timestamp", timestamp); ret.put("signature", signature); return ret; } /** * 将字节数组转换为十六进制字符串 */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; } /** * 将字节转换为十六进制字符串 */ private static String byteToHexStr(byte mByte) { char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s; } private static String create_nonce_str() { return UUID.randomUUID().toString(); } private static String create_timestamp() { return Long.toString(System.currentTimeMillis() / 1000); }
相关文章推荐
- 关于微信公众号jsapi支付传值的问题
- 开发者了解---微信公众号(服务号、订阅号、企业号)的区别
- C#文件搜索小程序
- 微信web开发者工具的使用
- 微信企业号开发(八) -jssdk的使用(调用微信拍照)
- 微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈
- 【iOS】原生微信登录和分享
- 微信APP支付-Java后台实现
- 分享微信及朋友圈(基于友盟)
- 第一次调微信支付正常弹出支付页面并成功支付了,再次调用时就支付异常,换个微信账号又能调用一次
- 2016微信抢红包助手及源码
- 【2016.3.22】作业 Word count 小程序
- IOS调用聚合接口实现微信精选
- 平院微信图书馆——中转图书查询
- 一步一步教你开发微信扫码联合登录
- 微信页面识别二维码非常不灵敏 而且识别的位置偏移 的解决方案
- iOS开发-仿微信图片分享界面实现
- 浅谈安卓微信支付遇到的那些坑(服务端签名)
- Android集成微信钱包支付V3.1.1(一):接口申请
- 关于微信退款出现错误代码:52的解决方法