支付中台接口文档
  1. 支付宝支付
  • 简介
  • 异步通知说明
  • 接口签名规则说明
  • 商户入件
    • 商户入件说明
    • 商户状态及信息查询
      POST
    • 微信实名认证状态查询
      POST
    • 支付宝实名认证状态查询
      POST
    • 商户结算信息变更申请
      POST
    • 商户信息变更查询
      POST
    • 商户信息变更结果通知
      POST
  • 支付接口
    • 微信支付
      • 获取微信用户openid
      • JSAPI调起支付
      • 微信支付
    • 支付宝支付
      • 获取支付宝用户user_id
      • 申诉回退到 userid
      • JSAPI调起支付
      • 支付宝支付
        POST
    • 反扫支付(B扫C)
      • 反扫支付说明
      • 反扫支付
    • 聚合收银台
      • 移动APP接入支付说明
      • 微信小程序接入支付说明
      • 支付宝小程序接入支付说明
      • H5收银台接入支付说明
      • 收银台订单预创建
  • 通知接口
    • 支付结果通知
      POST
    • 分账结果通知
      POST
    • 退款结果通知
      POST
    • 转账结果通知
      POST
  • 查询接口
    • 支付订单查询
      POST
    • 分账结果查询
      POST
    • 退款订单查询
      POST
    • 转账结果查询
      POST
  • 资金结算
    • 结算查询
    • 分账请求
    • 订单退款
    • 商户余额查询
    • 商家钱包退款
  • 商家钱包
    • 开通钱包申请
    • 开通进度查询
    • 钱包开通结果通知
    • 账户转账申请
    • 绑定提现卡
    • 地区码查询
    • 开户行查询
    • 提现卡查询
    • 提现申请
    • 提现查询
    • 提现结果通知
  • 个人钱包
    • 钱包注册
    • 钱包详情
    • 身份证照片补充
    • 钱包提现
    • 钱包提现查询
    • 绑定银行卡
    • 解绑银行卡
    • 短信验证码确认
    • 钱包提现结果通知
  1. 支付宝支付

获取支付宝用户user_id

授权流程#

在生活号或者 H5 应用内,授权流程如下图所示:
生活号.png
1.
通过调用 JSAPI ap.getAuthCode 接口在当前页面唤起半屏授权浮层;
2.
用户确认授权后,接口返回 auth_code;
3.
开发者通过 alipay.system.oauth.token(换取授权访问令牌接口),使用 auth_code 换取 access_token 及用户的 user_id。
如果需要除 user_id 以外的其他信息,则使用 access_token 调用 alipay.user.info.share(支付宝会员授权信息查询接口)获得用户信息。

操作步骤#

第一步:入参说明#

代码示例#

<script src = "https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js"> </script> 
<button id = "test"> getAuthCode </button>
<script>
 document.querySelector('#test').addEventListener('click',function(){
    ap.getAuthCode ({
      appId :  '${appId}' ,
      scopes : ['auth_base'],
   },function(res){
      ap.alert (JSON.stringify(res));
   });
});
</script>

入参说明#

参数类型必填描述
scopesArray否授权类型,默认 auth_base。支持以下两种类型:auth_base(静默授权):静默授权,用户无需点击确认授权,默认返回 auth_code,该授权码不支持获取用户信息。 auth_user(主动授权):首次授权需要用户手动点击同意,用户同意后,返回 auth_code;商家需要考虑用户拒绝授权的情况并进行相应容错。如果授权关系依旧存在,下次进入页面时也会静默授权。
appIdString是开放平台应用 id,详情请参见 查看 APPID。
showErrorTipboolean否是否显示出错弹框。建议传入 false 自行处理异常,默认 true。
💡
scopes:为授权类型,如果不需要用户其他身份信息,只获取支付需要的用户user_id的话,传auth_base,静默授权方式会跳过需要用户点击同意的授权页面,无感获取用户user_id!!!
因间联支付要求,应用如果是获取的(open_id),需要在应用中申诉回退为获取user_id
注意:服务商代商家获取会员信息时,用户信息实际还是授权给授权商家的,因此 URL 拼接链接需注意 appId 和 JSAPI ap.getAuthCode 接口设置页面:
appId:授权商家 APPID(即 第三方应用授权 返回 app_auth_token 对应的 auth_app_id )。
JSAPI ap.getAuthCode 需要在授权商家应用配置的授权回调页面中调用,否则会导致无法正常使用。

