支付寶小程序 獲取會(huì)員信息

2018-01-03 11:49 更新

支付寶小程序 獲取會(huì)員信息

[TOC]

1. 產(chǎn)品介紹

開發(fā)者可以通過國際標(biāo)準(zhǔn)的OAuth2.0授權(quán)機(jī)制,在用戶授權(quán)的情況下,得到用于換取用戶信息的令牌。在拿到用戶的授權(quán)令牌后,通過調(diào)用用戶信息共享接口,獲取用戶的公開信息。

1.1 準(zhǔn)入條件

小程序開發(fā)者均可使用。

1.2 計(jì)費(fèi)模式

不收費(fèi)。

1.3 案例

步驟一:用戶首次進(jìn)入小程序首頁,若無進(jìn)行業(yè)務(wù)交互,則無需喚起會(huì)員授權(quán)

支付寶小程序授權(quán)案例

步驟二:當(dāng)需要訪問用戶時(shí),以彈框的形式確認(rèn)授權(quán)(靜默授權(quán)不彈窗)。建議:用戶授權(quán)放在需要展示用戶相關(guān)信息的環(huán)節(jié),請勿一開始就引導(dǎo)授權(quán)。 支付寶小程序我的錢包

步驟三:用戶確認(rèn)授權(quán)后,可以在該小程序的會(huì)員中心查看會(huì)員信息,授權(quán)完成。 支付寶小程序開發(fā)文檔案例

2. 接入指引

支付寶小程序接入指引

2.1 添加“獲取會(huì)員信息”功能

在小程序詳情頁的功能列表中添加“獲取會(huì)員信息”。

支付寶小程序獲取會(huì)員信息

2.2 客戶端獲取authcode

my.getAuthCode({
  scopes: 'auth_user', // 主動(dòng)授權(quán):auth_user,靜默授權(quán):auth_base
  success: (res) => {

  
    if (res.authCode) {
      // 認(rèn)證成功
      // 調(diào)用自己的服務(wù)端接口,讓服務(wù)端進(jìn)行后端的授權(quán)認(rèn)證,并且種session,需要解決跨域問題
      my.httpRequest({
        url: 'http://isv.com/auth', // 該url是自己的服務(wù)地址,實(shí)現(xiàn)的功能是服務(wù)端拿到authcode去開放平臺進(jìn)行token驗(yàn)證
        data: {
          authcode: res.authcode
        },
        success: () => {
          // 授權(quán)成功并且服務(wù)器端登錄成功
        },
        fail: () => {
          // 根據(jù)自己的業(yè)務(wù)場景來進(jìn)行錯(cuò)誤處理
        },
      });
    }
  },
});

2.3 服務(wù)端獲取access_token

服務(wù)器端調(diào)用alipay.system.oauth.token接口換取授權(quán)訪問令牌,開發(fā)者可通過獲取到的auth_code換取access_token和用戶ID。auth_code作為換取access_token的票據(jù),每次用戶授權(quán)完成,回調(diào)地址中的auth_code將不一樣,auth_code只能使用一次,一天未被使用自動(dòng)過期。具體可參見文檔alipay.system.oauth.token。 開放平臺服務(wù)端SDK的java調(diào)用示例如下:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode("4b203fe6c11548bcabd8da5bb087a83b");
request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("調(diào)用成功");
} else {
System.out.println("調(diào)用失敗");
}

  • 認(rèn)證成功 把uid&token種到session中,在session有效期內(nèi)就不需要每次都走授權(quán)平臺進(jìn)行驗(yàn)證。
  • 認(rèn)證失敗 則返回失敗原因,需要再重新走授權(quán)流程。
  • 注意 如果僅是為了授權(quán)或獲取用戶ID,那么到此授權(quán)結(jié)束。

2.4 服務(wù)端獲取會(huì)員信息

  • 如果服務(wù)端要獲取用戶信息,那么不僅需要完成以上步驟——客戶端獲取authCode、authCode換取token,還需要token換取用戶信息,該步驟需使用接口:alipay.user.info.share。
  • 注意: 服務(wù)端獲取的用戶信息進(jìn)行落庫,jsapi獲取的用戶信息用來界面展示,不建議把前端獲取到用戶信息透傳給服務(wù)端。 代碼以java示例

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
AlipayUserInfoShareResponse response = alipayClient.execute(request,accessToken);
if(response.isSuccess()){
System.out.println("調(diào)用成功");
} else {
System.out.println("調(diào)用失敗");
}

2.5 客戶端獲取會(huì)員信息

前端通過 my.getAuthUserInfo 接口獲得的用戶信息主要是用來進(jìn)行界面展示,如果想在數(shù)據(jù)庫存儲(chǔ),請用上面步驟,服務(wù)器端接口調(diào)用流程進(jìn)行獲取用戶信息。

my.getAuthCode({
  scopes: 'auth_user',
  success: (res) => {
    my.getAuthUserInfo({
      success: ({ nickName, avatar }) => {
        console.log({ nickName, avatar })
      }
    });
  },
});
返回字段:nickName, avatar

3. API列表

接口名稱 描述
my.getAuthCode 獲取用戶授權(quán)碼
alipay.system.oauth.token 換取授權(quán)訪問令牌
alipay.user.info.share 服務(wù)端獲取會(huì)員信息
my.getAuthUserInfo 客戶端獲取會(huì)員信息

4. 補(bǔ)充說明

  • 服務(wù)端獲取不到會(huì)員信息
    • 原因1:涉及到敏感信息如真實(shí)姓名、手機(jī)號、證件號等,這些敏感信息不會(huì)返回
    • 原因2:調(diào)用的接口錯(cuò)誤,請使用接口:alipay.user.info.share

  • 獲取會(huì)員信息,服務(wù)端報(bào) isv.invalid-token 無效 token
    • 原因1:獲取授權(quán)碼scope 必須傳 auth_user
    • 原因2:調(diào)用的接口錯(cuò)誤,請使用接口:alipay.user.info.share

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號