获取会员信息
产品介绍
加入“蚂蚁数据安全与隐私保障联盟”的联盟成员可以使用“获取会员信息”功能包,在小程序场景在线申请开通获取会员信息(例如:手机号)的授权接口。联盟成员需要严格遵守个人信息保护相关法律法规及监管要求,确保具备隐私保护及数据安全能力;联盟成员须遵守《蚂蚁开放平台用户信息处理规范》、《开放平台第三方应用安全开发指南》等规则,谨慎使用授权接口。开发者可以通过国际标准的 OAuth2.0 授权机制,在用户授权的情况下,得到用于换取用户信息的令牌。在拿到用户的授权令牌后,通过调用用户信息共享接口,获取用户的公开信息。
应用场景
用户授权获取会员信息该情况下,用户授权后可以拿到支付宝用户编号(user_id)、昵称、性别等基础信息进行免登处理。此种场景,用户在操作过程中,会出现弹框界面(如下图)让用户确认是否授权。
仅做展示该情况下,只希望展示用户头像、昵称到界面上,不保存这些数据。
准入条件
小程序企业开发者均可使用。
计费模式
不收费。
案例
(以下引用页面仅做流程展示用,可能与生产环境不完全相同)
- 用户首次进入小程序首页,无任何业务交互的情况下,无需唤起用户授权。
- 当需要获取用户授权时,以弹框的形式引导用户确认授权。
特备提醒:开发者须将用户授权放在需要展示用户相关信息的环节,请勿一开始就引导授权。
- 用户确认授权后,可以在权限范围内,获取会员信息或为用户提供授权类服务。
接入介绍
开发准备
获取小程序APPID开发者需要先进入小程序列表或详情页中查看 APPID。
小程序列表页
小程序详情页
添加“获取会员信息”功能在“小程序详情页→开发管理→功能列表”中,点击添加功能“获取会员信息”。
注意:个人小程序不支持申请获取会员手机号等敏感信息。
如需要申请获取会员姓名或手机号,则点击“用户信息申请”;如不需要,功能添加已完成(可获取会员公开信息:头像、昵称、性别等)。
如点击“用户信息申请”,请完成以下步骤:
申请具体信息字段权限。
准确、客观填写使用场景,并上传场景演示 demo,其中必须包含如何登录、如何授权输出此字段、如何使用等内容。
提交申请后,系统会判断是否加入"蚂蚁数据安全与隐私保障联盟" ( PID 维度) 并给出引导,请仔细阅读联盟公约,点击同意即可加入联盟并完成在线申请。
提交后,请等待系统在线审核,审核通过后,状态显示“已获取”,即可进入开发。
同时,为保证审核质量,会进行事后人工审核,对于无效申请或者不合理的申请,蚂蚁金服有权回收接口权限,请合理使用。
设置密钥接口加签方式主要用于签名和验签,其中私钥由开发者保存,公钥可对外公开;私钥用于签名,公钥用于验签。开发者保存自己的私钥,通过支付宝提供的公钥进行通信来保证信息传输的完整性以及发送者身份的真实性。在“小程序详情/设置”中为小程序完成公钥设置,详细可查看设置接口加签方式。
下载服务端SDK开发过程可能需要调用到服务端API,请先了解服务端API调用方式;点击查看服务端SDK。
下载开发工具详细阅读开发者文档并进入下载页面,下载开发者工具。 详细开发者工具操作见开发者工具操作说明。
技术接入
获取会员信息流程(含用户信息授权)
注意:本接入流程不是小程序一进来的流程,请不要一进小程序就弹框授权获取支付宝会员的信息。
- 客户端获取 authcode
my.getAuthCode({
scopes: 'auth_user', // 主动授权(弹框):auth_user,静默授权(不弹框):auth_base
success: (res) => {
if (res.authCode) {
// 认证成功
// 调用自己的服务端接口,让服务端进行后端的授权认证,并且种session,需要解决跨域问题
my.httpRequest({
url: 'http://isv.com/auth', // 该url是自己的服务地址,实现的功能是服务端拿到authcode去开放平台进行token验证
data: {
authcode: res.authCode
},
success: () => {
// 授权成功并且服务器端登录成功
},
fail: () => {
// 根据自己的业务场景来进行错误处理
},
});
}
},
});
- 服务端获取access_token、user_id
服务器端调用 alipay.system.oauth.token 接口换取授权访问令牌,开发者可通过获取到的 auth_code 换取 access_token 和用户ID。auth_code作为换取 access_token 的票据,每次用户授权完成,回调地址中的 auth_code 将不一样,auth_code 只能使用一次,一天未被使用自动过期。开放平台服务端SDK的 Java 调用示例如下:
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("调用成功");
} else {
System.out.println("调用失败");
}
如果认证成功,则开发者需要把 uid&token 种到 session 中,在 session 有效期内就不需要每次都走授权平台进行验证;如果认证失败,则返回失败原因,需要再重新走授权流程。
注意:如果仅是为了授权或获取用户ID(user_id),那么到此授权结束。
- 服务端获取会员信息
如果服务端要获取用户信息,那么不仅需要完成以上步骤:客户端获取 authCode、authCode 换取 token,还需要 token 换取用户信息,该步骤需使用接口 alipay.user.info.share 。
注意:服务端获取的用户信息进行落库,jsapi 获取的用户信息用来界面展示,不建议把前端获取到用户信息透传给服务端。
调用代码以 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("调用成功");
} else {
System.out.println("调用失败");
}
客户端获取头像昵称
前端通过 my.getAuthUserInfo 接口获得的用户信息主要是用来进行界面展示,如果想在数据库存储,请用按照上面的步骤在服务器端接口调用流程进行获取用户信息,调用代码以 Java 语言为例:
my.getAuthCode({
scopes: 'auth_user',
success: (res) => {
my.getAuthUserInfo({
success: ({ nickName, avatar }) => {
console.log({ nickName, avatar })
}
});
},
});
API 介绍
接口名称 | 描述 |
my.httpRequest | 向指定服务器发起一个跨域 http 请求 |
my.getAuthCode | 获取用户授权码 |
alipay.system.oauth.token | 换取授权访问令牌 |
alipay.user.info.share | 服务端获取会员信息 |
my.getAuthUserInfo | 客户端获取会员信息 问题:服务端获取不到会员信息 |
补充说明
问题:服务端获取不到会员信息。原因1:涉及到用户信息如真实姓名、手机号、证件号等,这些用户信息不会返回。原因2:调用的接口错误,请使用接口 alipay.user.info.share 。
问题:获取会员信息,服务端报 isv.invalid-token 无效 token 。原因1:获取授权码scope 必须传 auth_user 。原因2:调用的接口错误,请使用接口 alipay.user.info.share 。
RSA2签名验证工具 Mac版下载,Windows版下载