需要在前台设置:
<%-- 微信分享配置开始 --%>
<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,否则后面的参数获取都会失败,无法进行验签成功。
1288

被折叠的 条评论
为什么被折叠?



