my.getauthcode(object object)
支小宝客户端 支持
安诊儿客户端 支持
插件: 支持。 支持在小程序插件中使用,授权主体是宿主小程序。
主体: 企业支付宝小程序 、 个人支付宝小程序
相关文档: 获取会员信息 、 my.getopenuserinfo 、 my.getphonenumber
获取用户信息授权,取得授权码(authcode)。
my.getauthcode 引导用户授权其信息给当前小程序,取得的代表用户授权的授权码(authcode),后续需由小程序服务端使用,向支付宝换取用户信息(如 user_id(open_id)、头像、昵称、手机号、地区、性别、出生日期等)。这种方式较通用,但也相对复杂(参见下文接入流程)。
对于简单需求,建议优先选择其他方式:获取用户昵称和头像,请使用 my.getopenuserinfo;获取用户手机号,请使用 my.getphonenumber。
获取 user_id(open_id)
是否必须: 是。
-
在小程序上调用 my.getauthcode,调用时 scope 传入
auth_base
:基本信息授权,直接取得 authcode,此 authcode 仅可用于换取用户的 user_id(open_id)。 -
获取 authcode 以后,小程序通过 my.request 等方式将其传递给服务端。
是否必须: 是。
服务端使用 authcode,调用 alipay.system.oauth.token 取得 user_id(open_id) 和 token(授权令牌)。
获取用户信息
是否必须: 是。
在开放平台——控制台——隐私申请中的获取会员信息中按需申请相应的字段。如图。
-
每个字段的类目要求和审批规则不同,请参考 隐私申请及使用基础规则。
-
应隐私政策要求,对 cert_type、cert_no、person_cert_expiry_date 的申请将不再通过。有特殊要求(如政务类)的小程序请联系合作的支付宝业务人员。
是否必须: 是。
-
第一步的申请审批通过后,在小程序上调用 my.getauthcode 获取用户授权。调用时 scope 传入
auth_user
:会员信息授权,会出现授权引导浮窗,第一步申请通过的字段都会一次性向用户展示,用户同意以后小程序可获得 authcode。 -
获取 authcode 以后,小程序通过 my.request 等方式将其传递给服务端。
是否必须: 是。
-
服务端使用 authcode,调用 alipay.system.oauth.token 取得 user_id 和 token(授权令牌)。
-
服务端继续使用所取得的 token 调用 alipay.user.info.share 最终获得用户信息。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
scopes | string/array | auth_base | 否 | 授权类型。 |
||||||||||
|
||||||||||||||
success | function | - | 否 | 调用成功的回调函数。 |
||||||||||
fail | function | - | 否 | 调用失败的回调函数。 |
||||||||||
complete | function | - | 否 | 调用结束的回调函数(调用成功、失败都会执行)。 |
success 回调函数
参数
object res
查看示例
属性 | 类型 | 描述 |
---|---|---|
authcode | string | 授权码。 |
autherrorscopes | object | 失败的授权类型,key 是授权失败的 scope,value 是对应的错误码。 |
authsuccessscopes | array | 成功的授权 scope。 |
fail 回调的参数为 object,error
属性为错误码,errormessage
属性为错误消息。
错误码 | 错误消息 | 凯发app官方网站的解决方案 |
---|---|---|
3 | 未找到授权结果 |
如果 scopes 入参包含无效值,界面上会先弹出 服务正忙,请稍后再试 |
11 | 用户取消授权 / 页面已退出 |
充分说明获取用户信息的用途和必要性,重新引导操作。 |
12 | network error / 登录超时,请重新登录 |
授权相关网络请求失败或超时,请稍后重试。 |
13 | timeout |
授权等待超时,请重试。 |
14 | 授权等待超时 |
授权等待超时,请重试。 |
15 | 人气太旺啦,稍后再试试 |
调用 api 请求太频繁,被限流了,请4个小时后再调用重试。 |
page({
getauthcode() {
my.getauthcode({
scopes: 'auth_user',
success: res => {
const authcode = res.authcode;
// 在服务端获取用户信息
my.request({
// 你的服务器地址
url: 'https://yourserveraddress',
data: {
authcode,
},
success(res) {
// 获取需要的用户信息
console.log(res)
}
})
},
fail: err => {
console.log('my.getauthcode 调用失败', err)
}
});
}
})
{
"authcode": "0b9a9c214b55447986a6af2d8a0buc09",
"authsuccessscopes": [
"auth_base"
],
"autherrorscopes": {}
}
{
"error": 11,
"errormessage": "用户取消授权"
}
/** web-view h5 示例代码 */
// step 1. h5 向小程序发送消息请求获取用户信息
my.postmessage({ action: 'authorize' });
// step 4. 接受小程序发过来的用户信息
my.onmessage = function (message) {
if (message.type == 'authorizeresult') {
console.log(message.data);
}
};
/** 小程序 .axml 示例代码 */
<view<web-view id="web-view-1" src="..." onmessage="handlemessage"></web-view</view/** 小程序 .js 示例代码 */
page({
handlemessage(message) {
// step 2. 小程序页面接收信息时,触发授权调用
if (message.action == 'authorize') {
this.authorize();
}
},
authorize() {
return new promise((resolve, reject) => {
my.getauthcode({
scopes: 'auth_user',
success: res => {
const authcode = res.authcode;
// 在服务端获取用户信息
my.request({
// 你的服务器地址
url: 'https://yourserveraddress',
data: {
authcode,
},
success: (res) => {
// step 3. 将信息发送到 web-view h5
const webviewcontext = my.createwebviewcontext('web-view-1');
webviewcontext.postmessage({
type: 'authorizeresult',
data: res.data
});
},
});
},
fail: err => {
console.log('my.getauthcode 调用失败', err)
}
});
});
}
});
-
tip此 api 不支持在 web-view 中调用。如果要在 web-view 中使用用户信息,可在小程序上下文中获取后通过 my.postmessage 传给 web-view。
-
tip请在用户充分了解小程序的业务内容后再调用 my.getauthcode,避免损害用户体验。
-
tip请勿在小程序首屏调用 my.getauthcode,否则将面临违规处罚风险。
q:如何在一个弹窗里同时进行用户信息、手机号、身份证等授权?
参照上文 接入流程 获取用户信息 的第 1 步,成功申请的字段会在 my.getauthcode 调用的弹窗里一次性授权。
q:调用 alipay.user.info.share 获取用户已授权的信息时,报错 “isv 权限不足” 如何处理?
参照上文 接入流程 获取用户信息 的第 1 步,确保已经完成隐私申请。
q:授权码(auth_code)无效应该如何处理(isv.code-invalid)?
授权码无效可能是以下几种情况,请对照排查。
-
appid 选择错误
请确认是否使用了正确的 appid。授权码必须是获取用户信息的商户进行调用。- 如果是自调用模式,拼接授权链接的 appid 或者绑定小程序的 appid 必须与调用接口的 appid 一致。
- 如果是三方代调用模式(服务商代商户获取用户信息),在用户信息授权链接中 appid 必须设置为授权商户的 appid,而不是服务商的 appid。
-
授权码已被使用
- 授权码一次有效,不可重复使用,请确定传入的授权码是否已经被使用过。
-
授权码过期
- 授权码有效期为 3 分钟到 24 小时,超过有效期的授权码即使未使用也将自动失效。请检查传入的授权码是否因为长时间未使用已经过期。
q:web-view 中如何进行用户授权?
web-view 中不支持调用 my.getauthcode 接口。如果要在 web-view 中使用用户信息,请在小程序中获取后传递到 web-view h5 中。
可点此查看示例代码: web-view 中获取用户信息。