99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

QQ小程序 用戶信息

2020-07-03 14:44 更新

小程序登錄

小程序可以通過QQ官方提供的登錄能力方便地獲取QQ提供的用戶身份標(biāo)識,快速建立小程序內(nèi)的用戶體系。

登錄流程時(shí)序

說明:

  1. 調(diào)用 qq.login() 獲取 臨時(shí)登錄憑證code ,并回傳到開發(fā)者服務(wù)器。
  2. 調(diào)用 code2Session 接口,換取 用戶唯一標(biāo)識 OpenID 和 會話密鑰 session_key。

之后開發(fā)者服務(wù)器可以根據(jù)用戶標(biāo)識來生成自定義登錄態(tài),用于后續(xù)業(yè)務(wù)邏輯中前后端交互時(shí)識別用戶身份。

注意:

  1. 會話密鑰 session_key 是對用戶數(shù)據(jù)進(jìn)行 加密簽名 的密鑰。為了應(yīng)用自身的數(shù)據(jù)安全,開發(fā)者服務(wù)器不應(yīng)該把會話密鑰下發(fā)到小程序,也不應(yīng)該對外提供這個密鑰。
  2. 臨時(shí)登錄憑證 code 只能使用一次

UnionID 機(jī)制說明

如果開發(fā)者擁有多個移動應(yīng)用、網(wǎng)站應(yīng)用、小程序,可通過 UnionID 來區(qū)分用戶的唯一性,因?yàn)橹灰荙Q互聯(lián)帳號下的移動應(yīng)用、網(wǎng)站應(yīng)用、小程序,用戶的 UnionID 是唯一的。換句話說,同一用戶,對同一個QQ互聯(lián)平臺下的不同應(yīng)用,unionid是相同的。

UnionID獲取途徑

綁定了開發(fā)者帳號的小程序,可以通過以下途徑獲取 UnionID。

  1. 調(diào)用接口 qq.getUserInfo,從解密數(shù)據(jù)中獲取 UnionID。注意本接口需要用戶授權(quán),請開發(fā)者妥善處理用戶拒絕授權(quán)后的情況。

授權(quán)

部分接口需要經(jīng)過用戶授權(quán)同意才能調(diào)用。我們把這些接口按使用范圍分成多個 scope ,用戶選擇對 scope 來進(jìn)行授權(quán),當(dāng)授權(quán)給一個 scope 之后,其對應(yīng)的所有接口都可以直接使用。 部分接口需要獲得用戶授權(quán)同意后才能調(diào)用。此類接口調(diào)用時(shí):

  • 如果用戶未接受或拒絕過此權(quán)限,會彈窗詢問用戶,用戶點(diǎn)擊同意后方可調(diào)用接口;
  • 如果用戶已授權(quán),可以直接調(diào)用接口;
  • 如果用戶已拒絕授權(quán),則不會出現(xiàn)彈窗,而是直接進(jìn)入接口 fail 回調(diào)。請開發(fā)者兼容用戶拒絕授權(quán)的場景。

獲取用戶授權(quán)設(shè)置

開發(fā)者可以使用 qq.getSetting 獲取用戶當(dāng)前的授權(quán)狀態(tài)。

打開設(shè)置界面

用戶可以在小程序設(shè)置界面(「右上角」 - 「關(guān)于」 - 「右上角」 - 「設(shè)置」)中控制對該小程序的授權(quán)狀態(tài)。 開發(fā)者可以調(diào)用 qq.openSetting 打開設(shè)置界面,引導(dǎo)用戶開啟授權(quán)。

提前發(fā)起授權(quán)請求 開發(fā)者可以使用 qq.authorize 在調(diào)用需授權(quán) API 之前,提前向用戶發(fā)起授權(quán)請求。

scope 列表

