<i id="yupd0"></i>
  • <i id="yupd0"></i>
  • <thead id="yupd0"></thead>
    <blockquote id="yupd0"></blockquote>
    <i id="yupd0"></i>
  • 碼迷,www.greeshyz.com
    首頁 > 微信 > 詳細

    微信JS-SDK文檔

    時間:2016-09-26 09:38:45      閱讀:4342      評論:0      收藏:0      [點我收藏+]

    標簽:

    微信JS SDK 調用詳解

     

     

    微信JS SDK 調用詳解... 1

    概述... 2

    使用說明... 2

    接口調用說明... 4

    基礎接口... 4

    判斷當前客戶端版本是否支持指定JS接口... 5

    分享接口... 5

    獲取分享到朋友圈按鈕點擊狀態及自定義分享內容接口... 5

    獲取分享給朋友按鈕點擊狀態及自定義分享內容接口... 5

    獲取分享到QQ”按鈕點擊狀態及自定義分享內容接口... 6

    獲取分享到騰訊微博按鈕點擊狀態及自定義分享內容接口... 6

    圖像接口... 7

    拍照或從手機相冊中選圖接口... 7

    預覽圖片接口... 7

    上傳圖片接口... 7

    下載圖片接口... 8

    音頻接口... 8

    開始錄音接口... 8

    停止錄音接口... 8

    監聽錄音自動停止接口... 8

    播放語音接口... 9

    暫停播放接口... 9

    停止播放接口... 9

    監聽語音播放完畢接口... 9

    上傳語音接口... 9

    下載語音接口... 10

    智能接口... 10

    識別音頻并返回識別結果接口... 10

    設備信息... 10

    獲取網絡狀態接口... 11

    地理位置... 11

    使用微信內置地圖查看位置接口... 11

    獲取地理位置接口... 11

    界面操作... 12

    隱藏右上角菜單接口... 12

    顯示右上角菜單接口... 12

    關閉當前網頁窗口接口... 12

    批量隱藏功能按鈕接口... 12

    批量顯示功能按鈕接口... 12

    隱藏所有非基礎按鈕接口... 12

    顯示所有功能按鈕接口... 12

    微信掃一掃... 13

    調起微信掃一掃接口... 13

    微信小店... 13

    跳轉微信商品頁接口... 13

    微信卡券... 13

    調起適用于門店的卡券列表并獲取用戶選擇列表... 13

    批量添加卡券接口... 14

    查看微信卡包中的卡券接口... 14

    微信支付... 14

    發起一個微信支付請求... 14

    附錄1-JS-SDK使用權限簽名算法... 15

    附錄2-所有JS接口列表... 17

    附錄3-所有菜單項列表... 18

    附錄4-位置簽名生成算法... 18

    附錄5-支付擴展字段及簽名生成算法... 19

    附錄6-卡券擴展字段及簽名生成算法... 23

    附錄7-常見錯誤及解決方法... 24

    附錄8-DEMO頁面和示例代碼... 24

    附錄9-問題反饋... 25

     

    概述

    微信JS-SDK是微信公眾平臺面向網頁開發者提供的基于微信內的網頁開發工具包。

    通過使用微信JS-SDK,網頁開發者可借助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信用戶提供更優質的網頁體驗。

    此文檔面向網頁開發者介紹微信JS-SDK如何使用及相關注意事項。

     

    使用說明

    在使用微信JS-SDK對應的JS接口前,需確保公眾號已獲得使用對應JS接口的權限,可登錄微信公眾平臺進入“開發者中心”查看對應的接口權限。

    注意: 所有的JS接口只能在公眾號綁定的域名下調用,公眾號開發者需要先登錄微信公眾平臺進入“公眾號設置”》“功能設置”里填寫“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變化時進行調用)。

    wx.config({

        debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。

        appId: ‘‘, // 必填,公眾號的唯一標識

        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對象)來調用,參數是一個對象,除了每個接口本身需要傳的參數之外,還有以下通用參數:

    1. success:接口調用成功時執行的回調函數。
    2. fail:接口調用失敗時執行的回調函數。
    3. complete:接口調用完成時執行的回調函數,無論成功或失敗都會執行。
    4. cancel:用戶點擊取消時的回調函數,僅部分有用戶取消操作的api才會用到。
    5. trigger: 監聽Menu中的按鈕點擊時觸發的方法,該方法僅支持Menu中的相關接口。


    以上幾個函數都帶有一個參數,類型為對象,其中除了每個接口本身返回的數據之外,還有一個通用屬性errMsg,其值格式如下:

    1. 調用成功時:"xxx:ok" ,其中xxx為調用的接口名
    2. 用戶取消時:"xxx:cancel",其中xxx為調用的接口名
    3. 調用失敗時:其值為具體錯誤信息

    基礎接口

    判斷當前客戶端版本是否支持指定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.chooseImage({

        success: function (res) {

            var localIds = res.localIds; // 返回選定照片的本地ID列表,localId可以作為img標簽的src屬性顯示圖片

        }

    });

    預覽圖片接口

    wx.previewImage({

        current: ‘‘, // 當前顯示的圖片鏈接

        urls: [] // 需要預覽的圖片鏈接列表

    });

    上傳圖片接口

    wx.uploadImage({

        localId: ‘‘, // 需要上傳的圖片的本地ID,由chooseImage接口獲得

        isShowProgressTips: 1// 默認為1,顯示進度提示

        success: function (res) {

            var serverId = res.serverId; // 返回圖片的服務器端ID

        }

    });

    備注:可用微信下載多媒體文件接口下載上傳的圖片,此處獲得的 serverId 即 media_id,參考文檔 ../12/58bfcfabbd501c7cd77c19bd9cfa8354.html

     

    下載圖片接口

    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

        }

    });

    備注:可用微信下載多媒體文件接口下載上傳的語音,此處獲得的 serverId 即 media_id,參考文檔 ../12/58bfcfabbd501c7cd77c19bd9cfa8354.html

     

    下載語音接口

    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({

        timestamp: 0, // 位置簽名時間戳,僅當需要兼容6.0.2版本之前時提供

        nonceStr: ‘‘, // 位置簽名隨機串,僅當需要兼容6.0.2版本之前時提供

        addrSign: ‘‘, // 位置簽名,僅當需要兼容6.0.2版本之前時提供,詳見附錄4

        success: function (res) {

           var longitude = res.longitude; // 緯度,浮點數,范圍為90 ~ -90

           var latitude = res.latitude; // 經度,浮點數,范圍為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 時,掃碼返回的結果

    }

    });

    微信小店

    跳轉微信商品頁接口

    wx.openProductSpecificView({

        productId: ‘‘, // 商品id

        viewType: ‘‘ // 0.默認值,普通商品詳情頁1.掃一掃商品詳情頁2.小店商品詳情頁

    });

     

    微信卡券

    調起適用于門店的卡券列表并獲取用戶選擇列表

    wx.chooseCard({

        shopId: ‘‘, // 門店Id

        cardType: ‘‘, // 卡券類型

        cardId: ‘‘, // 卡券Id

        timeStamp: 0, // 卡券簽名時間戳

        nonceStr: ‘‘, // 卡券簽名隨機串

        cardSign: ‘‘, // 卡券簽名,詳見附錄6

        success: function (res) {

            var cardList= res.cardList; // 用戶選中的卡券列表信息

        }

    });

    批量添加卡券接口

    wx.addCard({

        cardList: [{

            cardId: ‘‘,

            cardExt: ‘‘

        }], // 需要添加的卡券列表

        success: function (res) {

            var cardList = res.cardList; // 添加的卡券列表信息

        }

    });

    查看微信卡包中的卡券接口

    wx.openCard({

        cardList: [{

            cardId: ‘‘,

            code: ‘‘

        }]// 需要打開的卡券列表

    });

     

    微信支付

    發起一個微信支付請求

    wx.chooseWXPay({

        timestamp: 0, // 支付簽名時間戳

        noncestr: ‘‘, // 支付簽名隨機串

        package: ‘‘, // 訂單詳情擴展字符串,詳見附錄5

        paySign: ‘‘, // 支付簽名,詳見附錄5

    });

     

    附錄1-JS-SDK使用權限簽名算法

    jsapi_ticket

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

    1. 參考以下文檔獲取access_token(有效期7200秒,開發者必須在自己的服務全局緩存access_token):../15/54ce45d8d30b6bf6758f68d2e95bc627.html
    2. 用第一步拿到的access_token 采用http GET方式請求獲得jsapi_ticket(有效期7200秒,開發者必須在自己的服務全局緩存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

    成功返回如下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&timestamp=1414587457&url=http://mp.weixin.qq.com


    步驟2. 對string1進行sha1簽名,得到signature:

    f4d90daf4b3bca3078ab155816175ba34c443a7b

    注意事項

    1. 簽名用的noncestr和timestamp必須與wx.config中的nonceStr和timestamp相同。
    2. 簽名用的url必須是調用JS接口頁面的完整URL。
    3. 出于安全考慮,開發者必須在服務器端實現簽名的邏輯。

     

    附錄2-所有JS接口列表

    版本1.0.0接口

    • onMenuShareTimeline
    • onMenuShareAppMessage
    • onMenuShareQQ
    • onMenuShareWeibo
    • 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
    • chooseWXPay
    • openProductSpecificView
    • addCard
    • chooseCard
    • openCard

    附錄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"
    • 分享到Weibo: "menuItem:share:weiboApp"
    • 收藏: "menuItem:favorite"
    • 分享到FB: "menuItem:share:facebook"

    保護類

    • 調試: "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-位置簽名生成算法

    addrSign的生成規則與JS-SDK權限驗證的簽名生成規則相同(參考附錄1),只是參與簽名參數有所不同。參與addrSign的簽名參數有:appId、url(當前網頁url)、timestamp、noncestr、accesstoken(用戶授權憑證,請參照oauth2.0 協議獲取)。

     

    附錄5-支付擴展字段及簽名生成算法

    訂單詳情(package)擴展字符串定義

    在商戶調起JS API 時,商戶需要此時確定該筆訂單詳情,并將該訂單詳情通過一定的方式進行組合放入package。JS API 調用后,微信將通過package 的內容生成預支付單。下 面將定義package 的所需字段列表以及簽名方法。 接口需要注意:所有傳入參數都是字符串類型!

    package 所需字段列表:

    參數

    名稱

    是否必填

    格式

    說明

    bank_type

    銀行通道類型

    字符串類型,固定為"WX",注意大寫

    固定為"WX";

    body

    商品描述

    字符串類型,128字節以下

    商品描述;

    attach

    附加數據

    字符串類型,128字節以下

    附加數據,原樣返回;

    partner

    商戶號

    字符串類型

    字符串類型注冊時分配的財付通商戶號partnerId;

    out_trade_no

    商戶訂單號

    字符串類型,32字節以下

    商戶系統內部的訂單號,32 個字符內、可包含字母;確保在商戶系統唯一

    total_fee

    訂單總金額

    字符串類型

    訂單總金額,單位為分;

    fee_type

    支付幣種

    字符串類型,默認值是"1"

    取值:1(人民幣),暫只支持1;

    notify_url

    通知URL

    字符串類型,255字節以下

    在支付完成后,接收微信通知支付結果的URL,需給絕對路徑, 255 字符內, 格式如:http://wap.tenpay.com/tenpay.asp;

    spbill_create_ip

    訂單生成的機器IP

    字符串類型,15字節以下

    指用戶瀏覽器端IP,不是商戶服務器IP,格式為IPV4;

    time_start

    交易起始時間

    字符串類型,14字節以下

    訂單生成時間,格式為yyyyMMddHHmmss,如2009 年12 月25 日9 點10 分10 秒表示為20091225091010,時區為GMT+8 beijing;該時間取自商戶服務器;

    time_expire

    交易結束時間

    字符串類型,14字節以下

    訂單失效時間,格式為yyyyMMddHHmmss,如2009 年12 月27 日9 點10 分10 秒表示為20091227091010,時區為GMT+8 beijing;該時間取自商戶服務器;

    transport_fee

    物流費用

    字符串類型

    物流費用,單位為分。如果有值,必須保證

    transport_fee + product_fee=total_fee;

    product_fee

    商品費用

    字符串類型

    物流費用,單位為分。如果有值,必須保證

    transport_fee + product_fee=total_fee;

    goods_tag

    商品標記

    字符串類型

    商品標記,優惠券時可能用到;

    input_charset

    傳入參數字符編碼

    字符串類型

    取值范圍:"GBK"、"UTF-8",默認:"GBK"

    package 生成方法: 由于package中攜帶了生成訂單的詳細信息,因此在微信將對package里面的內容進行鑒 權,確定package攜帶的信息是真實、有效、合理的。因此,這里將定義生成package字符 串的方法。

    1. 對所有傳入參數按照字段名的ASCII碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1,注意:值為空的參數不參與簽名;
    2. 在string1最后拼接上key=paternerKey得到stringSignTemp字符串,并對stringSignTemp進行md5運算,再將得到的字符串所有字符轉換為大寫,得到sign值signValue。
    3. 對傳入參數中所有鍵值對的value進行urlencode轉碼后重新拼接成字符串string2。對于JS前端程序,一定要使用函數encodeURIComponent進行urlencode編碼(注意!進行urlencode時要將空格轉化為%20而不是+)。
    4. 將sign=signValue拼接到string2后面得到最終的package字符串。


    下面定義了一段生成package字符串的示范過程: 假設以下為package傳入參數:

    • bank_type=WX
    • body=支付測試
    • fee_type=1
    • input_charset=UTF-8
    • notify_url=http://weixin.qq.com
    • out_trade_no=7240b65810859cbf2a8d9f76a638c0a3
    • partner=1900000109
    • spbill_create_ip=196.168.1.1
    • total_fee=1

    i: 經過a過程URL鍵值對字典序排序后的字符串string1為:

    bank_type=WX&body=支付測試&fee_type=1&input_charset=UTF-8&notify_url=http://we

    ixin.qq.com&out_trade_no=7240b65810859cbf2a8d9f76a638c0a3&partner=1900000109&spbill_

    create_ip=196.168.1.1&total_fee=1

    ii:經過b過程后得到sign為:

    sign

    =md5(string1&key=8934e7d15453e97507ef794cf7b0519d).toUpperCase

    =md5(bank_type=WX&body=支付測試&fee_type=1&input_charset=UTF-8&notify_url=htt

    p://weixin.qq.com&out_trade_no=7240b65810859cbf2a8d9f76a638c0a3&partner=1900000109&

    spbill_create_ip=196.168.1.1&total_fee=1&key=8934e7d15453e97507ef794cf7b0519d).toUpper

    Case()

    ="7f77b507b755b3262884291517e380f8".toUpperCase()

    ="7F77B507B755B3262884291517E380F8"

    iii:再對傳入參數中的每一個鍵值對中的value進行urlencode編碼后得到:

    bank_type=WX&body=%E6%94%AF%E4%BB%98%E6%B5%8B%E8%AF%95&fee_typ

    e=1&input_charset=UTF-8&notify_url=http%3A%2F%2Fweixin.qq.com&out_trade_no=7240b6

    5810859cbf2a8d9f76a638c0a3&partner=1900000109&spbill_create_ip=196.168.1.1&total_fee=1

    iv:拼接上sign后得到最終package結果:

    bank_type=WX&body=%E6%94%AF%E4%BB%98%E6%B5%8B%E8%AF%95&fee_typ

    e=1&input_charset=UTF-8&notify_url=http%3A%2F%2Fweixin.qq.com&out_trade_no=7240b6

    5810859cbf2a8d9f76a638c0a3&partner=1900000109&spbill_create_ip=196.168.1.1&total_fee=1

    &sign=7F77B507B755B3262884291517E380F8


    支付簽名(paySign)生成方法

    paySign字段是對本次發起JSAPI的行為進行鑒權,只有通過了paySign鑒權,才能繼 續對package鑒權并生成預支付單。paySign的生成規則與JS-SDK權限驗證的簽名生成規則相同(參考附錄1)。


    參與paySign簽名的字段包括:appid、timestamp、noncestr、package以及appkey(即 paySignkey)。

     

    附錄6-卡券擴展字段及簽名生成算法

    卡券擴展字段cardExt說明

    cardExt本身是一個JSON字符串,是商戶為該張卡券分配的唯一性信息,包含以下字段:

    字段

    是否必填

    說明

    code

    指定的卡券code碼,只能被領一次。use_custom_code字段為true的卡券必須填寫,非自定義code不必填寫。

    openid

    指定領取者的openid,只有該用戶能領取。bind_openid字段為true的卡券必須填寫,非自定義openid不必填寫。

    timestamp

    時間戳,商戶生成從1970年1月1日00:00:00至今的秒數,即當前的時間,且最終需要轉換為字符串形式;

    由商戶生成后傳入。

    signature

    簽名,商戶將接口列表中的參數按照指定方式進行簽名,簽名方式使用SHA1,具體簽名方案參見下文;由商戶按照規范簽名后傳入。

    balance

    紅包余額,以分為單位。紅包類型必填(LUCKY_MONEY),其他卡券類型不填。

    簽名說明

    1. 將appsecret(第三方用戶唯一憑證密)、timestamp、card_id、code、openid、balance的value值進行字符串的字典序排序。
    2. 將所有參數字符串拼接成一個字符串進行sha1加密,得到signature。
    3. signature中的timestamp和card_ext中的timestamp必須保持一致。
    4. 假如數據示例中code=23456,timestamp=141231233,card_id=345667,appsecret=45678則signature=sha1(14123123323456345667456789)=4F76593A4245644FAE4E1BC940F6422A0C3EC03E。

    卡券簽名cardSign說明

    1. 將appsecret、app_id、location_id、times_tamp、nonce_str、card_id、card_type的value值進行字符串的字典序排序。
    2. 將所有參數字符串拼接成一個字符串進行sha1加密,得到cardSign。

    附錄7-常見錯誤及解決方法

    調用config 接口的時候傳入參數 debug: true 可以開啟debug模式,頁面會alert出錯誤信息。以下為常見錯誤及解決方法:

    1. invalid url domain當前頁面所在域名與使用的appid沒有綁定(一個appid可以綁定三個有效域名)。
    2. invalid signature簽名錯誤。建議按如下順序檢查:
      1. 確認簽名算法正確,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。
      2. 確認config中noncestr, timestamp與用以簽名中的對應noncestr, timestamp一致。
      3. 確認url是頁面完整的url,包括GET參數部分。
      4. 確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
    3. the permission value is offline verifying這個錯誤是因為config沒有正確執行,或者是調用的JSAPI沒有傳入config的jsApiList參數中。建議按如下順序檢查:
      1. 確認config正確通過。
      2. 如果是在頁面加載好時就調用了JSAPI,則必須寫在wx.ready的回調中。
      3. 確認config的jsApiList參數包含了這個JSAPI。
    4. permission denied該應用沒有權限使用這個JSAPI。

    附錄8-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進行緩存以確保不會觸發頻率限制。

    附錄9-問題反饋

    郵箱地址:[email protected]

    郵件主題:【微信JS-SDK反饋】

    郵件內容說明:

    用簡明的語言描述問題所在,并交代清楚遇到該問題的場景,可附上截屏圖片,微信團隊會盡快處理你的反饋。

     

    微信JS-SDK文檔

    標簽:

    原文地址:http://www.cnblogs.com/huangf714/p/5907964.html

    (0)
    (0)
       
    舉報
    評論 一句話評論(0
    登錄后才能評論!
    迷上了代碼!
    91色国产论坛,久草99福利资源,青青草在线华人,99热在线视频观看免费,青青草a片免费看,青青草av视频导航,香蕉网站伊人大香蕉 青青碰人青青草免费 国产自拍偷拍在线播放 青青草华人在线av 伊人影院在线大香 无码大香蕉网伊人色 久久大香蕉视频网 青草精品资源在线 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 青青草手机在线视频 青青草久久爱大香蕉 国产青青草自拍 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 av图片在线看 久草视频福利免费资源站 自拍国产视频在线 www.琪琪色 爱色影爱色搞搞 97资源库 大香萑a久草视频 久草在线福利资站 青青草成人在线免费视频 久久精品国can视频在热 99热国产情侣偷拍 国产自拍 在线 凹凸分类视频97免费 av啪啪中文网站 青青草91自拍视频 奇米影视第四色 国产无限制自拍 大香蕉伊人精品在线 久久手机看片国产免费 无码大香蕉网伊人色 亚洲激情色 久草99福利资源 狼人色终合网站 91色国产色去色 2019奇米777奇米网 久久草妹妹色 米奇影院888奇米色 青青青草成人免费现看 超碰自拍 在线99热这里精品 色琪琪永久无码 伊人大香蕉成人视频综合 国产自拍视频在线 大香蕉伊人久操在线 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 激情图片,激情小说 超碰碰av大香蕉伊人 久草97大香蕉伊人 美女伊人色情香蕉网站 青青草华人免费视频在线 大香蕉伊人久草视频 奇米网在线手机在线 青草七次郞视频观看 青青草公开在线观看 狠狠夜夜干大香蕉伊人 777奇米网 日逼视频网站 欧美人和动物XXX 大香蕉色 欧美 国产 奇米影院首页 大香蕉伊人久久爱在线 青青青草免费手机播放 国产青青草 欧美一级黑寡妇夜夜干 啪啪 国产精品 东方aⅴ在线看 手机看A片 777米奇色狠狠俺去啦 香蕉网站伊人中文字幕 久操在线新免费视频 伊人影院在线大香 大香蕉成人伊人在线视频 青青草成人在线视频观看 91国产自拍偷拍视频 青青草色爱久久 精品国产自拍 小色狗 琪琪热热色无码 影音先锋大香蕉久草资源 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 超碰视频起碰视频 国产偷拍自拍影音先锋 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 超碰视频起碰视频 国产偷拍自拍影音先锋 老鸭窝在线视频 www.奇米在线四色 老版本日本怡春院 强奸乱伦在线观看 青青草在观视频 色琪琪在线视频原网 欧美色色大香焦 欧美色热图 亚洲香蕉手机在线观看视频 偷拍偷窥自拍网站 超91在线观看 最新奇米奇色777在线 婷婷网站 微拍秒拍福利视频 自拍在线 精品视频 欧美情色无码在线 久草激情视频 午夜高清影院在线观看 第四色青娱乐奇米影视 青青草在线综合 99热这里有精品 自拍偷拍影音先锋 国产自拍 先锋影音 成人在线视频97 久草在线免费观看大香蕉 99er久久国产精品在线 精品国产在线偷拍 啪啪青青草视频 国内偷拍 亚洲 大香蕉成人手机在线 在线伊人大香蕉手机版 久草伊人久草视频 伊人久久青青草综合网 青青草手机在线视频 青青草久久爱大香蕉 国产青青草自拍 伊人大香蕉在线精品 97资源总站久久爱视频 自拍中文字幕 av图片在线看 久草视频福利免费资源站 自拍国产视频在线 www.琪琪色 爱色影爱色搞搞 97资源库 大香蕉在线视频免费观看 a片直播妹子在线视频 a.v在线视频 开心五月色婷婷免费 香蕉福利视频在线观 青青草成人+激情偷拍 青青草视频大香蕉伊人网 av啪啪中文网站 青青草91自拍视频 奇米影视第四色 国产无限制自拍 大香蕉伊人精品在线 久久手机看片国产免费 无码大香蕉网伊人色 亚洲激情色 久草99福利资源 狼人色终合网站 91色国产色去色 2019奇米777奇米网 久久草妹妹色 米奇影院888奇米色 青青青草成人免费现看 超碰自拍 在线99热这里精品 色琪琪永久无码 伊人大香蕉成人视频综合 国产自拍视频在线 大香蕉伊人久操在线 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 激情图片,激情小说 青青草久草热久久草 偷拍自拍第四色 奇米网电影网 超碰99久久天天拍日日操 天天拍天天拍久草片 操好屌色 米奇先锋 久草 偷拍 亚洲,偷拍,自拍,精品 伊人大香蕉综合色 大香蕉久久久 成人色啪啪 大香蕉色看片 欧美自拍在线 久久色综合网站xoxo 久热草大香蕉在线视频 久久大香蕉视频网 肏逼免费视频在线 网友自拍偷拍 欧美 国产 奇米影院首页 大香蕉伊人久久爱在线 青青青草免费手机播放 国产青青草 欧美一级黑寡妇夜夜干 啪啪 国产精品 东方aⅴ在线看 手机看A片 777米奇色狠狠俺去啦 香蕉网站伊人中文字幕 久操在线新免费视频 伊人影院在线大香 大香蕉成人伊人在线视频 青青草成人在线视频观看 91国产自拍偷拍视频 青青草色爱久久 精品国产自拍 小色狗 琪琪热热色无码 影音先锋大香蕉久草资源 小明视频看看成人免费 俺去了色网婷婷色 久久色情片 超碰在线青青草 欧美激情图片 自拍超碰 久草视频在线 天天 综合色伊人网 大香蕉视频成人中文网 大香蕉伊人欧美色 久热在线播放中文字幕 青青草久草福利 欧美色色大香焦 欧美色热图 亚洲香蕉手机在线观看视频 偷拍偷窥自拍网站 超91在线观看 最新奇米奇色777在线 婷婷网站 微拍秒拍福利视频 自拍在线 精品视频 欧美情色无码在线 久草激情视频 午夜高清影院在线观看 第四色青娱乐奇米影视 青青草在线综合 99热这里有精品 自拍偷拍影音先锋 国产自拍 先锋影音 成人在线视频97 久草在线免费观看大香蕉 99er久久国产精品在线
    久久草2019在线观看 99这里有精品 大香蕉免费公开青青草 狠狠色丁香婷婷综合 国产久草福利手机在线 青青草黄色三级网站 大香蕉他也啪 青青草视频大香蕉伊人网 久久爱大香焦在线视频 日本有码视频 成人视屏 国产精品91在线 91国产自拍小视频 伊人狼人香蕉网小说 青青草香蕉草久在线 av青青操 亚洲自拍欧美 91 国产 在线 97超碰资源共享 青青草伊人大香蕉 奇米四色网 国産偷拍91 精品国产在线自拍 伊人大香蕉色琪琪影院 caoprom超碰 青青视频在线视频 开心五月婷婷色婷在线 第四色色 Caoprom超碰视频 亚洲图片欧美图色姐 天天干情色网 操妹妹干妹妹 丁香五月婷婷伊人大香蕉 国产精品自拍偷拍在线 青青青成人社区 成人av在线 碰碰视频在线免费播放 影音先锋 小说色 久久草大香蕉 亚洲情色狼人网 思思久久re热线播放 久久草超碰 播播影院私人影院 大香蕉他也啪 米奇影视 成人国产老鸭窝 伊人大香蕉久久天天啪 男人的天堂 国产精品自偷拍 很很鲁在线97