讀古今文學網 > 微信公眾平台開發:從零基礎到ThinkPHP5高性能框架實踐 > 21.4.7 開放接口 >

21.4.7 開放接口

1.登錄

wx.login(OBJECT)接口用於調用接口獲取登錄憑證(Code),進而換取用戶登錄態信息,包括用戶的唯一標識(OpenID)及本次登錄的會話密鑰(session_key)。用戶數據的加解密通信需要依賴會話密鑰完成。登錄部分代碼如下。


// app.js
App({
    onLaunch: function {
        wx.login({
            success: function(res) {
                if (res.code) {
                    // 發起網絡請求
                    wx.request({
                        url: 'https:// test.com/onLogin',
                        data: {
                            code: res.code
                        }
                    })
                } else {
                    console.log('獲取用戶登錄態失敗!' + res.errMsg)
                }
            }
        });
    }
})
  

用戶允許登錄後,回調內容會帶上Code(有效期為5分鐘),返回內容如下。


{errMsg: "login:ok", code: "013IwEe106FprD1A3Wd10HCGe10IwEeb"}
  

開發者需要將Code發送到開發者服務器後台,使用Code換取session_key接口,將Code換成OpenID和session_key。其中,session_key是對用戶數據進行加密簽名的密鑰。為了自身應用安全,session_key不應該在網絡上傳輸。Code換取session_key接口如下。


https:// api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
  

上述接口的參數說明如表21-32所示。

表21-32 Code換取session_key接口的參數說明

正確創建時,返回的數據示例如下。


{
    "openid":"OPENID",
    "session_key":"SESSIONKEY",
    "expires_in":2592000
}
  

上述數據的參數說明如表21-33所示。

表21-33 code換取session_key接口返回參數說明

通過wx.login獲取到用戶登錄態之後,需要維護登錄態。要注意,不應該直接把session_key、openid等字段作為用戶的標識或者session的標識,而應該自己派發一個session登錄態。對於開發者自己生成的session,應該保證其安全性且不應該設置較長的過期時間。session派發到小程序客戶端之後,可將其存儲在storage中,用於後續通信。

2.獲取用戶信息

wx.getUserInfo(OBJECT)接口用於獲取用戶信息。獲取成功後,返回內容的參數說明如表21-34所示。

表21-34 獲取用戶信息接口返回參數說明

獲取用戶信息的代碼如下。


wx.getUserInfo({
    success: function(res) {
        var userInfo = res.userInfo
        var nickName = userInfo.nickName
        var avatarUrl = userInfo.avatarUrl
        var gender = userInfo.gender // 性別。0:未知;1:男;2:女 
        var province = userInfo.province
        var city = userInfo.city
        var country = userInfo.country
    }
})
  

3.微信支付

wx.requestPayment(OBJECT)接口用於發起微信支付。其參數如表21-35所示。

表21-35 微信支付接口的參數說明

發起微信支付的代碼如下。


wx.requestPayment({
    'timeStamp': '',
    'nonceStr': '',
    'package': '',
    'signType': 'MD5',
    'paySign': '',
    'success':function(res){
    },
    'fail':function(res){
    }
})
  

4.模板消息

使用模板消息需要預先獲取access_token,獲取方法可參考第5章。

發送模板消息的接口如下。


https:// api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
  

POST數據時,提交的數據示例如下。


{
    "touser": "OPENID",  
    "template_id": "TEMPLATE_ID", 
    "page": "index",
    "form_id": "FORMID",
    "data": {
        "keyword1": {
            "value": "339208499", 
            "color": "#173177"
        }, 
        "keyword2": {
            "value": "2015年01月05日 12:30", 
            "color": "#173177"
        }, 
        "keyword3": {
            "value": "粵海喜來登酒店", 
            "color": "#173177"
        } , 
        "keyword4": {
            "value": "廣州市天河區天河路208號", 
            "color": "#173177"
       } 
    },
    "emphasis_keyword": "keyword1.DATA" 
}
  

上述接口的參數說明如表21-36所示。

表21-36 模板消息接口的參數說明

正確創建時,返回的數據示例如下。


{"errcode":0,"errmsg":"ok"}