scope 對應(yīng)接口 描述
scope.userInfo qq.getUserInfo 用戶信息
scope.userLocation qq.getLocation, qq.chooseLocation 地理位置
scope.address qq.chooseAddress 通訊地址
scope.invoiceTitle qq.chooseInvoiceTitle 發(fā)票抬頭
scope.invoice qq.chooseInvoice 獲取發(fā)票
scope.qqrun qq.getQQRunData QQ運(yùn)動步數(shù)
scope.record qq.startRecord 錄音功能 scope.writePhotosAlbum qq.saveImageToPhotosAlbum, qq.saveVideoToPhotosAlbum 保存到相冊
scope.camera <camera /> 組件 攝像頭
setting.appMsgSubscribed qq.subscribeAppMsg 訂閱消息(833以下版本使用scope.appMsgSubscribed,833及以上版本使用setting.appMsgSubscribed)
setting.addFriend 主動調(diào)用qq.authorize接口進(jìn)行授權(quán)

注意事項(xiàng)

  1. qq.authorize({scope: "scope.userInfo"}),不會彈出授權(quán)窗口,請使用 <button open-type="getUserInfo"/>
  2. 需要授權(quán) scope.userLocation 時(shí)必須配置地理位置用途說明。

開放數(shù)據(jù)校驗(yàn)與解密

小程序可以通過各種前端接口獲取QQ提供的開放數(shù)據(jù)。考慮到開發(fā)者服務(wù)器也需要獲取這些開放數(shù)據(jù),QQ會對這些數(shù)據(jù)做簽名和加密處理。開發(fā)者后臺拿到開放數(shù)據(jù)后可以對數(shù)據(jù)進(jìn)行校驗(yàn)簽名和解密,來保證數(shù)據(jù)不被篡改。 簽名校驗(yàn)以及數(shù)據(jù)加解密涉及用戶的會話密鑰 session_key。 開發(fā)者應(yīng)該事先通過 qq.login 登錄流程獲取會話密鑰 session_key 并保存在服務(wù)器。為了數(shù)據(jù)不被篡改,開發(fā)者不應(yīng)該把 session_key 傳到小程序客戶端等服務(wù)器外的環(huán)境。

數(shù)據(jù)簽名校驗(yàn)

為了確保開放接口返回用戶數(shù)據(jù)的安全性,QQ會對明文數(shù)據(jù)進(jìn)行簽名。開發(fā)者可以根據(jù)業(yè)務(wù)需要對數(shù)據(jù)包進(jìn)行簽名校驗(yàn),確保數(shù)據(jù)的完整性。

  1. 通過調(diào)用接口(如 qq.getUserInfo)獲取數(shù)據(jù)時(shí),接口會同時(shí)返回 rawData、signature,其中 signature = sha1( rawData + session_key )
  2. 開發(fā)者將 signature、rawData 發(fā)送到開發(fā)者服務(wù)器進(jìn)行校驗(yàn)。服務(wù)器利用用戶對應(yīng)的 session_key 使用相同的算法計(jì)算出簽名 signature2 ,比對 signature 與 signature2 即可校驗(yàn)數(shù)據(jù)的完整性。

如 qq.getUserInfo的數(shù)據(jù)校驗(yàn): 接口返回的rawData:

{
  "nickName": "Band",
  "gender": 1,
  "language": "zh_CN",
  "city": "Guangzhou",
  "province": "Guangdong",
  "country": "CN",
  "avatarUrl": "http://thirdqq.qlogo.cn/qqapp/55107C3B8501CD7CBD90AEE4626E6D17/40"
}

用戶的 session-key:

HyVFkGl5F5OQWJZZaNzBBg==

用于簽名的字符串為:

{"nickName":"Band","gender":1,"language":"zh_CN","city":"Guangzhou","province":"Guangdong","country":"CN","avatarUrl":"http://thirdqq.qlogo.cn/qqapp/55107C3B8501CD7CBD90AEE4626E6D17/40"}HyVFkGl5F5OQWJZZaNzBBg==

使用sha1得到的結(jié)果為

