支付寶小程序API 用戶授權(quán)

2020-09-16 15:50 更新

my.getAuthCode

調(diào)用接口獲取授權(quán)碼(authCode)。通過授權(quán)碼可進(jìn)而換取支付寶用戶登錄態(tài)信息、給用戶發(fā)會(huì)員卡等,從而方便地獲取支付寶用戶身份標(biāo)識(shí),快速建立小程序內(nèi)的用戶體系。

相關(guān)問題請(qǐng)參見下文 用戶授權(quán) FAQ 。

注意:

  • 請(qǐng)勿在小程序的可重復(fù)觸發(fā)的生命周期(例如 onShow)中調(diào)用 my.getAuthCode,授權(quán)彈窗的消失會(huì)觸發(fā)小程序的 onShow 事件,若接入方未對(duì)是否已展現(xiàn)過授權(quán)做標(biāo)識(shí)與邏輯判斷,將引起重復(fù)觸發(fā)授權(quán)。
  • 為了創(chuàng)造更良好的支付寶小程序用戶體驗(yàn),在小程序的首屏引導(dǎo)用戶授權(quán)是不被允許的。需要在用戶充分了解小程序的業(yè)務(wù)內(nèi)容后再引導(dǎo)用戶授權(quán),建議將小程序授權(quán)環(huán)節(jié)放在業(yè)務(wù)流程中。
  • 小程序 不支持 使用拼接授權(quán)鏈接進(jìn)行授權(quán),建議使用 my.getAuthCode 實(shí)現(xiàn)用戶授權(quán)、用戶登錄等。

掃碼體驗(yàn)

my.getauthcode.jpeg

示例代碼

// 示例一
my.getAuthCode({
  scopes: 'auth_user',
  success: (res) => {
    my.alert({
      content: res.authCode,
    });
  },
});


// 示例二
my.getAuthCode({
  scopes: ['auth_user'],
  success: (res) => {
    my.alert({
      content: res.authCode,
    });
  },
});

入?yún)?/h4>

Object 類型,屬性如下:

屬性 類型 必填 描述
scopes String/Array 授權(quán)類型,默認(rèn) auth_base。支持 auth_base(靜默授權(quán))/ auth_user(主動(dòng)授權(quán))/auth_zhima (獲取用戶芝麻信息)
success Function 調(diào)用成功的回調(diào)函數(shù)。
fail Function 調(diào)用失敗的回調(diào)函數(shù)。
complete Function 調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)。

scopes 說明

一個(gè) scope 表示開發(fā)者需要請(qǐng)求用戶授權(quán)的權(quán)限范圍,一個(gè) scope 包含至少一個(gè) OpenAPI 接口或者 JSAPI 接口,一次授權(quán)可以組合多個(gè) scope 做組合授權(quán),用“,”分隔。

scopes 說明 包含的openapi接口
auth_base 靜默授權(quán)。用戶基礎(chǔ)授權(quán),僅用于靜默獲取用戶支付寶uid。靜默授權(quán)不彈框,直接獲取用戶信息。
auth_user 網(wǎng)站支付寶登錄; alipay.user.info.share
auth_zhima 用戶芝麻信息。 zhima.credit.score.brief.get

success 回調(diào)函數(shù)
名稱 類型 描述
authCode String 授權(quán)碼
authErrorScopes Key-Value 失敗的授權(quán)類型,key 是授權(quán)失敗的 scope,value 是對(duì)應(yīng)的錯(cuò)誤碼
authSuccessScopes Array 成功的授權(quán) scope

錯(cuò)誤碼

錯(cuò)誤碼 描述 解決方案
4 無權(quán)限調(diào)(N22104)。 確認(rèn)小程序應(yīng)用是否授權(quán)給了三方應(yīng)用,三方應(yīng)用是否添加了 JSAPI 基礎(chǔ)包 功能包,可嘗試添加 JSAPI 基礎(chǔ)包 功能包后,重新授權(quán)、重新推送預(yù)覽調(diào)試或者直接解除三方應(yīng)用授權(quán),重新推送預(yù)覽調(diào)試。說明:小程序應(yīng)用授權(quán)給三方應(yīng)用后,小程序在真機(jī)上的運(yùn)行使用的是三方應(yīng)用的功能包,不再是使用小程序自身的功能包。若是小程序應(yīng)用 JSAPI 基礎(chǔ)包 功能包沒有或者不全,建議刪除小程序應(yīng)用,重新創(chuàng)建一個(gè)新的小程序應(yīng)用來調(diào)試。
10 Empty Data 為了創(chuàng)造更良好的支付寶小程序用戶體驗(yàn),在小程序的首屏引導(dǎo)用戶授權(quán)是不被允許的。需要在用戶充分了解小程序的業(yè)務(wù)內(nèi)容后再引導(dǎo)用戶授權(quán),建議將小程序授權(quán)環(huán)節(jié)放在業(yè)務(wù)流程中。檢查 scopes 入?yún)⑹欠裾_(參數(shù)錯(cuò)誤會(huì)先彈出“服務(wù)正忙,請(qǐng)稍后再試”)。建議在需要獲取用戶信息前,增加獲取權(quán)限的用途和引導(dǎo)提示,引導(dǎo)用戶接受小程序授權(quán),增加用戶體驗(yàn)。在 fail 做引導(dǎo)處理,重新調(diào)用 my.getAuthCode 授權(quán)。
11 用戶取消授權(quán) 為了創(chuàng)造更良好的支付寶小程序用戶體驗(yàn),在小程序的首屏引導(dǎo)用戶授權(quán)是不被允許的。需要在用戶充分了解小程序的業(yè)務(wù)內(nèi)容后再引導(dǎo)用戶授權(quán),建議將小程序授權(quán)環(huán)節(jié)放在業(yè)務(wù)流程中。建議在需要獲取用戶信息前,增加獲取權(quán)限的用途和引導(dǎo)提示,引導(dǎo)用戶接受小程序授權(quán),增加用戶體驗(yàn)。在 fail 做引導(dǎo)處理,重新調(diào)用 my.getAuthCode 授權(quán)。

