微信开发(三)微信分享朋友朋友圈
2017-01-12 11:43
543 查看
这里基于微信的都是需要用到参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../15/54ce45d8d30b6bf6758f68d2e95bc627.html点击打开链接微信分享朋友朋友圈这里需要用到这个其实比较简单主要的配置就是1服务器绑定域名,2.引入js( https://res.wx.qq.com/open/js/jweixin-1.0.0.js)3.通过config接口注入权限验证配置(注意这里签名返回值放在前台ajax是因为二次分享的时候url会改变所以这样不然直接把签名的值放在request值里面会导致二次分享失败)
function getConfigData(){ var url =window.location.href; url = encodeURIComponent(url); var data ="url="+url; $.ajax({ type:'post', url:'后台验签url', data:data, asyc:true, success:function(data){ if(data){ wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: data.appId, // 必填,公众号的唯一标识 timestamp:data.timestamp, // 必填,生成签名的时间戳 nonceStr: data.nonceStr, // 必填,生成签名的随机串 signature: data.signature,// 必填,签名,见附录1 jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); } wxReady(); }, error:function(){ alert("系统繁忙请稍后再试"); } }) } wx.ready(function(){ wx.onMenuShareTimeline({ title: share_title, // 分享标题 link:share_url, // 分享链接 imgUrl: act_image_url, // 分享图标 success: function () { }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ title: share_title, // 分享标题 desc: act_message, // 分享描述 link: share_url, // 分享链接 imgUrl: act_image_url, // 分享图标 type: 'link', // 分享类型,music、video或link,不填默认为link dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空 success: function () { }, cancel: function () { // 用户取消分享后执行的回调函数 } }); });后台代码生成签名@RequestMapping(value="/getConfigData",method = RequestMethod.POST)@ResponseBodypublic Map<String,String> getConfigData(HttpServletRequest request){String id =request.getParameter("id");String url = request.getParameter("url");String path = request.getContextPath();String basePath ="xiangm"String shareUrl =basePath+"/act/toActView/"+id+".html";Map<String,String> map =Snippet.sign(url);map.put("shareUrl", shareUrl);map.put("appId",Snippet.getAppid());return map;}
public static Map<String, String> sign(String url) {Map<String, String> ret = new HashMap<String, String>();String nonce_str = create_nonce_str();String timestamp = create_timestamp();String jsapi_ticket="";try {jsapi_ticket = getJsapiTicket();} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}String string1;String signature = "";//注意这里参数名必须全部小写,且必须有序string1 = "jsapi_ticket=" + jsapi_ticket +"&noncestr=" + nonce_str +"×tamp=" + timestamp +"&url="+url;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("jsapi_ticket", jsapi_ticket);ret.put("nonceStr", nonce_str);ret.put("timestamp", timestamp);ret.put("signature", signature);return ret;}