75e81ceda165f4ffa64f4068af58c64b8f54b88c

加密數(shù)據(jù)解密算法 接口如果涉及敏感數(shù)據(jù)(如qq.getUserInfo當(dāng)中的 openId 和 unionId),接口的明文內(nèi)容將不包含這些敏感數(shù)據(jù)。開發(fā)者如需要獲取敏感數(shù)據(jù),需要對接口返回的加密數(shù)據(jù)(encryptedData) 進(jìn)行對稱解密。 解密算法如下:

  1. 對稱解密使用的算法為 AES-128-CBC,數(shù)據(jù)采用PKCS#7填充。
  2. 對稱解密的目標(biāo)密文為 Base64_Decode(encryptedData)。
  3. 對稱解密秘鑰 aeskey = Base64_Decode(session_key), aeskey 是16字節(jié)。
  4. 對稱解密算法初始向量 為Base64_Decode(iv),其中iv由數(shù)據(jù)接口返回。

另外,為了應(yīng)用能校驗(yàn)數(shù)據(jù)的有效性,會在敏感數(shù)據(jù)加上數(shù)據(jù)水印( watermark )

watermark參數(shù)說明:

|參數(shù)|類型|說明| |appid|String|敏感數(shù)據(jù)歸屬 appId,開發(fā)者可校驗(yàn)此參數(shù)與自身 appId 是否一致| |timestamp|Int|敏感數(shù)據(jù)獲取的時(shí)間戳, 開發(fā)者可以用于數(shù)據(jù)時(shí)效性校驗(yàn)|

如接口 qq.getUserInfo 敏感數(shù)據(jù)當(dāng)中的 watermark:

{
  "openId": "OPENID",
  "nickName": "NICKNAME",
  "gender": GENDER,
  "city": "CITY",
  "province": "PROVINCE",
  "country": "COUNTRY",
  "avatarUrl": "AVATARURL",
  "unionId": "UNIONID",
  "watermark": {
    "appid": "APPID",
    "timestamp": TIMESTAMP
  }
}

注:

  1. 解密后得到的json數(shù)據(jù)根據(jù)需求可能會增加新的字段,舊字段不會改變和刪減,開發(fā)者需要預(yù)留足夠的空間

會話密鑰 session_key 有效性 開發(fā)者如果遇到因?yàn)?session_key 不正確而校驗(yàn)簽名失敗或解密失敗,請關(guān)注下面幾個與 session_key 有關(guān)的注意事項(xiàng)。

  1. qq.login 調(diào)用時(shí),用戶的 session_key 可能會被更新而致使舊 session_key 失效(刷新機(jī)制存在最短周期,如果同一個用戶短時(shí)間內(nèi)多次調(diào)用 qq.login,并非每次調(diào)用都導(dǎo)致 session_key 刷新)。開發(fā)者應(yīng)該在明確需要重新登錄時(shí)才調(diào)用 qq.login,及時(shí)通過 code2Session 接口更新服務(wù)器存儲的 session_key。
  2. QQ不會把 session_key 的有效期告知開發(fā)者。我們會根據(jù)用戶使用小程序的行為對 session_key 進(jìn)行續(xù)期。用戶越頻繁使用小程序,session_key 有效期越長。
  3. 開發(fā)者在 session_key 失效時(shí),可以通過重新執(zhí)行登錄流程獲取有效的 session_key。使用接口 qq.checkSession可以校驗(yàn) session_key 是否有效,從而避免小程序反復(fù)執(zhí)行登錄流程。
  4. 當(dāng)開發(fā)者在實(shí)現(xiàn)自定義登錄態(tài)時(shí),可以考慮以 session_key 有效期作為自身登錄態(tài)有效期,也可以實(shí)現(xiàn)自定義的時(shí)效性策略。

獲取手機(jī)號

暫不支持,后續(xù)版本將進(jìn)行更新

生物認(rèn)證

暫不支持,后續(xù)版本將進(jìn)行更新

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號