官方JS-SDK说明文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
1、先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。【备注:登录后可在“开发者中心”查看对应的接口权限。】
2、前台js代码:
1>、前端页面引入JS:<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
2>、加入下面js
var title = "特朗普结束访华 离开北京";//分享标题var desc = "朗普访华#[美国总统特朗普结束访华]美国总统特朗普10日上午结束对中国的国事访问,乘专机离开北京。";//分享描述var link = "${wechatSign.pageUrl}";//分享链接var imgUrl = "http://n.sinaimg.cn/news/transform/20171110/AvUQ-fynstfh3322960.jpg";//图片图标 $(function(){ wx.config({ debug: false, appId: '${wechatSign.appid}',//公众号appid timestamp:'${wechatSign.timestamp}', //生成签名时间戳 nonceStr:'${wechatSign.noncestr}', //生成签名随机字符串 signature:'${wechatSign.signature}', //签名 jsApiList: [ 'checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone' ] }); }); wx.ready(function () { wx.onMenuShareTimeline({ title: title, // 分享标题 desc: desc, // 分享描述 link: link, // 分享链接 imgUrl: imgUrl, // 分享图标 success: function () { // 用户确认分享后执行的回调函数 console.log("test"); }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ title: title, // 分享标题 desc: desc, // 分享描述 link: link, // 分享链接 imgUrl: imgUrl, // 分享图标 //type: '', // 分享类型,music、video或link,不填默认为link //dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空 success: function () { // 用户确认分享后执行的回调函数 console.log("test"); }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareQQ({ title: title, // 分享标题 desc: desc, // 分享描述 link: link, // 分享链接 imgUrl: imgUrl, // 分享图标 success: function () { // 用户确认分享后执行的回调函数 console.log("test"); }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareWeibo({ title: title, // 分享标题 desc: desc, // 分享描述 link: link, // 分享链接 imgUrl: imgUrl, // 分享图标 success: function () { // 用户确认分享后执行的回调函数 console.log("test"); }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareQZone({ title: title, // 分享标题 desc: desc, // 分享描述 link: link, // 分享链接 imgUrl: imgUrl, // 分享图标 success: function () { // 用户确认分享后执行的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); })
后台代码:
1>、Controller层
@RequestMapping("/default")public String frontDefault(Model model,HttpServletRequest request){ //获取access_token String access_token = getWechatService.getAccessTokenOfJssdk();//根据token获取jsapi_ticketString jsapi_ticket = getWechatService.getJsapiTicketOfJssdk(access_token);Long timestamp = new Date().getTime()/1000; UUID uuid = UUID.randomUUID(); String noncestr=uuid.toString();String param = request.getQueryString(); String pageUrl = request.getRequestURL().toString(); if (param != "" && param != null) { pageUrl = pageUrl + "?" + param; }String signature = "jsapi_ticket="+jsapi_ticket+"&noncestr="+noncestr+"×tamp="+timestamp+"&url="+pageUrl;signature = getSha1(signature);String appid = "wxd7a6d344bc0c6abc";//公众号appid MapwechatSign = new HashMap (); wechatSign.put("timestamp", timestamp); wechatSign.put("noncestr", noncestr); wechatSign.put("signature", signature); wechatSign.put("appid", appid); wechatSign.put("pageUrl", pageUrl); model.addAttribute("wechatSign", wechatSign);return "/default.html";}//sha1 public String getSha1(String str) { if (null == str || 0 == str.length()){ return null; } char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char[] buf = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }
2>、Service层
@Servicepublic class GetWechatServiceImpl implements GetWechatService{//绑定公众号appid String appid = "wxd7a6d344bc0c6abc";//绑定公众号secret String secret = "29085320d3bd472t29192cd4eecd6166"; @Resource private GetWechatDao getWechatDao; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public String getAccessTokenOfJssdk() { // TODO Auto-generated method stub String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret; //查询数据库,是否存在access_token List