callback 参数说明#

参数类型描述
authCodeString授权码,用于在之后通过 alipay.system.oauth.token(换取授权访问令牌接口)换取 access_token 和 user_id。
errorNumber错误码。详情请参见 错误码说明。
errorMessageString错误信息。
errorDescString错误描述(中文)。

错误码说明#

错误码说明
2参数错误。
10获取授权过程中的其他错误。
11用户取消授权。
12rpc 网络错误。
15授权回调地址不合法,请保证已配置 https 开头的授权回调地址,且当前页面地址需要和配置的一致。

第二步:换取 access_token 和 user_id#

得到 auth_code 后,开发者通过 alipay.system.oauth.token(换取授权访问令牌接口),使用 auth_code 换取 access_token 及用户的 user_id。auth_code 作为换取 access_token 的凭证,每次用户授权完成后,返回参数中的 auth_code 将不一样,auth_code 只能使用一次,24 小时内未被使用自动过期。
注意:alipay.system.oauth.token(换取授权访问令牌接口)的返回值 alipay_user_id 已废弃,请勿使用,需要获取的 userId 值为返回值中的 user_id 。

接口请求示例#

package com.java.sdk.demo;

import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipaySystemOauthApi;
import com.alipay.v3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AlipaySystemOauthApiToken {

    public static void main(String[] args) throws ApiException {
        ApiClient defaultClient = Configuration.getDefaultApiClient();
        // 初始化alipay参数(全局设置一次)
        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setServerUrl("https://openapi.alipay.com");
        alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
        alipayConfig.setPrivateKey("<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->");
        alipayConfig.setAlipayPublicKey("<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->");
        defaultClient.setAlipayConfig(alipayConfig);
        AlipaySystemOauthApi api = new AlipaySystemOauthApi();
        AlipaySystemOauthTokenModel data = new AlipaySystemOauthTokenModel();
        data.setCode("4b203fe6c11548bcabd8da5bb087a83b");
        data.setGrantType("authorization_code");
        data.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
        try {
            AlipaySystemOauthTokenResponseModel response = api.token(data);
        } catch (ApiException e) {
            AlipaySystemOauthTokenDefaultResponse errorObject = (AlipaySystemOauthTokenDefaultResponse) e.getErrorObject();
            System.out.println("调用失败:" + errorObject);
        }
    }
}

请求参数说明#

参数类型必填描述
grant_typeString是授权类型。值为 authorization_code 时,代表用 code 换取;值为 refresh_token 时,代表用 refresh_token 换取。示例值:authorization_code
codeString与 refresh_token 二选一授权码。用户对应用授权后得到,即第二步中开发者获取到的 auth_code 值。示例值:4b203fe6c11548bcabd8da5bb087a83b
refresh_tokenString与 code 二选一刷新令牌。刷新 access_token 时使用。示例值:201208134b203fe6c11548bcabd8da5bb087a83b

同步响应结果示例#

{
    "access_token":"20120823ac6ffaa4d2d84e7384bf983531473993",
    "refresh_token":"20120823ac6ffdsdf2d84e7384bf983531473993",
    "user_id":"2088102150477652",
    "re_expires_in":"3600",
    "auth_start":"2010-11-11 11:11:11",
    "expires_in":"3600"
}

同步响应参数说明#

参数类型必填最大长度描述
access_tokenString是40交换令牌。用于获取用户信息。示例值:publicpBa869cad0990e4e17a57ecf7c5469a4b2
user_idString是16用户的 userID。支付宝用户的唯一 userId。示例值:2088102104711111
expires_inString是16令牌有效期。交换令牌的有效期,单位秒。示例值:300
re_expires_inString是16刷新令牌有效期,单位秒。示例值:300
refresh_tokenString是40刷新令牌。通过该令牌可以刷新 access_token。示例值:publicpB0ff17e364f0743c79b0b0d7f55e20bfc

第三步:获取用户信息#

开发者在获取了用户的 user_id 后,如果想获取头像、昵称、省份等其他信息,需要调用 alipay.user.info.share(支付宝会员授权信息查询接口)。

接口请求示例#

package com.java.sdk.demo;

