亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

微信js-sdk+JAVA實現“分享到朋友圈”和“發送給朋友”功能詳解

2024-07-14 08:40:12
字體:
來源:轉載
供稿:網友

主要為以下實現步驟:

1.綁定域名

先登錄微信公眾平臺進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。(特別提示不需要加上http或者https,吃過虧)

2.頁面引入js文件

   <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',         'onMenuShareTimeline',         '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",             type: "POST",             async:true,             cache: false,             dataType: "json",             success: function(data){                            }            });          },          cancel: function (res) {           //alert('已取消');          },          fail: function (res) {           alert(res.errMsg);          }         });               // 2.2 監聽“分享到朋友圈”按鈕點擊、自定義分享內容及分享結果接口        wx.onMenuShareTimeline({          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=friendCircle",             type: "POST",             async:true,             cache: false,             dataType: "json",             success: function(data){                            }            });          },          cancel: function (res) {           //alert('已取消');          },          fail: function (res) {           alert(res.errMsg);          }       });               wx.error(function (res) {           alert(res.errMsg);         });       });      },     error: function() {       alert('ajax request failed!!!!');       return;     }    });  });  </script> 

java后臺action代碼:

//微信分享   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));   } 

WxConfig.java代碼 

">//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>>() {}.getType();       final Map<Object, 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可以直接在平臺下載。 


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人激情电影一区二区| 77777亚洲午夜久久多人| 成人做爰www免费看视频网站| 成人信息集中地欧美| 国产精品在线看| 日韩激情视频在线播放| 在线视频亚洲欧美| 国产亚洲欧美aaaa| 主播福利视频一区| 亚洲国产日韩欧美在线动漫| 亚洲成人av在线| 欧美性做爰毛片| 欧美黄色三级网站| 国产免费一区视频观看免费| 国产日产欧美a一级在线| 欧美日韩中文字幕日韩欧美| 亚洲国产欧美自拍| 久久视频精品在线| 亚洲精品大尺度| 最新91在线视频| 2021久久精品国产99国产精品| 国产亚洲欧美日韩美女| 国产美女扒开尿口久久久| 欧美成人在线免费视频| 午夜精品福利电影| 久久综合伊人77777蜜臀| 日韩免费观看视频| 国产欧美在线播放| 亚洲欧洲高清在线| 精品丝袜一区二区三区| 欧美高清不卡在线| 免费99精品国产自在在线| 久久天天躁狠狠躁夜夜爽蜜月| 在线播放国产精品| 欧美猛交ⅹxxx乱大交视频| 久久视频在线免费观看| 亚洲一区二区日本| 欧美亚洲国产日韩2020| 国产精品日韩电影| 国产欧美日韩精品专区| 欧美色另类天堂2015| 成人黄色影片在线| 国产精品99久久久久久人| 久久av资源网站| 欧美丰满少妇xxxxx| 成人久久一区二区三区| 亚洲欧洲av一区二区| 欧美尺度大的性做爰视频| 自拍偷拍亚洲一区| 日韩黄色高清视频| 日韩精品免费一线在线观看| 成人网在线观看| 中文字幕在线观看亚洲| 欧美日韩在线第一页| 亚洲欧美日韩一区在线| 欧美激情va永久在线播放| 91香蕉亚洲精品| 欧美午夜美女看片| www亚洲精品| 日韩专区在线观看| 亚洲激情电影中文字幕| 97视频免费在线观看| 久久av红桃一区二区小说| 国产91精品黑色丝袜高跟鞋| 国产精品99久久99久久久二8| 亚洲一级一级97网| 久久精彩免费视频| 日韩在线播放视频| 精品视频久久久久久| 欧美激情在线观看视频| 日韩视频免费中文字幕| 亚洲男子天堂网| 性亚洲最疯狂xxxx高清| www欧美日韩| 亚洲第一精品自拍| www.久久久久| 欧美性猛交xxxx乱大交| 日本最新高清不卡中文字幕| 九色精品美女在线| 色偷偷噜噜噜亚洲男人的天堂| 亚洲欧美三级在线| 欧美男插女视频| 黄色91在线观看| y97精品国产97久久久久久| 国产精品欧美在线| 国产免费一区二区三区在线能观看| 日本精品性网站在线观看| 久久亚洲成人精品| 欧美日韩精品中文字幕| 美日韩丰满少妇在线观看| 欧美激情视频给我| 日韩国产中文字幕| 久久人人爽亚洲精品天堂| 国内精品模特av私拍在线观看| 欧美激情视频播放| 91精品国产高清久久久久久91| 亚洲精品网址在线观看| 九九热这里只有在线精品视| 亚洲国产精品中文| 亚洲影院高清在线| 欧美激情图片区| 欧美日韩综合视频| 久久久www成人免费精品| 97免费视频在线播放| 国产午夜精品视频免费不卡69堂| 亚洲视频在线观看网站| 国产精品女主播| 日韩中文字幕久久| 91国语精品自产拍在线观看性色| 久久久久久91| 欧美视频不卡中文| 国产精品一区二区三区久久| 日韩综合视频在线观看| 国外日韩电影在线观看| 国产一区二区三区日韩欧美| 欧美日韩黄色大片| 欧美性感美女h网站在线观看免费| 精品一区精品二区| 欧洲亚洲在线视频| 国产91ⅴ在线精品免费观看| 日韩精品在线观看视频| 欧美黄色小视频| 超碰日本道色综合久久综合| 欧美裸体男粗大视频在线观看| 亚洲xxxx18| 日韩av有码在线| 91成品人片a无限观看| 亚洲天堂av在线免费观看| 精品久久久视频| 亚洲精品丝袜日韩| 亚洲午夜未满十八勿入免费观看全集| 久久青草精品视频免费观看| 97精品伊人久久久大香线蕉| 国语对白做受69| 亚洲国产精品成人精品| 亚洲人成网站免费播放| 成人高h视频在线| 欧美性生交大片免网| 日韩电影视频免费| 色综合视频一区中文字幕| 日韩欧中文字幕| 久久天天躁狠狠躁夜夜爽蜜月| 91免费的视频在线播放| 91视频免费在线| 久久久久久久久久国产精品| 韩国福利视频一区| 欧美视频二区36p| 成人h猎奇视频网站| 国产精品黄色影片导航在线观看| 欧美电影在线免费观看网站| 亚洲国产天堂久久国产91| 国产亚洲视频在线| 九色91av视频| 亚洲精品日产aⅴ| 久久精品国产成人| 久久亚洲国产成人| 国产丝袜高跟一区| 亚洲精品日韩久久久| 国产69精品久久久久久| 国产精品久久久久7777婷婷| 午夜精品三级视频福利| 精品久久久久久久中文字幕| 97超级碰碰人国产在线观看| 亚洲电影免费在线观看|