支付宝小程序API 用户授权

2020-09-16 15:50 更新

my.getAuthCode

调用接口获取授权码(authCode)。通过授权码可进而换取支付宝用户登录态信息、给用户发会员卡等,从而方便地获取支付宝用户身份标识,快速建立小程序内的用户体系。

相关问题请参见下文 用户授权 FAQ 。

注意:

  • 请勿在小程序的可重复触发的生命周期(例如 onShow)中调用 my.getAuthCode,授权弹窗的消失会触发小程序的 onShow 事件,若接入方未对是否已展现过授权做标识与逻辑判断,将引起重复触发授权。
  • 为了创造更良好的支付宝小程序用户体验,在小程序的首屏引导用户授权是不被允许的。需要在用户充分了解小程序的业务内容后再引导用户授权,建议将小程序授权环节放在业务流程中。
  • 小程序 不支持 使用拼接授权链接进行授权,建议使用 my.getAuthCode 实现用户授权、用户登录等。

扫码体验

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

入参

Object 类型,属性如下:

属性 类型 必填 描述
scopes String/Array 授权类型,默认 auth_base。支持 auth_base(静默授权)/ auth_user(主动授权)/auth_zhima (获取用户芝麻信息)
success Function 调用成功的回调函数。
fail Function 调用失败的回调函数。
complete Function 调用结束的回调函数(调用成功、失败都会执行)。

scopes 说明

一个 scope 表示开发者需要请求用户授权的权限范围,一个 scope 包含至少一个 OpenAPI 接口或者 JSAPI 接口,一次授权可以组合多个 scope 做组合授权,用“,”分隔。

scopes 说明 包含的openapi接口
auth_base 静默授权。用户基础授权,仅用于静默获取用户支付宝uid。静默授权不弹框,直接获取用户信息。
auth_user 网站支付宝登录; alipay.user.info.share
auth_zhima 用户芝麻信息。 zhima.credit.score.brief.get

success 回调函数
名称 类型 描述
authCode String 授权码
authErrorScopes Key-Value 失败的授权类型,key 是授权失败的 scope,value 是对应的错误码
authSuccessScopes Array 成功的授权 scope

错误码

错误码 描述 解决方案
4 无权限调(N22104)。 确认小程序应用是否授权给了三方应用,三方应用是否添加了 JSAPI 基础包 功能包,可尝试添加 JSAPI 基础包 功能包后,重新授权、重新推送预览调试或者直接解除三方应用授权,重新推送预览调试。说明:小程序应用授权给三方应用后,小程序在真机上的运行使用的是三方应用的功能包,不再是使用小程序自身的功能包。若是小程序应用 JSAPI 基础包 功能包没有或者不全,建议删除小程序应用,重新创建一个新的小程序应用来调试。
10 Empty Data 为了创造更良好的支付宝小程序用户体验,在小程序的首屏引导用户授权是不被允许的。需要在用户充分了解小程序的业务内容后再引导用户授权,建议将小程序授权环节放在业务流程中。检查 scopes 入参是否正确(参数错误会先弹出“服务正忙,请稍后再试”)。建议在需要获取用户信息前,增加获取权限的用途和引导提示,引导用户接受小程序授权,增加用户体验。在 fail 做引导处理,重新调用 my.getAuthCode 授权。
11 用户取消授权 为了创造更良好的支付宝小程序用户体验,在小程序的首屏引导用户授权是不被允许的。需要在用户充分了解小程序的业务内容后再引导用户授权,建议将小程序授权环节放在业务流程中。建议在需要获取用户信息前,增加获取权限的用途和引导提示,引导用户接受小程序授权,增加用户体验。在 fail 做引导处理,重新调用 my.getAuthCode 授权。

用户授权 FAQ

小程序如何实现用户授权?

小程序 不支持 使用拼接授权链接进行授权,建议使用 my.getAuthCode 实现用户授权、用户登录等。

先调用my.getAuthCode,再调用my.getOpenUserInfo会出现两次授权窗口,是否有方法可以实现只出现一个授权弹框?

正常获取会员基础信息是需要弹窗两次进行授权确认的,一次是 my.getAuthCode 获取用户授权码的授权框, 一次是 my.getOpenUserInfo 中获取用户基础信息的授权框。

my.getAuthCode 使用静默授权方法(令 scopes 为 auth_base)即可实现只出现一个授权弹框。示例代码如下:

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

效果如下图所示:

用户授权FAQ IDE.png

为什么要使用用户授权 my.getAuthCode API?

开发者在支付宝开放平台上读写用户信息,均需经过用户许可。支付宝开放平台的用户授权基于国际标准的 OAuth2.0 授权机制。基于此机制,使用 my.getAuthCode API 得到用户授权后,方可进行获取用户信息、给用户发放会员卡等操作。

为什么不允许在小程序首屏使用用户授权 API?

为了创造更良好的支付宝小程序用户体验,在小程序的首屏引导用户授权是不被允许的。需要在用户充分了解小程序的业务内容后再引导用户授权,建议将小程序授权环节放在业务流程中。

用户的 user_id 可以通过用户授权 API 获取吗?

不可以,user_id 需要在服务器端调用 alipay.system.oauth.token 获取。

my.getAuthCode 可以在小程序 onload 的时候用吗?

可以,但是必须是静默授权。小程序审核禁止一进入就强制弹授权框。

my.getAuthCode 获取用户信息和手机号,为何报 isv.insufficient-isv-permissions?

报错描述:ISV 权限不足,建议在控制台检查对应功能是否已经添加。

报错原因:此报错的含义就是没有对应接口权限。

解决方案:

  1. 配置的账户是否有当前接口权限或代理的商户是否有当前接口权限

若没有请先完成签约,签约相关问题可咨询商服服务热线:95188-1咨询!

  1. 是否在对应 APPID 下面添加应用功能。

  1. 若是 ISV,检查授权令牌(app_auth_token)是否有对应的接口权限。

  1. 如在沙箱调试出现,请确认请求网关为沙箱 openapi 网关:https://openapi.alipaydev.com/gateway.do,并且请求的 app_id 为沙箱的 app_id。

  1. 检查此应用 ID 是否已经上线,目前必须上线的应用才可以在正式环境调用接口。

调用 my.getAuthCode 获取到的 authCode 值是否每个用户是唯一的呢?

调用 my.getAuthCode 获取到的 authCode 值是不一样的,但是在同一个支付宝账户登录的情况下,根据此值获取到的 user_id 是唯一的。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号