支付宝小程序API 用户授权
my.getAuthCode
调用接口获取授权码(authCode)。通过授权码可进而换取支付宝用户登录态信息、给用户发会员卡等,从而方便地获取支付宝用户身份标识,快速建立小程序内的用户体系。
相关问题请参见下文 用户授权 FAQ 。
注意:
- 请勿在小程序的可重复触发的生命周期(例如 onShow)中调用 my.getAuthCode,授权弹窗的消失会触发小程序的 onShow 事件,若接入方未对是否已展现过授权做标识与逻辑判断,将引起重复触发授权。
- 为了创造更良好的支付宝小程序用户体验,在小程序的首屏引导用户授权是不被允许的。需要在用户充分了解小程序的业务内容后再引导用户授权,建议将小程序授权环节放在业务流程中。
- 小程序 不支持 使用拼接授权链接进行授权,建议使用 my.getAuthCode 实现用户授权、用户登录等。
扫码体验
示例代码
// 示例一
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,
});
},
});
效果如下图所示:
为什么要使用用户授权 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 权限不足,建议在控制台检查对应功能是否已经添加。
报错原因:此报错的含义就是没有对应接口权限。
解决方案:
- 配置的账户是否有当前接口权限或代理的商户是否有当前接口权限
若没有请先完成签约,签约相关问题可咨询商服服务热线:95188-1咨询!
- 是否在对应 APPID 下面添加应用功能。
- 若是 ISV,检查授权令牌(app_auth_token)是否有对应的接口权限。
- 如在沙箱调试出现,请确认请求网关为沙箱 openapi 网关:https://openapi.alipaydev.com/gateway.do,并且请求的 app_id 为沙箱的 app_id。
- 检查此应用 ID 是否已经上线,目前必须上线的应用才可以在正式环境调用接口。
调用 my.getAuthCode 获取到的 authCode 值是否每个用户是唯一的呢?
调用 my.getAuthCode 获取到的 authCode 值是不一样的,但是在同一个支付宝账户登录的情况下,根据此值获取到的 user_id 是唯一的。