总结之通过微信公众平台实现h5微信客户端自定义分享标题、描述和图标(前后端实现)
前置動作(后端開發)
步驟一:綁定域名
js安全域名配置很重要,前端的服務的域名,非常重要!
1、先登錄微信公眾平臺進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。
JS接口安全域名需要和示例格式一模一樣,不需要帶http/https
備注:登錄后可在“開發者中心”查看對應的接口權限。
2、需要開啟開發者密鑰,配置ip白名單(后端服務器ip,獲取access_token等白名單不攔截)。
注意:ip白名單每天都在變化,可以參考官方獲取ip方式
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_the_WeChat_server_IP_address.html
設置JS接口安全域名后,公眾號開發者可在該域名下調用微信開放的JS接口。
注意事項:
1、可填寫五個域名或路徑(例:wx.qq.com或wx.qq.com/mp),需使用由字母、數字、“-”或中文組成的合法域名,不支持IP地址、端口號及短鏈域名。
2、填寫的域名須通過ICP備案的驗證。
3、 將文件MP_verify_Pd7Rn8KfdBv1xmNh.txt(點擊下載)上傳至填寫域名或路徑指向的web服務器(或虛擬主機)的目錄(若填寫域名,將文件放置在域名根目錄下,例如wx.qq.com/MP_verify_Pd7Rn8KfdBv1xmNh.txt;若填寫路徑,將文件放置在路徑目錄下,例如wx.qq.com/mp/MP_verify_Pd7Rn8KfdBv1xmNh.txt),并確保可以訪問。
4、 一個自然月內最多可修改并保存五次,本月剩余保存次數:5
細節需要注意內容:
簡單理解就是,前端h5項目運行的服務器域名,注意是域名,不是IP!
有一個txt文件要放置在提供的域名目錄下,可以是根目錄,也可以指定目錄下面,配置好之后,直接瀏覽器地址欄訪問這個路徑,能打開就成功了,此處還有一個坑:
如果把這個txt文件放置在根目錄,你的h5訪問路徑就不能帶路徑,也就是放置在根路徑下面,http://xxx,xxx/index.html是沒有問題的,如果h5項目是http://xxx.xxx/mp/index.html,這是行不通;
同理,如果你把這個txt文件放置在某個文件下,如:http://xxx.xxx/mp,放在mp文件夾下,那你的h5也要放在這個路徑下面,http://xxx.xxx/mp/index.html;不然肯定有問題;
參考鏈接:
https://www.cnblogs.com/web-wjg/p/11346656.html
https://www.csdn.net/tags/OtDacgwsNDE0ODUtYmxvZwO0O0OO0O0O.html
https://www.mk2048.com/blog/blog_kijhh0j20hab.html
步驟二:引入JS文件
在需要調用JS接口的頁面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js
如需進一步提升服務穩定性,當上述資源不可訪問時,可改訪問:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。
備注:支持使用 AMD/CMD 標準模塊加載方法加載
步驟三: 從后端獲取權限配置簽名
要從后端獲取如下內容:
{"traceID": "09a3cad4-f426-4167-a375-c0676b4709e","retCode": 200,"retMsg": "success","data": {"signature": "a42a05f53400e380a000ef3832740f804ab","appId": "wx6d67b63","jsapi_ticket": "O3SMpm8bG7kJnF36aXbe8-83NpQ5KpEh_hfAfmkSN73KjH2CcJdtqwyli__Tj7uujod5sK7L6T69JQ","url": "https://xxxxxx分享地址","nonceStr": "66e4a737-ca38-467d-a53f-6d5e4d24b0b1","timestamp": "1650878949"} } java簽名算法可以下載微信公眾平臺demo 獲取簽名算法中,需要開發者傳入 jsapi_ticket 和 url ,其中 jsapi_ticket 需要通過 http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=ACCESS_TOKEN 接口獲取,url 為調用頁面的完整 url 注意: 1. jsapi_ticket 的有效期為 7200 秒,開發者必須全局緩存 jsapi_ticket ,防止超過調用頻率。因為微信公眾平臺java的demo只實現了簽名算法,還需要自己去獲取jsapi_ticket
jsapi_ticket的獲取又需要依賴access_token故貼出實現代碼如下:
jspi_ticket應該失效前通過看門狗去獲取更新,讓它一直有效,這里是通過緩存方式,但并發很高時,可以發生緩存穿透,一瞬間耗光獲取access_token的次數(可能性極低)
步驟四:通過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接口列表 });分享接口
請注意,原有的 wx.onMenuShareTimeline、wx.onMenuShareAppMessage、wx.onMenuShareQQ、wx.onMenuShareQZone 接口,即將廢棄。請盡快遷移使用客戶端6.7.2及JSSDK 1.4.0以上版本支持的 wx.updateAppMessageShareData、wx.updateTimelineShareData接口。
自定義“分享給朋友”及“分享到QQ”按鈕的分享內容(1.4.0)
wx.ready(function () { //需在用戶可能點擊分享按鈕前就先調用wx.updateAppMessageShareData({ title: '', // 分享標題desc: '', // 分享描述link: '', // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致imgUrl: '', // 分享圖標success: function () {// 設置成功}}) });自定義“分享到朋友圈”及“分享到QQ空間”按鈕的分享內容(1.4.0)
wx.ready(function () { //需在用戶可能點擊分享按鈕前就先調用wx.updateTimelineShareData({ title: '', // 分享標題link: '', // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致imgUrl: '', // 分享圖標success: function () {// 設置成功}}) });常見2個錯誤及解決方法
invalid signature簽名錯誤。建議按如下順序檢查:
1、確認簽名算法正確,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。
2、確認config中nonceStr(js中駝峰標準大寫S), timestamp與用以簽名中的對應noncestr, timestamp一致。
3、確認url是頁面完整的url(請在當前頁面alert(location.href.split(‘#’)[0])確認),包括’http(s)😕/‘部分,以及’?‘后面的GET參數部分,但不包括’#'hash后面的部分。
4、確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
確保一定緩存access_token和jsapi_ticket。
5、確保你獲取用來簽名的url是動態獲取的,動態頁面可參見實例代碼中php的實現方式。如果是html的靜態頁面在前端通過ajax將url傳到后臺簽名,前端需要用js獲取當前頁面除去’#‘hash部分的鏈接(可用location.href.split(’#')[0]獲取,而且需要encodeURIComponent),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數,如果不是動態獲取當前鏈接,將導致分享后的頁面簽名失敗。
the permission value is offline verifying這個錯誤是因為config沒有正確執行,或者是調用的JSAPI沒有傳入config的jsApiList參數中。建議按如下順序檢查:
1、確認config正確通過。
2、如果是在頁面加載好時就調用了JSAPI,則必須寫在wx.ready的回調中。
3、確認config的jsApiList參數包含了這個JSAPI。
總結
以上是生活随笔為你收集整理的总结之通过微信公众平台实现h5微信客户端自定义分享标题、描述和图标(前后端实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我眼中的《APUE》
- 下一篇: 高等代数---多项式