用戶授權(quán) FAQ

小程序如何實(shí)現(xiàn)用戶授權(quán)?

小程序 不支持 使用拼接授權(quán)鏈接進(jìn)行授權(quán),建議使用 my.getAuthCode 實(shí)現(xiàn)用戶授權(quán)、用戶登錄等。

先調(diào)用my.getAuthCode,再調(diào)用my.getOpenUserInfo會(huì)出現(xiàn)兩次授權(quán)窗口,是否有方法可以實(shí)現(xiàn)只出現(xiàn)一個(gè)授權(quán)彈框?

正常獲取會(huì)員基礎(chǔ)信息是需要彈窗兩次進(jìn)行授權(quán)確認(rèn)的,一次是 my.getAuthCode 獲取用戶授權(quán)碼的授權(quán)框, 一次是 my.getOpenUserInfo 中獲取用戶基礎(chǔ)信息的授權(quán)框。

my.getAuthCode 使用靜默授權(quán)方法(令 scopes 為 auth_base)即可實(shí)現(xiàn)只出現(xiàn)一個(gè)授權(quán)彈框。示例代碼如下:

my.getAuthCode({
  scopes: ['auth_base'],
  success: (res) => {
    my.alert({
      content: res.authCode,
    });
  },
});

如何打印 my.getAuthCode 獲取到的 authCode?

在 IDE 中使用 console.log,在 console 里打印即可。示例代碼如下:

my.getAuthCode({
  scopes: 'auth_user',
  success: (res) => {
    console.log(res.authCode),
    my.alert({
      content: res.authCode, 
    });
  },
});

效果如下圖所示:

用戶授權(quán)FAQ IDE.png

為什么要使用用戶授權(quán) my.getAuthCode API?

開發(fā)者在支付寶開放平臺(tái)上讀寫用戶信息,均需經(jīng)過用戶許可。支付寶開放平臺(tái)的用戶授權(quán)基于國際標(biāo)準(zhǔn)的 OAuth2.0 授權(quán)機(jī)制?;诖藱C(jī)制,使用 my.getAuthCode API 得到用戶授權(quán)后,方可進(jìn)行獲取用戶信息、給用戶發(fā)放會(huì)員卡等操作。

為什么不允許在小程序首屏使用用戶授權(quán) API?

為了創(chuàng)造更良好的支付寶小程序用戶體驗(yàn),在小程序的首屏引導(dǎo)用戶授權(quán)是不被允許的。需要在用戶充分了解小程序的業(yè)務(wù)內(nèi)容后再引導(dǎo)用戶授權(quán),建議將小程序授權(quán)環(huán)節(jié)放在業(yè)務(wù)流程中。

用戶的 user_id 可以通過用戶授權(quán) API 獲取嗎?

不可以,user_id 需要在服務(wù)器端調(diào)用 alipay.system.oauth.token 獲取。

my.getAuthCode 可以在小程序 onload 的時(shí)候用嗎?

可以,但是必須是靜默授權(quán)。小程序?qū)徍私挂贿M(jìn)入就強(qiáng)制彈授權(quán)框。

my.getAuthCode 獲取用戶信息和手機(jī)號(hào),為何報(bào) isv.insufficient-isv-permissions?

報(bào)錯(cuò)描述:ISV 權(quán)限不足,建議在控制臺(tái)檢查對(duì)應(yīng)功能是否已經(jīng)添加。

報(bào)錯(cuò)原因:此報(bào)錯(cuò)的含義就是沒有對(duì)應(yīng)接口權(quán)限。

解決方案:

  1. 配置的賬戶是否有當(dāng)前接口權(quán)限或代理的商戶是否有當(dāng)前接口權(quán)限

若沒有請(qǐng)先完成簽約,簽約相關(guān)問題可咨詢商服服務(wù)熱線:95188-1咨詢!

  1. 是否在對(duì)應(yīng) APPID 下面添加應(yīng)用功能。

  1. 若是 ISV,檢查授權(quán)令牌(app_auth_token)是否有對(duì)應(yīng)的接口權(quán)限。

  1. 如在沙箱調(diào)試出現(xiàn),請(qǐng)確認(rèn)請(qǐng)求網(wǎng)關(guān)為沙箱 openapi 網(wǎng)關(guān):https://openapi.alipaydev.com/gateway.do,并且請(qǐng)求的 app_id 為沙箱的 app_id。

  1. 檢查此應(yīng)用 ID 是否已經(jīng)上線,目前必須上線的應(yīng)用才可以在正式環(huán)境調(diào)用接口。

調(diào)用 my.getAuthCode 獲取到的 authCode 值是否每個(gè)用戶是唯一的呢?

調(diào)用 my.getAuthCode 獲取到的 authCode 值是不一樣的,但是在同一個(gè)支付寶賬戶登錄的情況下,根據(jù)此值獲取到的 user_id 是唯一的。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)