目錄
- 1 概述
- 2 基礎接口
- 3 分享接口
- 4 圖像接口
- 5 音頻接口
- 6 智能接口
- 7 設備信息
- 8 地理位置
- 9 界面操作
- 10 微信掃一掃
- 11 企業號會話
- 12 附錄1-JS-SDK使用權限簽名算法
- 13 附錄2-所有JS接口列表
- 14 附錄3-所有菜單項列表
- 15 附錄4-常見錯誤及解決方法
- 16 附錄5-DEMO頁面和示例代碼
- 17 附錄6-問題反饋
概述
微信JS-SDK是微信公衆平臺面向網頁開發者提供的基於微信內的網頁開發工具包。
通過使用微信JS-SDK,網頁開發者可藉助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃等微信特有的能力,爲微信用戶提供更優質的網頁體驗。
此文檔面向網頁開發者介紹微信JS-SDK如何使用及相關注意事項。
使用說明
在使用微信JS-SDK對應的JS接口前,需確保已獲得使用對應JS接口的權限,可在下表中根據自己的帳號角色查看。 企業號帳號角色分爲註冊號和認證號,其中認證號擁有更多的JS-SDK權限,具體詳見下方表格:
功能1 | 接口 | 註冊號 | 認證號 |
---|---|---|---|
基礎接口 | 判斷當前客戶端版本是否支持指定JS接口 | 有 | 有 |
分享接口 | 獲取“分享到朋友圈”按鈕點擊狀態及設置分享內容接口 | 無 | 有 |
獲取“分享給朋友”按鈕點擊狀態及設置分享內容接口 | 無 | 有 | |
獲取“分享到QQ”按鈕點擊狀態及設置分享內容接口 | 無 | 有 | |
獲取“分享到騰訊微博”按鈕點擊狀態及設置分享內容接 | 無 | 有 | |
圖像接口 | 本地選圖或拍照接口 | 有 | 有 |
圖片預覽接口 | 有 | 有 | |
上傳圖片接口 | 有 | 有 | |
下載圖片接口 | 有 | 有 | |
音頻接口 | 開始錄音接口 | 有 | 有 |
停止錄音接口 | 有 | 有 | |
播放音頻接口 | 有 | 有 | |
暫停播放接口 | 有 | 有 | |
停止播放接口 | 有 | 有 | |
上傳語音接口 | 有 | 有 | |
下載語音接口 | 有 | 有 | |
智能接口 | 識別音頻並返回識別結果接口 | 有 | 有 |
設備信息 | 獲取網絡狀態接口 | 有 | 有 |
地理位置 | 查看地理位置地圖接口 | 有 | 有 |
獲取地理位置接口 | 有 | 有 | |
界面操作 | 隱藏右上角菜單接口 | 有 | 有 |
顯示右上角菜單接口 | 有 | 有 | |
關閉當前窗口接口 | 有 | 有 | |
批量隱藏菜單項接口 | 有 | 有 | |
批量顯示菜單項接口 | 有 | 有 | |
隱藏所有非基本菜單項接口 | 有 | 有 | |
顯示所有被隱藏的非基本菜單項接口 | 有 | 有 | |
微信掃一掃 | 掃一掃接口 | 有 | 有 |
注意: 所有的JS接口只能在企業號應用的可信域名下調用(包括子域名),可在企業號應用中心裏設置應用可信域名。
步驟一:引入JS文件
在需要調用JS接口的頁面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js
備註:支持使用 AMD/CMD 標準模塊加載方法加載
步驟二:通過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: '', // 必填,企業號的唯一標識,此處填寫企業號corpid
timestamp: , // 必填,生成簽名的時間戳
nonceStr: '', // 必填,生成簽名的隨機串
signature: '',// 必填,簽名,見附錄1
jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
});
步驟三:通過ready接口處理成功驗證
wx.ready(function(){
// config信息驗證後會執行ready方法,所有接口調用都必須在config接口獲得結果之後,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對於用戶觸發時才調用的接口,則可以直接調用,不需要放在ready函數中。
});
步驟四:通過error接口處理失敗驗證
wx.error(function(res){
// config信息驗證失敗會執行error函數,如簽名過期導致驗證失敗,具體錯誤信息可以打開config的debug模式查看,也可以在返回的res參數中查看,對於SPA可以在這裏更新簽名。
});
接口調用說明
所有接口通過wx對象(也可使用jWeixin對象)來調用,參數是一個對象,除了每個接口本身需要傳的參數之外,還有以下通用參數:
- success:接口調用成功時執行的回調函數。
- fail:接口調用失敗時執行的回調函數。
- complete:接口調用完成時執行的回調函數,無論成功或失敗都會執行。
- cancel:用戶點擊取消時的回調函數,僅部分有用戶取消操作的api纔會用到。
- trigger: 監聽Menu中的按鈕點擊時觸發的方法,該方法僅支持Menu中的相關接口。
注意:不要嘗試在trigger中使用ajax異步請求修改本次分享的內容,因爲客戶端分享操作是一個同步操作,這時候使用ajax的回包會還沒有返回。
以上幾個函數都帶有一個參數,類型爲對象,其中除了每個接口本身返回的數據之外,還有一個通用屬性errMsg,其值格式如下:
- 調用成功時:"xxx:ok" ,其中xxx爲調用的接口名
- 用戶取消時:"xxx:cancel",其中xxx爲調用的接口名
- 調用失敗時:其值爲具體錯誤信息
基礎接口
判斷當前客戶端版本是否支持指定JS接口
wx.checkJsApi({
jsApiList: ['chooseImage'] // 需要檢測的JS接口列表,所有JS接口列表見附錄2,
success: function(res) {
// 以鍵值對的形式返回,可用的api值true,不可用爲false
// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
});
備註:checkJsApi接口是客戶端6.0.2新引入的一個預留接口,第一期開放的接口均可不使用checkJsApi來檢測。
分享接口
請注意不要有誘導分享等違規行爲,對於誘導分享行爲將永久回收企業號接口權限,詳細規則請查看:朋友圈管理常見問題 。
獲取“分享到朋友圈”按鈕點擊狀態及自定義分享內容接口
wx.onMenuShareTimeline({
title: '', // 分享標題
link: '', // 分享鏈接
imgUrl: '', // 分享圖標
success: function () {
// 用戶確認分享後執行的回調函數
},
cancel: function () {
// 用戶取消分享後執行的回調函數
}
});
獲取“分享給朋友”按鈕點擊狀態及自定義分享內容接口
wx.onMenuShareAppMessage({
title: '', // 分享標題
desc: '', // 分享描述
link: '', // 分享鏈接
imgUrl: '', // 分享圖標
type: '', // 分享類型,music、video或link,不填默認爲link
dataUrl: '', // 如果type是music或video,則要提供數據鏈接,默認爲空
success: function () {
// 用戶確認分享後執行的回調函數
},
cancel: function () {
// 用戶取消分享後執行的回調函數
}
});
獲取“分享到QQ”按鈕點擊狀態及自定義分享內容接口
wx.onMenuShareQQ({
title: '', // 分享標題
desc: '', // 分享描述
link: '', // 分享鏈接
imgUrl: '', // 分享圖標
success: function () {
// 用戶確認分享後執行的回調函數
},
cancel: function () {
// 用戶取消分享後執行的回調函數
}
});
獲取“分享到騰訊微博”按鈕點擊狀態及自定義分享內容接口
wx.onMenuShareWeibo({
title: '', // 分享標題
desc: '', // 分享描述
link: '', // 分享鏈接
imgUrl: '', // 分享圖標
success: function () {
// 用戶確認分享後執行的回調函數
},
cancel: function () {
// 用戶取消分享後執行的回調函數
}
});
獲取“分享到騰訊微博”按鈕點擊狀態及自定義分享內容接口
wx.onMenuShareWeibo({
title: '', // 分享標題
desc: '', // 分享描述
link: '', // 分享鏈接
imgUrl: '', // 分享圖標
success: function () {
// 用戶確認分享後執行的回調函數
},
cancel: function () {
// 用戶取消分享後執行的回調函數
}
});
圖像接口
拍照或從手機相冊中選圖接口
wx.chooseImage({
count: 1, // 默認9
sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有
sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有
success: function (res) {
var localIds = res.localIds; // 返回選定照片的本地ID列表,localId可以作爲img標籤的src屬性顯示圖片
}
});
預覽圖片接口
wx.previewImage({
current: '', // 當前顯示圖片的http鏈接
urls: [] // 需要預覽的圖片http鏈接列表
});
上傳圖片接口
wx.uploadImage({
localId: '', // 需要上傳的圖片的本地ID,由chooseImage接口獲得
isShowProgressTips: 1// 默認爲1,顯示進度提示
success: function (res) {
var serverId = res.serverId; // 返回圖片的服務器端ID
}
});
備註:
- 上傳圖片有效期3天,可用微信多媒體接口下載圖片到自己的服務器,此處獲得的 serverId 即 media_id,參考文檔
- 目前多媒體文件下載接口的頻率限制爲10000次/天,如需要調高頻率,請郵件[email protected],郵件主題爲【申請多媒體接口調用量】,請對你的項目進行簡單描述,附上產品體驗鏈接,並對用戶量和使用量進行說明。
下載圖片接口
wx.downloadImage({
serverId: '', // 需要下載的圖片的服務器端ID,由uploadImage接口獲得
isShowProgressTips: 1// 默認爲1,顯示進度提示
success: function (res) {
var localId = res.localId; // 返回圖片下載後的本地ID
}
});
音頻接口
開始錄音接口
wx.startRecord();
停止錄音接口
wx.stopRecord({
success: function (res) {
var localId = res.localId;
}
});
監聽錄音自動停止接口
wx.onVoiceRecordEnd({
// 錄音時間超過一分鐘沒有停止的時候會執行 complete 回調
complete: function (res) {
var localId = res.localId;
}
});
播放語音接口
wx.playVoice({
localId: '' // 需要播放的音頻的本地ID,由stopRecord接口獲得
});
暫停播放接口
wx.pauseVoice({
localId: '' // 需要暫停的音頻的本地ID,由stopRecord接口獲得
});
停止播放接口
wx.stopVoice({
localId: '' // 需要停止的音頻的本地ID,由stopRecord接口獲得
});
監聽語音播放完畢接口
wx.onVoicePlayEnd({
serverId: '', // 需要下載的音頻的服務器端ID,由uploadVoice接口獲得
success: function (res) {
var localId = res.localId; // 返回音頻的本地ID
}
});
上傳語音接口
wx.uploadVoice({
localId: '', // 需要上傳的音頻的本地ID,由stopRecord接口獲得
isShowProgressTips: 1// 默認爲1,顯示進度提示
success: function (res) {
var serverId = res.serverId; // 返回音頻的服務器端ID
}
});
備註:
- 上傳語音有效期3天,可用微信多媒體接口下載語音到自己的服務器,此處獲得的 serverId 即 media_id,參考文檔
- 目前多媒體文件下載接口的頻率限制爲10000次/天,如需要調高頻率,請郵件[email protected],郵件主題爲【申請多媒體接口調用量】,請對你的項目進行簡單描述,附上產品體驗鏈接,並對用戶量和使用量進行說明。
下載語音接口
wx.downloadVoice({
serverId: '', // 需要下載的音頻的服務器端ID,由uploadVoice接口獲得
isShowProgressTips: 1// 默認爲1,顯示進度提示
success: function (res) {
var localId = res.localId; // 返回音頻的本地ID
}
});
智能接口
識別音頻並返回識別結果接口
wx.translateVoice({
localId: '', // 需要識別的音頻的本地Id,由錄音相關接口獲得
isShowProgressTips: 1, // 默認爲1,顯示進度提示
success: function (res) {
alert(res.translateResult); // 語音識別的結果
}
});
設備信息
獲取網絡狀態接口
wx.getNetworkType({
success: function (res) {
var networkType = res.networkType; // 返回網絡類型2g,3g,4g,wifi
}
});
地理位置
使用微信內置地圖查看位置接口
wx.openLocation({
latitude: 0, // 緯度,浮點數,範圍爲90 ~ -90
longitude: 0, // 經度,浮點數,範圍爲180 ~ -180。
name: '', // 位置名
address: '', // 地址詳情說明
scale: 1, // 地圖縮放級別,整形值,範圍從1~28。默認爲最大
infoUrl: '' // 在查看位置界面底部顯示的超鏈接,可點擊跳轉
});
獲取地理位置接口
wx.getLocation({
type: 'wgs84', // 默認爲wgs84的gps座標,如果要返回直接給openLocation用的火星座標,可傳入'gcj02'
success: function (res) {
var latitude = res.latitude; // 緯度,浮點數,範圍爲90 ~ -90
var longitude = res.longitude ; // 經度,浮點數,範圍爲180 ~ -180。
var speed = res.speed; // 速度,以米/每秒計
var accuracy = res.accuracy; // 位置精度
}
});
界面操作
隱藏右上角菜單接口
wx.hideOptionMenu();
顯示右上角菜單接口
wx.showOptionMenu();
關閉當前網頁窗口接口
wx.closeWindow();
批量隱藏功能按鈕接口
wx.hideMenuItems({
menuList: [] // 要隱藏的菜單項,所有menu項見附錄3
});
批量顯示功能按鈕接口
wx.showMenuItems({
menuList: [] // 要顯示的菜單項,所有menu項見附錄3
});
隱藏所有非基礎按鈕接口
wx.hideAllNonBaseMenuItem();
顯示所有功能按鈕接口
wx.showAllNonBaseMenuItem();
微信掃一掃
調起微信掃一掃接口
wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 0, // 默認爲0,掃描結果由微信處理,1則直接返回掃描結果,
scanType: ["qrCode","barCode"], // 可以指定掃二維碼還是一維碼,默認二者都有
success: function (res) {
var result = res.resultStr; // 當needResult 爲 1 時,掃碼返回的結果
}
});
企業號會話
創建企業號會話
1.接口描述
名稱:openEnterpriseChat
功能:通過JS-SDK創建企業號會話
2.請求參數
參數 | 必填 | 說明 |
---|---|---|
userIds | 是 | 參與會話的成員列表。格式爲userid1;userid2;...,用分號隔開,最大限制爲1000個。userid單個時爲單聊,多個時爲羣聊。 |
groupName | 是 | 會話名稱。單聊時該參數不需要傳。 |
3.代碼示例
wx.openEnterpriseChat({
userIds: ‘zhangshan;lisi;wangwu’,
groupName: ‘openEnterpriseChat討論組’,
success: function(res){
// 回調
},
error: function(res){
if(res.errMsg.indexOf('function_not_exist') > 0){
alert('版本過低請升級')
}
}
});
備註:引入新版js文件 http://res.wx.qq.com/open/js/jweixin-1.1.0.js 。微信客戶端6.3.5支持該接口,可通過function_not_exist錯誤信息提示用戶升級微信。
4.返回碼
返回碼 | 說明 |
---|---|
10001 | appid無效 |
10002 | 用戶未關注企業號 |
10003 | 消息服務未開啓 |
10004 | 用戶不在消息服務可見範圍 |
10005 | 存在無效的消息會話成員 |
10006 | 消息會話成員數不合法 |
-1 | 系統出錯 |
附錄1-JS-SDK使用權限簽名算法
jsapi_ticket
生成簽名之前必須先了解一下jsapi_ticket,jsapi_ticket是企業號號用於調用微信JS接口的臨時票據。正常情況下,jsapi_ticket的有效期爲7200秒,通過access_token來獲取。由於獲取jsapi_ticket的api調用次數非常有限,頻繁刷新jsapi_ticket會導致api調用受限,影響自身業務,開發者必須在自己的服務全局緩存jsapi_ticket。
- 參考以下文檔獲取access_token(有效期7200秒,開發者必須在自己的服務全局緩存access_token):http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%BB%E5%8A%A8%E8%B0%83%E7%94%A8
- 用第一步拿到的access_token 採用http GET方式請求獲得jsapi_ticket(有效期7200秒,開發者必須在自己的服務全局緩存jsapi_ticket):https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=ACCESS_TOKE
成功返回如下JSON:
{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}
獲得jsapi_ticket之後,就可以生成JS-SDK權限驗證的簽名了。
簽名算法
簽名生成規則如下:參與簽名的字段包括noncestr(隨機字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當前網頁的URL,不包含#及其後面部分) 。對所有待簽名參數按照字段名的ASCII 碼從小到大排序(字典序)後,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1。這裏需要注意的是所有參數名均爲小寫字符。對string1作sha1加密,字段名和字段值都採用原始值,不進行URL 轉義。
即signature=sha1(string1)。 示例:
- noncestr=Wm3WZYTPz0wzccnW
- jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
- timestamp=1414587457
- url=http://mp.weixin.qq.com
步驟1. 對所有待簽名參數按照字段名的ASCII 碼從小到大排序(字典序)後,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1:
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com
附錄2-所有JS接口列表
版本1.0.0接口
- onMenuShareTimeline
- onMenuShareAppMessage
- onMenuShareQQ
- onMenuShareWeibo
- onMenuShareQZone
- startRecord
- stopRecord
- onVoiceRecordEnd
- playVoice
- pauseVoice
- stopVoice
- onVoicePlayEnd
- uploadVoice
- downloadVoice
- chooseImage
- previewImage
- uploadImage
- downloadImage
- translateVoice
- getNetworkType
- openLocation
- getLocation
- hideOptionMenu
- showOptionMenu
- hideMenuItems
- showMenuItems
- hideAllNonBaseMenuItem
- showAllNonBaseMenuItem
- closeWindow
- scanQRCode
附錄3-所有菜單項列表
基本類
- 舉報: "menuItem:exposeArticle"
- 調整字體: "menuItem:setFont"
- 日間模式: "menuItem:dayMode"
- 夜間模式: "menuItem:nightMode"
- 刷新: "menuItem:refresh"
- 查看企業號(已添加): "menuItem:profile"
- 查看企業號(未添加): "menuItem:addContact"
傳播類
- 發送給朋友: "menuItem:share:appMessage"
- 分享到朋友圈: "menuItem:share:timeline"
- 分享到QQ: "menuItem:share:qq"
- 分享到QQ空間: "menuItem:share:QZone"
- 分享到Weibo: "menuItem:share:weiboApp"
- 收藏: "menuItem:favorite"
- 分享到FB: "menuItem:share:facebook"
- 分享到QQ空間:"menuItem:share:QZone"
保護類
- 調試: "menuItem:jsDebug"
- 編輯標籤: "menuItem:editTag"
- 刪除: "menuItem:delete"
- 複製鏈接: "menuItem:copyUrl"
- 原網頁: "menuItem:originPage"
- 閱讀模式: "menuItem:readMode"
- 在QQ瀏覽器中打開: "menuItem:openWithQQBrowser"
- 在Safari中打開: "menuItem:openWithSafari"
- 郵件: "menuItem:share:email"
- 一些特殊企業號: "menuItem:share:brand"
附錄4-常見錯誤及解決方法
調用config 接口1的時候傳入參數 debug: true 可以開啓debug模式,頁面會alert出錯誤信息。以下爲常見錯誤及解決方法:
- invalid url domain當前頁面所在域名與使用的corpid沒有綁定(可在該企業號的應用可信域名中配置域名)。
- invalid signature簽名錯誤。建議按如下順序檢查:
- 確認簽名算法正確,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。
- 確認config中nonceStr(js中駝峯標準大寫S), timestamp與用以簽名中的對應noncestr, timestamp一致。
- 確認url是頁面完整的url(請在當前頁面alert(location.href.split('#')[0])確認),包括'http(s)://'部分,以及'?'後面的GET參數部分,但不包括'#'hash後面的部分。
- 確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
- 確保一定緩存access_token和jsapi_ticket。
- 確保你獲取用來簽名的url是動態獲取的,動態頁面可參見實例代碼中php的實現方式。如果是html的靜態頁面在前端通過ajax將url傳到後臺簽名,前端需要用js獲取當前頁面除去'#'hash部分的鏈接(可用location.href.split('#')[0]獲取,而且需要encodeURIComponent),因爲頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數,如果不是動態獲取當前鏈接,將導致分享後的頁面簽名失敗。
- the permission value is offline verifying這個錯誤是因爲config沒有正確執行,或者是調用的JSAPI沒有傳入config的jsApiList參數中。建議按如下順序檢查:
- 確認config正確通過。
- 如果是在頁面加載好時就調用了JSAPI,則必須寫在wx.ready的回調中。
- 確認config的jsApiList參數包含了這個JSAPI。
- permission denied該公衆號沒有權限使用這個JSAPI(部分接口需要認證之後才能使用)。
- function not exist當前客戶端版本不支持該接口,請升級到新版體驗。
- 爲什麼6.0.1版本config:ok,但是6.0.2版本之後不ok(因爲6.0.2版本之前沒有做權限驗證,所以config都是ok,但這並不意味着你config中的簽名是OK的,請在6.0.2檢驗是否生成正確的簽名以保證config在高版本中也ok。)
- 在iOS和Android都無法分享(請確認公衆號已經認證,只有認證的公衆號才具有分享相關接口權限,如果確實已經認證,則要檢查監聽接口是否在wx.ready回調函數中觸發)
- 服務上線之後無法獲取jsapi_ticket,自己測試時沒問題。(因爲access_token和jsapi_ticket必須要在自己的服務器緩存,否則上線後會觸發頻率限制。請確保一定對token和ticket做緩存以減少2次服務器請求,不僅可以避免觸發頻率限制,還加快你們自己的服務速度。目前爲了方便測試提供了1w的獲取量,超過閥值後,服務將不再可用,請確保在服務上線前一定全局緩存access_token和jsapi_ticket,兩者有效期均爲7200秒,否則一旦上線觸發頻率限制,服務將不再可用)。
- uploadImage怎麼傳多圖(目前只支持一次上傳一張,多張圖片需等前一張圖片上傳之後再調用該接口)
- 沒法對本地選擇的圖片進行預覽(chooseImage接口本身就支持預覽,不需要額外支持)
- 通過a鏈接(例如先通過微信授權登錄)跳轉到b鏈接,invalid signature簽名失敗(後臺生成簽名的鏈接爲使用jssdk的當前鏈接,也就是跳轉後的b鏈接,請不要用微信登錄的授權鏈接進行簽名計算,後臺簽名的url一定是使用jssdk的當前頁面的完整url除去'#'部分)
- 出現config:fail錯誤(這是由於傳入的config參數不全導致,請確保傳入正確的appId、timestamp、nonceStr、signature和需要使用的jsApiList)
- 如何把jsapi上傳到微信的多媒體資源下載到自己的服務器(請參見文檔中uploadVoice和uploadImage接口的備註說明)
- Android通過jssdk上傳到微信服務器,第三方再從微信下載到自己的服務器,會出現雜音(微信團隊已經修復此問題,目前後臺已優化上線)
- 綁定父級域名,是否其子域名也是可用的(是的,合法的子域名在綁定父域名之後是完全支持的)
- 在iOS微信6.1版本中,分享的圖片外鏈不顯示,只能顯示公衆號頁面內鏈的圖片或者微信服務器的圖片,已在6.2中修復
- 是否需要對低版本自己做兼容(jssdk都是兼容低版本的,不需要第三方自己額外做更多工作,但有的接口是6.0.2新引入的,只有新版纔可調用)
- 該公衆號支付簽名無效,無法發起該筆交易(請確保你使用的jweixin.js是官方線上版本,不僅可以減少用戶流量,還有可能對某些bug進行修復,拷貝到第三方服務器中使用,官方將不對其出現的任何問題提供保障,具體支付簽名算法可參考 JSSDK微信支付一欄)
- 目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實現web app的頁面會導致簽名失敗,此問題已在Android6.2中修復
- uploadImage在chooseImage的回調中有時候Android會不執行,Android6.2會解決此問題,若需支持低版本可以把調用uploadImage放在setTimeout中延遲100ms解決
- require subscribe錯誤說明你沒有訂閱該測試號,該錯誤僅測試號會出現
- getLocation返回的座標在openLocation有偏差,因爲getLocation返回的是gps座標,openLocation打開的騰訊地圖爲火星座標,需要第三方自己做轉換,6.2版本開始已經支持直接獲取火星座標
- 查看公衆號(未添加): “menuItem:addContact”不顯示,目前僅有從公衆號傳播出去的鏈接才能顯示,來源必須是公衆號
附錄5-DEMO頁面和示例代碼
DEMO頁面:
http://demo.open.weixin.qq.com/jssdk
示例代碼:
http://demo.open.weixin.qq.com/jssdk/sample.zip
備註:鏈接中包含php、java、nodejs以及python的示例代碼供第三方參考,第三方切記要對獲取的accesstoken以及jsapi_ticket進行緩存以確保不會觸發頻率限制。
附錄6-問題反饋
郵箱地址:[email protected]
郵件主題:【微信JS-SDK反饋】
郵件內容說明:
用簡明的語言描述問題所在,並交代清楚遇到該問題的場景,可附上截屏圖片,微信團隊會盡快處理你的反饋。