更新时间:2020-11-06 20:44
账户通服务用于在非支付宝客户端上实现支付宝用户登录态获取并访问支付宝相关的服务,如授权、支付等。除了需要在客户端接入相关 SDK 之外,接入方还需要在服务端实现相关服务以完成支付宝三方授权流程。支付宝三方授权的流程如下:
服务端接入流程包含以下几步:
接入开始前,需要在支付宝开放平台上创建、配置并上线应用。详情参考 创建应用。
创建说明:
为帮助开发者调用支付宝开放平台接口,我们提供开放平台服务端 SDK,用于封装签名验签、HTTP 请求等基础功能。您可前往 服务端 SDK 下载选择所需语言的版本。在下文中会通过 JAVA 版本的 SDK 做接入用于举例说明。
授权请求链接构造分为两个步骤:
代码如下:
AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY_URL, APP_ID,
APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
参数说明:
配置参数 | 参数说明 | 参数值或获取方式 |
---|---|---|
ALIPAY_GATEWAY_URL |
支付宝网关,此为固定值。 | 固定值,填写内容为:https://openapi.alipay.com/gateway.do |
APP_ID |
创建应用时获得的 AppID。 | 参考 创建应用 > 查看 AppID |
APP_PRIVATE_KEY |
开发者私钥,由开发者自己生成。 | 参考 创建应用 > 配置应用环境 |
FORMAT |
参数返回格式,只支持 json。 | 固定值,填写内容为:json |
CHARSET |
编码格式,支持 GBK/UTF-8。 | 开发者按需选择 |
ALIPAY_PUBLIC_KEY |
支付宝公钥。 | 参考 生成公钥 |
SIGN_TYPE |
开发者生成签名所使用的算法类型,支持 RSA 与 RSA2,推荐使用 RSA2。 | RSA2 |
参数名称 | 是否必须 | 参数说明 |
---|---|---|
return_url |
是 | 回调地址,必须与配置应用时设置的回调地址一致。 |
scopes |
是 | 接口权限值,如:auth_user 、auth_base 等,请求格式为:"scopes":["auth_user","auth_base"] 。 |
state |
是 |
|
auth_type |
是 | auth_type,用于标识授权类别。值为:MY_PASS_OAUTH |
origin |
是 | 调用来源,填写一个宿主标识,由我方分配。 |
is_mobile |
是 | true |
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", appId, appPrivateKey, "json", "UTF-8", alipayPublicKey, "RSA2");
// 创建 API 对应的 request
AlipayUserInfoAuthRequest alipayRequest = new AlipayUserInfoAuthRequest();
// 设置授权回调地址,在开放平台后台配置
alipayRequest.setReturnUrl("授权回调 url 地址");
// 构造 scope 列表
List<String> scopes = new ArrayList<String>();
scopes.add("auth_base");
scopes.add("auth_user");
Map<String, Object> bizContent = new HashMap<String, Object>();
bizContent.put("scopes", scopes);
bizContent.put("auth_type", "MY_PASS_OAUTH"); // 固定值
bizContent.put("origin", "XXXX"); // 调用来源,例如 AMAP、UC_BROSWER、NAPOS 等
bizContent.put("is_mobile", "true"); // 固定值
// 请求唯一随机标识,用于防 CSRF 攻击,只允许 Base64 字符(长度小于等于 100)
bizContent.put("state", "xxxxxx");
// 填充业务参数
alipayRequest.setBizContent(JSONObject.toJSON(bizContent).toString());
AlipayUserInfoAuthResponse response = alipayClient.pageExecute(alipayRequest, "GET");
if (response.isSuccess()) {
System.out.println("调用成功");
System.out.println(response.getBody());
} else {
System.out.println("调用失败");
System.out.println(response.getSubCode() + ":" + response.getSubMsg());
}
生成的授权链接样例如下:https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-java-3.7.4.ALL&app_id=2019040163782051&biz_content=%7B%22auth_type%22%3A%22MY_PASS_OAUTH%22%2C%22scopes%22%3A%5B%22auth_user%22%5D%2C%22state%22%3A%2210%22%2C%22is_mobile%22%3A%22true%22%7D&charset=UTF-8&format=json&method=alipay.user.info.auth&return_url=http%3A%2F%2Fzhanghutong.yuguozhou.online%2Ffirst&sign=RHLcR%2BbfgW50JgNr5e6MTT08Bnnb3%2Fyt%2B0YIObm%2Fdpq2yJtYzHKgmS2ciVrgFEk6DUKtEmipoLb8xJ8ErFQAtSS7p8AvXGGY63D95N4lm6yasUVCg2kGoofeB9OPk7GBkLkud1CY3oCbK4HgbHHnHIc43GtXuKt0QLMPivZjKgqb5u1zt%2FKscdCt8JrLG4L5vOOFGKRuh3cFq%2BVL%2Bdvaufwbut6B%2B85GjOsnvONICif8r9cxpdzlsRFoSVmYu%2F7AUM34diatlQPvKs5NOeeAg2W8QkBbQYza0f84KYrNAAeX9ITbzvc7ntiL9606qEB1OWj%2Flccm%2B1TSKQjUUjjC6A%3D%3D&sign_type=RSA2×tamp=2019-04-28+17%3A28%3A04&version=1.0
此授权链接可重复使用,客户端使用此授权链接向支付宝发起授权请求获取 auth_code。
通过 alipay.system.oauth.token
接口获取 access_token
和支付宝 user_id
。
接口调用示例:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setCode("2e4248c2f50b4653bf18ecee3466UC18");
request.setGrantType("authorization_code");
try {
AlipaySystemOauthTokenResponse oauthTokenResponse = alipayClient.execute(request);
System.out.println(oauthTokenResponse.getAccessToken());
} catch (AlipayApiException e) {
e.printStackTrace();
}
获取 access_token
和支付宝 user_id
后,需要进一步调用账户绑定关系同步接口,把机构的用户唯一标识与支付宝 user_id
进行绑定。
接口名称 | alipay.user.antpaas.role.relation.save |
---|---|
接口描述 | 保存账户绑定关系,涵盖增、删、改操作 |
入参说明 |
|
出参说明 |
|
错误码 | INVALID_PARAMETER SYSTEM_ERROR USER_OCCUPIED ALIPAY_USER_OCCUPIED |
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipayUserAntpaasRoleRelationSaveRequest request = new AlipayUserAntpaasRoleRelationSaveRequest();
request.setBizContent("{" +
"\"user_id\":\"287346876344\"," +
"\"user_source\":\"FINTECH_TEST\"," + "\"alipay_user_id\":\"2088131231323456\"," +
"\"op_type\":\"enable\"," +
"\"user_occupied_auto_delete\":true," + "\"alipay_user_occupied_auto_delete\":true" +
" }");
AlipayUserAntpaasRoleRelationSaveResponse response = alipayClient.execute(request);
if (response.isSuccess()) {
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
在文档使用中是否遇到以下问题
更多建议
匿名提交