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

首頁 > 編程 > JavaScript > 正文

vue使用微信JS-SDK實現分享功能

2019-11-19 10:59:25
字體:
來源:轉載
供稿:網友

最近開發微信公眾號內嵌H5頁面,使用vue搭建的項目,由于業務需求,需要實現微信自定義分享功能,所以項目中集成微信JS-SDK。微信JS-SDK是微信公眾平臺面向網頁開發者提供的基于微信內的網頁開發工具包。通過使用微信JS-SDK,網頁開發者可借助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信用戶提供更優質的網頁體驗。

1.綁定域名

微信公眾號開發測試帳號:  http://mp.weixin.qq.com/debug ...  ,需要填寫接口配置,一個公網能訪問的域名,推薦用natapp/路由俠。填寫JS接口安全域名 ,設置JS接口安全域后,通過關注該測試號,開發者即可在該域名下調用微信開放的JS接口,請閱讀 微信JSSDK開發文檔

1)這里使用路由俠,實現內網穿透  http://www.luyouxia.com/   ,下載安裝后,配置相應的內網映射地址

2)設置JS接口安全域

2.引入JS文件

通過npm安裝微信的js-sdk,或者在index.html頁面中直接加script標簽來引用,這里采用npm安裝,

npm install weixin-js-sdk

在需要分享的頁面中引入

import wx from 'weixin-js-sdk'

3.java實現js-sdk權限簽名算法

1)jsapi_ticket

生成簽名之前必須先了解一下jsapi_ticket,jsapi_ticket是公眾號用于調用微信JS接口的臨時票據。正常情況下,jsapi_ticket的有效期為7200秒,通過access_token來獲取。由于獲取jsapi_ticket的api調用次數非常有限,頻繁刷新jsapi_ticket會導致api調用受限,影響自身業務,開發者必須在自己的服務全局緩存jsapi_ticket。

2)獲取access_token(有效期7200秒,開發者必須在自己的服務全局緩存access_token)

access_token是公眾號的全局唯一接口調用憑據,公眾號調用各接口時都需使用access_token,官方文檔:

https://mp.weixin.qq.com/wiki ...

@RequestMapping(value = "/get_access_token", method = RequestMethod.GET)public String getAssessToken() {  String url = "https://api.weixin.qq.com/cgi-bin/token";  String str = HttpClientUtil.sendGet(url, "grant_type=" + Constants.GRANTTYPE + "&secret=" + Constants.APPSECRET + "&appid=" + Constants.APPID);  JSONObject jsonObject = JSONObject.fromObject(str);  return jsonObject.toString();}

3)獲取access_token后,采用http GET方式請求獲得jsapi_ticket

@RequestMapping(value = "/get_ticket", method = RequestMethod.GET)public String getTicket() {  String urlToken = "https://api.weixin.qq.com/cgi-bin/token";  String tokenObj = HttpClientUtil.sendGet(urlToken, "grant_type=" + Constants.GRANTTYPE + "&secret=" + Constants.APPSECRET + "&appid=" + Constants.APPID);  JSONObject jsonToken = JSONObject.fromObject(tokenObj);  String access_token = jsonToken.getString("access_token");  String urlTicket = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";  String strTicket = HttpClientUtil.sendGet(urlTicket, "type=jsapi" + "&access_token=" + access_token);  JSONObject jsonTicket = JSONObject.fromObject(strTicket);   return jsonTicket.toString();}

4)簽名算法