import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipaySystemOauthApi;
import com.alipay.v3.model.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AlipaySystemOauthApiToken {

    public static void main(String[] args) throws ApiException {
        ApiClient defaultClient = Configuration.getDefaultApiClient();
        // 初始化alipay参数(全局设置一次)
        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setServerUrl("https://openapi.alipay.com");
        alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
        alipayConfig.setPrivateKey("<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->");
        alipayConfig.setAlipayPublicKey("<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->");
        defaultClient.setAlipayConfig(alipayConfig);
        AlipaySystemOauthApi api = new AlipaySystemOauthApi();
        AlipaySystemOauthTokenModel data = new AlipaySystemOauthTokenModel();
        data.setCode("4b203fe6c11548bcabd8da5bb087a83b");
        data.setGrantType("authorization_code");
        data.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
        try {
            AlipaySystemOauthTokenResponseModel response = api.token(data);
        } catch (ApiException e) {
            AlipaySystemOauthTokenDefaultResponse errorObject = (AlipaySystemOauthTokenDefaultResponse) e.getErrorObject();
            System.out.println("调用失败:" + errorObject);
        }
    }
}

公共请求参数说明#

参数类型必填描述
auth_tokenString是授权令牌。通过 auth_code 获取的 access_token。示例值:publicpB9ea460ff5b5c468c9ccf5e967dc34963

同步响应结果示例#

{
    "province":"安徽省",
    "gender":"F",
    "user_id":"2088102104794936",
    "city":"安庆",
    "nick_name":"支付宝小二",
    "avatar":"http://tfsimg.alipay.com/images/partner/T1uIxXXbpXXXXXXXX"
}

同步响应参数说明#

参数类型描述
user_idString支付宝用户的会员 ID,2088 开头的 16 位数字。示例值:2088102104711111
avatarString用户头像。如果没有数据的时候不会返回该数据,请做好容错。**示例值:**https://tfsimg.alipay.com/images/partner/T1k0xiXXRnXXXXXXXX
nick_nameString用户昵称。如果没有数据的时候不会返回该数据,请做好容错。示例值:张三

结果码说明#

同步返回结果码描述
10000业务处理成功。
40001~40006业务处理失败。具体失败原因请参考 公共错误码。其它请参考 API 文档。
20000业务出现未知错误或者系统异常。业务出现未知错误或者系统异常(请一定在确定本次调用结果后,发起重试),可调用查询接口发起查询确定结果。

消息通知#

商家/服务商创建、修改及用户领取商家券等场景,支付宝都将通过 From 蚂蚁消息通知 向商家应用 或第三方应用 应用网关 推送异步通知消息,同步对应操作结果。
若商家/服务商网络环境比较复杂,如:通过统一网关间连互联网,推荐使用网络兼容性更好的标准 http(s) 协议进行对接。

第一步:订阅消息#

当用户取消用户信息授权时,支付宝将通过 alipay.open.auth.userauth.cancelled(用户授权取消消息接口),发送此消息给被授权方。商家/服务商需根据 订阅消息 指引,为接入的应用订阅如下消息接口。
**注意:**仅完成订阅后才会收到支付宝发送的对应异步通知消息。

第二步:验签#

商家/服务商可使用支付宝 SDK 可根据 使用生成密钥验签 指引,使用应用密钥信息验证异步通知消息来源是否为支付宝。

第三步:反馈消息接收结果#

收到异步通知完成验签后,商家/服务商需返回 success 表示消息获取成功,支付宝就会停止发送异步通知。如果返回 fail 或其他值,表示消息获取失败,支付宝会根据 投递重试策略 重新发送消息到应用网关地址。
**说明:**完成异步通知验签时,如果验签成功返回 success,验签失败返回 fail,重新接收异步进行处理。
响应值描述是否重试
fail消息获取失败重试
success消息获取成功不重试

用户授权取消消息通知#

用户取消用户信息授权时,支付宝将通过 alipay.open.auth.userauth.cancelled(用户授权取消消息接口),发送此消息给被授权方。

消息示例#

ISV_GATEWAY_URL?charset=GBK&biz_content=
{
"app_id":"2014072300007148","user_id":"2088102104711111","cancel_time":"1514210452731"
}
&msg_method=alipay.open.auth.userauth.cancelled&utc_timestamp=1516797622752&version=1.1&sign_type=RSA2&notify_id=d275fec564e62af6bedbcee73f3f05fi5x&app_id=2013121700999429&sign=I+Y/lvqYUEEc10EPdpntRhFIQ==
文档内容是否对您有帮助?
​ 如果文档内容没有解决您的问题,您还可以前往 支付宝开放社区 寻求帮助
上一页
微信支付
下一页
申诉回退到 userid
Built with