微信小程序API 登錄-wx.login(OBJECT) + 獲取微信用戶唯一標識openid | 小程序


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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM