您的位置:首页 > 移动开发 > 微信开发

微信分享SDK开发

2015-09-24 21:54 976 查看
最近帮人做一个微商城,涉及到了分享团购的功能,所以看了下微信的分享接口,具体的微信api已经很详细了,但是获取最关键的签名还是比较坑人的,主要耽误时间的地方就是在如果获取签名了。

废话不多说了,现在就把自己的代码贴出来供大家参考一下。一直想学PHP,但是太懒了,下面是java的。

下面是后端用来获取签名signature的方法:

@Controller
@RequestMapping(value="/weiXinApi")
public class WeiXinApi{

@RequestMapping(value="/getWxConfig")
@ResponseBody
public Object getWxConfig(HttpServletRequest request){
Map ret = new HashMap();
String appId = WeiXinConstant.PAYAPPIDID; // 必填,公众号的唯一标识
String secret = WeiXinConstant.APPSECRET;
String requestUrl = request.getParameter("url");
String access_token = "";
String jsapi_ticket = "";
String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 必填,生成签名的时间戳
String nonceStr = UUID.randomUUID().toString(); // 必填,生成签名的随机串
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+secret;
JSONObject json = WeiXinUtil.httpRequest(url, "GET", null);
if (json != null) {
access_token = json.getString("access_token");
url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_token+"&type=jsapi";
json = WeiXinUtil.httpRequest(url, "GET", null);
if (json != null) {
jsapi_ticket = json.getString("ticket");
}
}
String signature = "";
//注意这里参数名必须全部小写,且必须有序
String[] paramArr = new String[] { "jsapi_ticket=" + jsapi_ticket, "noncestr=" + nonceStr,
"timestamp=" + timestamp,  "url=" + requestUrl };
Arrays.sort(paramArr);
// 将排序后的结果拼接成一个字符串
String sign = paramArr[0].concat("&"+paramArr[1]).concat("&"+paramArr[2])
.concat("&"+paramArr[3]);
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(sign.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}catch (NoSuchAlgorithmException e){
e.printStackTrace();
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}
ret.put("appId", appId);
ret.put("timestamp", timestamp);
ret.put("nonceStr", nonceStr);
ret.put("signature", signature);
return ret;
}
}


下面是前端的js

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ include file="../../common/taglibs.jsp"%>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport"
content="width=device-width,initial-scale=1,minimum-scale=1, maximum-scale=1, user-scalable=no" />
<meta name="format-detection" content="telephone=no,email=no" />
<meta name="full-screen" content="yes">
<title>微信分享</title>
</head>
<body id="specific-group" onload="getConfig()" >
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript" charset="utf-8">
function getConfig(){
var url = location.href.split('#')[0];
$.ajax({
url:"${cxt}/weiXinApi/getWxConfig.action",
dataType : "json",
async : false,
data:{url:url},
success : function(data) {
wx.config({
debug: true,
appId: data.appId,
timestamp: data.timestamp,
nonceStr: data.nonceStr,
signature: data.signature,
jsApiList : [ 'onMenuShareTimeline', 'onMenuShareAppMessage',
'onMenuShareQQ', 'onMenuShareWeibo' ]
});

//修改这里
var shareData = {
title : "",
link : "",
img_url : "",
desc : ""
};

//所有微信事件都要写到ready里
wx.ready(function() {
//分享给朋友
wx.onMenuShareAppMessage({
title : shareData.title,
desc : shareData.desc,
link : shareData.link,
imgUrl : shareData.img_url,
trigger : function(res) {
alert('用户点击发送给朋友');
},
success : function(res) {
alert('已分享');
},
cancel : function(res) {
alert('已取消');
},
fail : function(res) {
alert(JSON.stringify(res));
}
});

//分享到朋友圈,注意去掉回调里的alert
wx.onMenuShareTimeline({
title : shareData.title,
desc : shareData.desc,
link : shareData.link,
imgUrl : shareData.img_url,
trigger : function(res) {
alert('用户点击分享到朋友圈');
},
success : function(res) {
alert('已分享');
},
cancel : function(res) {
alert('已取消');
},
fail : function(res) {
alert(JSON.stringify(res));
}
});
//分享到QQ
wx.onMenuShareQQ({
title : shareData.title,
desc : shareData.desc,
link : shareData.link,
imgUrl : shareData.img_url,
trigger : function(res) {
alert('用户点击分享到QQ');
},
complete : function(res) {
alert(JSON.stringify(res));
},
success : function(res) {
alert('已分享');
},
cancel : function(res) {
alert('已取消');
},
fail : function(res) {
alert(JSON.stringify(res));
}
});

//分享到微博
wx.onMenuShareWeibo({
title : shareData.title,
desc : shareData.desc,
link : shareData.link,
imgUrl : shareData.img_url,
trigger : function(res) {
alert('用户点击分享到微博');
},
complete : function(res) {
alert(JSON.stringify(res));
},
success : function(res) {
alert('已分享');
},
cancel : function(res) {
alert('已取消');
},
fail : function(res) {
alert(JSON.stringify(res));
}
});

}); //end of ready
},
error: function(xhr, status, error) {
alert(status);
alert(xhr.responseText);
}
});
}
</script>
</body>
</html>


水平比较差,还请大家指导一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: