1. 程式人生 > >獲取微信用戶唯一標識openid | 小程序

獲取微信用戶唯一標識openid | 小程序

func 發送 ref java *** api 關閉 函數 HR

wx.login(OBJECT)

調用接口獲取登錄憑證(code)進而換取用戶登錄態信息,包括用戶的唯一標識(openid) 及本次登錄的 會話密鑰(session_key)用戶數據的加解密通訊需要依賴會話密鑰完成。

https://www.w3cschool.cn/weixinapp/weixinapp-api-login.html

OBJECT參數說明:

參數名類型必填說明
success Function 接口調用成功的回調函數
fail Function 接口調用失敗的回調函數
complete Function 接口調用結束的回調函數(調用成功、失敗都會執行)

success返回參數說明:

參數名類型說明
errMsg String 調用結果
code String 用戶允許登錄後,回調內容會帶上 code(有效期五分鐘),開發者需要將 code 發送到開發者服務器後臺,使用code 換取 session_key api,將 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 換取 session_key

?這是一個 HTTPS 接口,開發者服務器使用登錄憑證 code 獲取 session_key 和 openid。其中 session_key 是對用戶數據進行加密簽名的密鑰。為了自身應用安全,session_key 不應該在網絡上傳輸

接口地址:

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

請求參數:

參數必填說明
appid 小程序唯一標識
secret 小程序的 app secret
js_code 登錄時獲取的 code
grant_type 填寫為 authorization_code

返回參數:

參數說明
openid 用戶唯一標識
session_key 會話密鑰
unionid 用戶在開放平臺的唯一標識符。本字段在滿足一定條件的情況下才返回。具體參看UnionID機制說明

返回說明:

//正常返回的JSON數據包
{
      "openid": "OPENID",
      "session_key": "SESSIONKEY"
      "unionid":  "UNIONID"
}
//錯誤時返回JSON數據包(示例為Code無效)
{
    "errcode": 40029,
    "errmsg": "invalid code"
}


一、基礎知識

? 接口地址
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
? 請求參數
appid:小程序的唯一標識
secret:小程序的app secret
js_code:用戶的登錄憑證code(使用wx.login({})可獲取到)
grant_type:填寫authorization_code
? 返回參數
expires_in:憑證有效時間,單位:秒
openid:用戶唯一標識
session_key:會話密匙(考慮到應用安全,不應該在網絡上傳輸session_key)

二、客戶端原理

1、使用小程序登錄接口wx.login({})獲取用戶的登錄憑證code
2、使用小程序網絡請求API wx.request({})將獲取用戶登錄憑證(code)發送至服務器
示例
/**************************************
* config:小程序配置文件
* loginUrl:服務器地址
* code:返回參數,用戶登錄憑證
* wx.login({}):登錄接口
* wx.request({}):網絡請求API
*
* 日期:2017-1-1
**************************************/
var CONGIF=require(‘config‘);
var OBJ_APP_DATA={};
OBJ_APP_DATA[‘onLaunch‘]=function(){
wx.login({
success: (res)=>{
wx.request({
url:CONGIF.loginUrl,
data: {
code:res.code
},
method: ‘GET‘,
success: (res)=>{
console.log(res.data)
},
})
}
})
}
App(OBJ_APP_DATA);

三、服務端php原理

1、使用isset()函數檢測客戶端是否有傳遞code參數
示例
if(isset($_GET[‘code‘])){}
2、使用 curl_init()函數初始化一個CURL會話,初始化成功後返回一個句柄供curl_setopt(), curl_exec(),和 curl_close() 函數使用
示例
$curl = curl_init();
3、使用curl_setopt()設置要獲取的URL地址
示例
$url=‘https://api.weixin.qq.com/sns/jscode2session?appid=‘.$appid.‘&secret=‘.$secret.‘&js_code=‘.$code.‘&grant_type=authorization_code‘;
curl_setopt($curl, CURLOPT_URL, $url);
4、設置是否輸出header
示例
curl_setopt($curl, CURLOPT_HEADER, 1);
5、設置是否輸出結果
示例
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
6、設置是否輸出結果
示例
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
7、設置是否檢查服務器端的證書
示例
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
8、使用curl_exec()將CURL返回的結果轉換成正常數據並保存到一個變量
示例
$data = curl_exec($curl);
9、使用 curl_close() 關閉CURL會話
示例
curl_close($curl);

獲取微信用戶唯一標識openid | 小程序