需要在前台设置:
<%-- 微信分享配置开始 --%> <script src="https://res2.wx.qq.com/open/js/jweixin-1.4.0.js"></script> <script> var _href = location.href; if(_href.indexOf('?')>-1){ _href=location.href = location.href.split('?')[0]; } var title = '分享的title'; var desc = '分享的内容'; var link = _href; var imgUrl = '图片路径'; var appId = '${ret.appId}'; var timestamp = ${ret.timestamp}; var nonceStr = '${ret.nonceStr}'; var signature = '${ret.signature}'; </script> <script src="${ctx}/static/mobile/js/weixinshare.js"></script>
后台接口需要返回,appId,timestamp,nonceStr,signature
/** * 获取微信分享jssdk权限验证信息 * @param signUrl * @return * @throws Exception */ public static Map<String, String> getCheckConfigInfo(final String signUrl) throws Exception{ WeiXinShareUtil wcs = new WeiXinShareUtil(); String accessToken = (String) wcs.memCache.get(WX_ACCESS_TOKEN); String jsapiTicket = (String) wcs.memCache.get(WX_JSAPI_TICKET); if(accessToken == null || "".equals(accessToken)){ //拼写微信获取access_token访问地址 String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"; url += "&appid=" + WeixinConstants.appid_accredit; url += "&secret=" + WeixinConstants.secret_accredit; //获取返回数据 JSONObject info = wcs.urlHalder(url); wcs.logger.info("++++++++++++++++++++++++++++++++++++++++"+info); if(info.get("access_token") != null){ accessToken = info.get("access_token").toString(); wcs.memCache.set(WX_ACCESS_TOKEN,accessToken,Integer.parseInt(info.get("expires_in").toString())); } } if(jsapiTicket == null || "".equals(jsapiTicket)){ if(accessToken != null && !"".equals(accessToken)) { String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket"; url += "?access_token=" + accessToken; url += "&type=jsapi"; //获取返回数据 JSONObject info = wcs.urlHalder(url); wcs.logger.info("++++++++++++++++++++++++++++++++++++++++"+info); if(info.get("ticket") != null){ wcs.memCache.set(WX_JSAPI_TICKET, info.get("ticket").toString(), Integer.parseInt(info.get("expires_in").toString())); } } } wcs.logger.info("++++++++++++++++++++++++++++++++++++++++++++++accessToken " + accessToken); wcs.logger.info("++++++++++++++++++++++++++++++++++++++++++++++jsapiTicket " + jsapiTicket); wcs.logger.info("===========分享地址============="+signUrl); Map<String, String> ret = wcs.sign(jsapiTicket, signUrl); for (Map.Entry entry : ret.entrySet()) { wcs.logger.info(entry.getKey() + ", " + entry.getValue()); } ret.put("appId",WeixinConstants.appid_accredit); return ret; } /** * 计算权限验证配置信息 * @param jsapi_ticket jssdk临时票据 * @param url * @return */ private Map<String, String> sign(String jsapi_ticket, String url) throws Exception { 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); MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(string1.getBytes("UTF-8")); signature = byteToHex(crypt.digest()); 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; }
1、在这里面需要强调下,微信目前不支持当前页面分享,分享其他链接,否则即使你的sign验签是对的,也会分享失败,
2、appID是appsecret微信公众号的,这个需要看下
3、还需要在公众号里面设置调取accsess_token,需要设置白名单,即当前网站域名的ip,否则后面的参数获取都会失败,无法进行验签成功。