页面js:
引入微信官方提供的js
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
注入config,然后定义分享参数,包含图片链接、描述、标题等
wx.config({ debug: false,
// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '${signMap.appId}', // 必填,公众号的唯一标识
timestamp: '${signMap.timestamp}', // 必填,生成签名的时间戳
nonceStr: '${signMap.nonceStr}', // 必填,生成签名的随机串
signature: '${signMap.signature}',// 必填,签名
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'showOptionMenu',
'hideOptionMenu'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2}
});
window.share_config = {
"share": {
"imgUrl": $(".slideimg").eq(0).attr("src"),//分享图,默认当相对路径处理,所以使用绝对路径的的话,“http://”协议前缀必须在。
"desc" : $("#h-prodname").val(),//摘要,如果分享到朋友圈的话,不显示摘要。
"title" : $("#h-prodname").val(),//分享卡片标题
"link": window.location.href,//分享出去后的链接,这里可以将链接设置为另一个页面。(此链接带有code用来获取openid 不需要再次通过 微信网页授权获取)
"success":function(){//分享成功后的回调函数
},
'cancel': function () {
// 用户取消分享后执行的回调函数
}
}
};
wx.ready(function () {
wx.onMenuShareAppMessage(share_config.share);//分享给好友
wx.onMenuShareTimeline(share_config.share);//分享到朋友圈
wx.onMenuShareQQ(share_config.share);//分享给手机QQ
});
后台实现config的参数值生成
sign 方法进行jsapi_ticket的签名生成
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")); //对string1 字符串进行SHA-1加密处理
signature = byteToHex(crypt.digest()); //对加密后字符串转成16进制
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
ret.put("appId", WeixinKit.getApiConfig().getAppId());
ret.put("url", url);
ret.put("string1", string1);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
//生成随机字符串
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
//生成时间戳字符串
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
生成config需要的签名信息等
ApiConfigKit.setThreadLocalApiConfig(WeixinKit.getApiConfig());
JsTicket JsTicket = JsTicketApi.getTicket(JsApiType.jsapi);//获取jsticket
//生成config需要的签名信息等
Map<String, String> signMap = sign(JsTicket.getTicket(), getRequest().getRequestURL().append("?").append(getRequest().getQueryString()).toString());
setAttr("signMap", signMap);