簽名生成規則如下:參與簽名的字段包括noncestr(隨機字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當前網頁的URL,不包含#及其后面部分) 。對所有待簽名參數按照字段名的ASCII 碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1。這里需要注意的是所有參數名均為小寫字符。對string1作sha1加密,字段名和字段值都采用原始值,不進行URL 轉義。

//主要代碼 @RequestMapping(value = "/get_signature", method = RequestMethod.GET)public Map<String, String> getSignature(String url) {  Map<String, String> ret = new HashMap<String, String>();  String wxTicket = getWxApiTicket();  String nonce_str = create_nonce_str();  String timestamp = create_timestamp();  String str;  String signature = "";  //注意這里參數名必須全部小寫,且必須有序  str = "jsapi_ticket=" + wxTicket +      "&noncestr=" + nonce_str +      "×tamp=" + timestamp +      "&url=" + url;  logger.info(str);  try {    MessageDigest crypt = MessageDigest.getInstance("SHA-1");    crypt.reset();    crypt.update(str.getBytes("UTF-8"));    signature = byteToHex(crypt.digest());  } catch (NoSuchAlgorithmException e) {    e.printStackTrace();  } catch (UnsupportedEncodingException e) {    e.printStackTrace();  }  ret.put("url", url);  ret.put("jsapi_ticket", wxTicket);  ret.put("nonceStr", nonce_str);  ret.put("timestamp", timestamp);  ret.put("signature", signature);  ret.put("appId", Constants.APPID);  return ret;}

簽名接口返回信息

{  "signature":"4021b3f502e6bd15798a0433af33c4ef1be4ff83",  "appId":"wx618f45e4948c3889",  "jsapi_ticket":"sM4AOVdWfPE4DxkXGEs8VOxnOWlkG3Q1qP1pwA8mBLNgkCewNOfFiU8EmlnAx8_Fe0Zh-rGS03Nu8BQZB0a4-g",  "url":null,  "nonceStr":"ab5d0e96-429b-4a86-bd88-dc1276dcf76f",  "timestamp":"1566527616"}

注意事項

1.簽名用的noncestr和timestamp必須與wx.config中的nonceStr和timestamp相同。

2.簽名用的url必須是調用JS接口頁面的完整URL。

3.出于安全考慮,開發者必須在服務器端實現簽名的邏輯。

4.通過config接口注入權限驗證配置

所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調用(同一個url僅需調用一次,對于變化url的SPA的web app可在每次url變化時進行調用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實現web app的頁面會導致簽名失敗,此問題會在Android6.2中修復)。

wx.config({  debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。  appId: '', // 必填,公眾號的唯一標識  timestamp: , // 必填,生成簽名的時間戳  nonceStr: '', // 必填,生成簽名的隨機串  signature: '',// 必填,簽名  jsApiList: [] // 必填,需要使用的JS接口列表});

config配置里面的參數appid, timestamp, nonceStr, signature都是要后臺接口返回的,前端可以通過axios發送接口請求獲取

this.axios.get('/wx/get_signature?url=' + encodeURIComponent(location.href.split('#')[0])).then((res) => { wx.config({  debug: true, // 開啟調試模式  appId: res.data.appId, // 必填,公眾號的唯一標識  timestamp: res.data.timestamp, // 必填,生成簽名的時間戳  nonceStr: res.data.nonceStr, // 必填,生成簽名的隨機串  signature: res.data.signature,// 必填,簽名  jsApiList: [   "updateAppMessageShareData",//自定義“分享給朋友”及“分享到QQ”按鈕的分享內容   "updateTimelineShareData",//自定義“分享到朋友圈”及“分享到QQ空間”按鈕的分享內容   "onMenuShareWeibo",//獲取“分享到騰訊微博”按鈕點擊狀態及自定義分享內容接口  ] // 必填,需要使用的JS接口列表 })}).catch((error) => { console.log(error)});//通過ready接口處理成功驗證wx.ready(function(){  this.wxShareTimeline();  this.wxShareAppMessage();// config信息驗證后會執行ready方法,所有接口調用都必須在config接口獲得結果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對于用戶觸發時才調用的接口,則可以直接調用,不需要放在ready函數中。});wx.error(function(res){//config信息驗證失敗會執行error函數,如簽名過期導致驗證失敗,具體錯誤信息可以打開config的debug模式查看,也可以在返回的res參數中查看,對于SPA可以在這里更新簽名。});

5.實現自定義分享朋友/朋友圈

wxShareTimeline() {// 自定義“分享給朋友”及“分享到QQ”按鈕的分享內容  wx.updateAppMessageShareData({   title: '世界那么大,我想去看看-微信test', // 分享標題   desc: '世界那么大,我想去看看-微信test', // 分享描述   link: location.href.split('#')[0], // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致   imgUrl: 'http://www.baidu.com/FpEhdOqBzM8EzgFz3ULByxatSacH', // 分享圖標   success: () => {   }  }) }, wxShareAppMessage() {//自定義“分享到朋友圈”及“分享到QQ空間”按鈕的分享內容  wx.updateTimelineShareData({   title: '世界那么大,我想去看看-微信test2', // 分享標題   desc: '世界那么大,我想去看看-微信test2', // 分享描述   link: location.href.split('#')[0], // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致   imgUrl: require('./logo.jpg'), // 分享圖標(不能賦相對路徑,一定要是絕對路徑)   success: () => {   }  }) }

6.遇到問題

1)invalid signature

獲取的簽名錯誤,原因可能是公眾號平臺配置有問題或者是后臺返回簽名接口的算法有問題

2)invalid url domain

當前頁面所在域名與使用的appid沒有綁定,請確認正確填寫綁定的域名,僅支持80(http)和443(https)兩個端口,因此不需要填寫端口號。

3)自定義的縮略圖不顯示

路徑錯誤導致的,不能使用相對路徑,一定要是絕對路徑,另外一個原因就是圖片尺寸和類型問題,推薦使用jpg格式

4)二次分享導致不能調用自定義的接口

url進行編碼之后傳給后臺獲取的簽名才不會計算錯,因為微信會在分享后的鏈接后面加from=singlemessage&isappinstalled=0這串字符串。

7.全局緩存公眾號access_token 和jsapi_ticket

1)通過數據庫保存

做法是獲取access_token的時候把當前系統時間和access_token保存到數據表中,當再次獲取時,查詢上次獲取的時間與當前系統時間比較,看看時間是否大于2個小時(7200s)。如果超過這個時間限制,再獲取一個access_token,然后更新數據表的accessToken和getTime。

2)通過物理磁盤創建txt文件保存

3)通過servlet啟動線程,讓線程定時執行獲取

可以參考 https://blog.csdn.net/guobinh ...

以上便是這次調用微信js-sdk總結,想要了解更多可以閱讀微信JS-SDK說明文檔 https://mp.weixin.qq.com/wiki.. .

總結

以上所述是小編給大家介紹的vue使用微信JS-SDK實現分享功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品人伦一区二区三区蜜桃网站| 国外成人免费在线播放| 成人h猎奇视频网站| 欧美成人精品在线| 热re99久久精品国产66热| 国产精品久久久久久久久久免费| 久久影院资源站| 亚洲国产成人一区| 成人av电影天堂| 久久久久久九九九| 7m第一福利500精品视频| 日韩经典一区二区三区| 日韩欧美高清在线视频| 国产亚洲aⅴaaaaaa毛片| 欧美一区二区三区艳史| 日韩成人在线网站| 久久成人精品一区二区三区| 成人妇女免费播放久久久| 国产91免费看片| 午夜精品一区二区三区在线| 亚洲成人a级网| 日本精品久久久久影院| 久久精品99无色码中文字幕| 最近2019中文字幕一页二页| 97精品视频在线播放| 久久中文字幕在线视频| 7777kkkk成人观看| 亚洲天堂一区二区三区| 久久69精品久久久久久久电影好| 欧美有码在线观看视频| 日韩欧美精品网址| 亚洲精品99久久久久| 欧美一区二粉嫩精品国产一线天| 国产成人精品亚洲精品| 人九九综合九九宗合| 日韩成人在线播放| 国产成人一区二区在线| 日韩精品免费一线在线观看| 欧美一级免费视频| 欧美裸体xxxx极品少妇| 日韩av一卡二卡| 欧美另类暴力丝袜| 日韩av男人的天堂| 亚洲石原莉奈一区二区在线观看| 国产精品视频成人| 自拍视频国产精品| 91在线视频精品| 在线不卡国产精品| 国产日韩欧美日韩大片| 欧美精品成人在线| 亚洲美女喷白浆| 2019中文字幕免费视频| 国产免费一区二区三区在线能观看| 国产精品日韩在线| 日韩有码在线播放| 欧美一级大片视频| 日本一区二区不卡| 欧美激情啊啊啊| 久久久精品视频在线观看| 久久久久久久久久久av| 国产精品欧美激情| 国产成人精品电影久久久| 欧美日韩国产限制| 久久久亚洲影院你懂的| 97免费视频在线| 45www国产精品网站| 国产亚洲成av人片在线观看桃| 青青精品视频播放| 精品美女久久久久久免费| 国内精品小视频在线观看| 欧美伊久线香蕉线新在线| 欧美丝袜美女中出在线| 亚洲精品97久久| 岛国精品视频在线播放| 欧美亚洲一级片| 欧美成人久久久| 成人精品一区二区三区电影黑人| 69久久夜色精品国产7777| 久久久女女女女999久久| 成人免费看片视频| 欧美视频在线观看免费| 欧美日韩亚洲一区二区三区| 国产日韩中文字幕| 丁香五六月婷婷久久激情| 中文字幕亚洲无线码a| 亚洲欧美日韩网| 国产日产久久高清欧美一区| 亚洲高清久久网| 精品国产91久久久久久老师| 日韩欧美极品在线观看| 国产精品揄拍一区二区| 成人精品在线视频| 亚洲精品久久久久久久久久久久久| 91中文精品字幕在线视频| 亚洲国产精品电影在线观看| 国产日韩欧美中文| 社区色欧美激情 | 久久久久久国产三级电影| 国产精品久久精品| 亚洲欧美国产视频| 国产精品91在线| 久久久亚洲国产天美传媒修理工| 欧美激情一二区| 久久伊人色综合| 亚洲视频电影图片偷拍一区| 精品小视频在线| 国产欧美日韩综合精品| 综合欧美国产视频二区| 98精品国产高清在线xxxx天堂| 亚洲免费视频网站| 久久久亚洲精选| 国产精品视频区| 亚洲最大福利视频网| 日韩欧美aⅴ综合网站发布| 成人午夜激情网| 久久免费国产精品1| 欧美另类交人妖| 亚洲国产精品福利| 国产成人精品日本亚洲专区61| 成人激情视频在线播放| 亚洲日本欧美中文幕| 欧美国产日产韩国视频| 亚洲国语精品自产拍在线观看| 国产精品一区二区三| 欧美视频在线观看免费| 亚洲第一国产精品| 亚洲成人xxx| 狠狠综合久久av一区二区小说| 亚洲天堂男人的天堂| 欧美色视频日本版| 日韩在线观看免费全集电视剧网站| 日本在线精品视频| 深夜成人在线观看| 国产日韩在线看| 国产精品一区二区久久久久| 欧美日韩中文字幕综合视频| 97免费视频在线| 亚洲片在线观看| 最新69国产成人精品视频免费| 成人久久久久久| 国产一区二区三区在线视频| 亚洲日韩欧美视频一区| 国产精品久久久久久av| 欧美激情在线狂野欧美精品| 亚洲激情在线观看视频免费| 国产一区二区三区丝袜| 欧美精品www在线观看| 国产精品久久久久久久久久久不卡| 国产一区玩具在线观看| 色视频www在线播放国产成人| 国产一区二区三区直播精品电影| 亚洲最新av在线网站| 日韩成人在线播放| 久久久久久网站| 精品久久国产精品| 国内精品久久久久| 97国产真实伦对白精彩视频8| 欧美裸体xxxx极品少妇软件| 亚洲欧洲在线观看| 不卡av日日日| 亚洲精品日韩在线| 综合网中文字幕| 日本一区二三区好的精华液| 亚洲精品国精品久久99热一|