其实主要还是要看微信的js-sdk
http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html
页面上的代码(微信文档中有)
<script>
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '${appId}', // 必填,公众号的唯一标识
timestamp: '${timestamp}', // 必填,生成签名的时间戳
nonceStr: '${nonce_str}', // 必填,生成签名的随机串
signature: '${signature1}',// 必填,签名,见附录1
jsApiList: [ 'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
// 微信 conifg验证完成后,会进入ready方法,在这里实现你的修改
wx.ready(function(){
wx.checkJsApi({
jsApiList: [
'getNetworkType',
'previewImage'
],
success: function (res) {
// alert("checkJsApi=="+ JSON.stringify(res));
}
});
wx.onMenuShareTimeline({
title: '我是分享的标题', // 分享标题
link: '', // 分享链接
imgUrl: '', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
//分享给朋友
wx.onMenuShareAppMessage({
title: '我是分享的标题', // 分享标题
desc: '我是分享的内容', // 分享描述
link: '', //分享的链接
imgUrl:'', // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
//dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
//alert("用户确定分享");
},
cancel: function () {
// 用户取消分享后执行的回调函数
//alert("用户取消分享");
}
});
});
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
//alert("errormsg="+ JSON.stringify(res));
});
</script>
其实这次开发就是遇到了一个问题而已,
一直报错 “ errmsg configinvalid signature”
其实是 sha1 签名出现了问题
工具类sha1签名:
public static String NEWcreateSHA1Sign(String ss) {
String signature="";
// string1 = "jsapi_ticket=" + jsapiTicket +
// "&noncestr=" + rand +
// "×tamp=" + timestamp +
// "&url=" + url;
// System.out.println(string1);
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(ss.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (Exception e){
e.printStackTrace();
}
// System.out.println("签名1:"+signature);
// System.out.println("签名2:"+ SHA1Util.encode(string1) );
return signature;
}
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;
}
后台代码
获取 token
获取jsapi_ticket
生成签名
返回给页面数据