主要为以下实现步骤:
1.绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。(特别提示不需要加上http或者https,吃过亏)
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
3.通过config接口注入权限验证配置
wx.config({ debug: true,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '',// 必填,公众号的唯一标识 timestamp:,// 必填,生成签名的时间戳 nonceStr: '',// 必填,生成签名的随机串 signature: '',// 必填,签名,见附录1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 });
4.通过ready接口处理成功验证
wx.ready(function(){ //详细代码 });
5.通过error接口处理失败验证
wx.error(function(res){});
<script> //微信分享朋友圈 $(function(){ /***用户点击分享到微信圈后加载接口接口*******/ var url=window.location.href.split('#')[0]; url = url.replace(/&/g,'%26'); console.log("url:"+url); $.ajax({ url: "<%=basePath%>/lottery/sharetoFriend.action?url="+url,type: "POST",async:true,cache: false,dataType: "json",success: function(data){ wx.config({ debug: false,appId: 'wx2948dfef9ef421ee',timestamp:data.timeStamp,nonceStr:data.nonceStr,signature:data.signature,jsApiList: [ 'checkJsApi','onMenuShareTimeline','hideOptionMenu','onMenuShareAppMessage' ] }); wx.ready(function(){ //wx.hideOptionMenu();/***隐藏分享菜单****/ wx.checkJsApi({ jsApiList: [ 'getLocation','onMenuShareAppMessage' ],success: function (res) { //alert(res.errMsg); } }); wx.onMenuShareAppMessage({ title: '刮刮乐',desc: '刮刮乐开始啦',link: '<%=basePath%>/lottery/lottery.action?lottery.id=${lottery.id}',imgurl: '<%=basePath%>/resources/qjc/img/start.png',trigger: function (res) { //alert('用户点击发送给朋友'); },success: function (res) { alert('您已获得抽奖机会,赶紧去赢大奖吧~~'); //分享之后增加游戏次数 $.ajax({ url: "<%=basePath%>/lottery/rewardplayCount.action?openId=${openId}&lotteryId=${lottery.id}&shareType=friend",success: function(data){ } }); },cancel: function (res) { //alert('已取消'); },fail: function (res) { alert(res.errMsg); } }); // 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口 wx.onMenuShareTimeline({ title: '刮刮乐',trigger: function (res) { //alert('用户点击分享到朋友圈'); },success: function (res) { alert('您已获得抽奖机会,赶紧去赢大奖吧~~'); //分享之后增加游戏次数 $.ajax({ url: "<%=basePath%>/lottery/rewardplayCount.action?openId=${openId}&lotteryId=${lottery.id}&shareType=friendCircle",fail: function (res) { alert(res.errMsg); } }); wx.error(function (res) { alert(res.errMsg); }); }); },error: function() { alert('ajax request Failed!!!!'); return; } }); }); </script>
//微信分享 public void sharetoFriend(){ HttpServletRequest request = ServletActionContext.getRequest(); String timeStamp = Sha1Util.getTimeStamp();//时间戳 String nonceStr = WxConfig.getUUID();//随机字符串,不长于32位 String url=request.getParameter("url"); String signature = WxConfig.getSignature("APPId","APP_secret",url,timeStamp,nonceStr); request.setAttribute("timeStamp",timeStamp); request.setAttribute("nonceStr",nonceStr); request.setAttribute("url",url); request.setAttribute("signature",signature); WXjssdk result = new WXjssdk(timeStamp,nonceStr,signature,url); CommonUtil.returnMsg(ServletActionContext.getResponse(),new Gson().toJson(result)); }
">//jsapi_ticket public final static String WEIXIN_JSAPI_TICKET_URL ="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi"; //access_token public static String getAccesstoken(String appId,String appSecret){ String access_token; access_token = mapToken.get("accesstoken"); if(access_token==null){ String url = HttpUtil.WEIXIN_HOST_API + "/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret; String menuJsonStr = HttpUtil.get(url); final Type type = new Typetoken<Map<String,Object>>() {}.getType(); final Map<Object,Object> accesstokenInfo = new Gson().fromJson(menuJsonStr,type); try{ access_token = accesstokenInfo.get("access_token").toString(); Object expires_in = accesstokenInfo.get("expires_in"); mapToken.put("accesstoken",access_token); logger.info("access_token:"+access_token+";expires_in:"+expires_in); }catch (JSONException e) { access_token = null; e.printstacktrace(); logger.error("errcode:{}:"+accesstokenInfo.get("errcode")+"errmsg:{}:"+accesstokenInfo.get("errmsg")); } } return access_token; } //jsapi_ticket public static String getJsapiTicket(String accesstoken){ String ticket; ticket = mapTicket.get("ticket"); if(ticket==null){ String url = HttpUtil.WEIXIN_HOST_API + "/cgi-bin/ticket/getticket?access_token="+accesstoken+"&type=jsapi"; String menuJsonStr = HttpUtil.get(url); final Type type = new Typetoken<Map<String,Object> ticketInfo = new Gson().fromJson(menuJsonStr,type); try{ ticket = ticketInfo.get("ticket").toString(); String expires_in = ticketInfo.get("expires_in").toString(); mapTicket.put("ticket",ticket); logger.info("jsapi_ticket:"+ticket+";expires_in:"+expires_in); }catch (JSONException e) { ticket = null; e.printstacktrace(); logger.error("ticket errcode:{}:"+ticketInfo.get("errcode")+"errmsg:{}:"+ticketInfo.get("errmsg")); } } return ticket; } //生成随机字符串UUID public static String getUUID(){ String uuid = UUID.randomUUID().toString().trim().replaceAll("-",""); return uuid; } //JS-SDK Signature public static String getSignature(String appId,String appSecret,String url,String timeStamp,String nonceStr){ String accesstoken = getAccesstoken(appId,appSecret); String jsapi_ticket = getJsapiTicket(accesstoken); logger.info("accesstoken==="+accesstoken); String signValue = "jsapi_ticket="+jsapi_ticket+"&noncestr="+nonceStr+"×tamp="+timeStamp+"&url="+url; logger.info("微信JS-SDK权限验证的签名串:"+signValue); //这个签名.主要是给加载微信js使用.别和上面的搞混了. String signature = Sha1Util.getSha1((signValue)); logger.info("微信JS-SDK权限验证的签名:"+signature); return signature; }
另外项目用到的Sha1Util.java和MD5Util.java可以直接在平台下载。
您可能感兴趣的文章:
- 微信js-sdk上传与下载图片接口用法示例
- 微信js-sdk地理位置接口用法示例
- 微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
- 解析微信JS-SDK配置授权,实现分享接口
- 微信JS-SDK选取手机照片上传功能
- 微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
- PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
- 微信 java 实现js-sdk 图片上传下载完整流程
- 微信js-sdk界面操作接口用法示例
- 最详细的ASP.NET微信JS-SDK支付代码
- php微信公众号js-sdk开发应用
- 微信JS-SDK坐标位置如何转换为百度地图坐标
- 详解基于Node.js的微信JS-SDK后端接口实现代码
- 微信js-sdk分享功能接口常用逻辑封装示例
- 微信JS-SDK分享功能的.Net实现代码
- php版微信js-sdk支付接口类用法示例
- ASP.NET MVC 微信JS-SDK认证
- 微信开发 JS-SDK 6.0.2 经常遇到问题总结
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。