文档中心 > 当面付

当面付系统商应用授权流程

更新时间:2016/08/15 访问次数:11314

授权调用流程:

image

系统商申请成为开发者,创建应用

系统商使用签约支付宝账户登录支付宝开放平台,操作步骤见截图.申请后有2个工作日的审批周期

image

申请当面付接口权限

点击“上线”申请“添加当面付”功能。提交上线申请后,大概需要1个工作日的审核时间。

image

审核通过后可进入授权流程。
查看应用,配置秘钥。见截图:

image

拼接授权URL

开发者按照规则拼接授权URL,并且引导商户进行授权。
URL拼接规则:https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=APPID&redirect_uri=ENCODED_URL

  • APPID就是开发者申请的第三方应用ID
  • ENCODED_URL的地址必须与维护的授权回调地址一致,并且需要URL ENCODE,否则报错无法授权。

image

商户访问拼接后的URL,使用签约当面付2.0的支付宝账户登录,确认授权

image

获取app_auth_code

商户确认授权成功后,页面会跳转至开发者定义的授权回调页面。支付宝会在回调页面请求中加入参数,包括用户授权码app_auth_code、开发者的app_id
返回样例如下

https:example.com/doc/toAuthPage.html?app_id=2016061401516471&source=alipay_app_auth&enctraceid=eHXFUyuctPVky1OWXgZb7B7RRVTlAVBU9sujJ5yHB0w,&app_auth_code=442d8b9a521b4017ae90b72c3b70dX31

使用app_auth_code换取app_auth_token

接口名称:alipay.open.auth.token.app

开发者可通过获取到的app_auth_code换取app_auth_token和商户的userId以及AppId。app_auth_code作为换取app_auth_token的依据,每次商户授权带上的app_auth_code将不一样,app_auth_code只能使用一次,一天未被使用自动过期。 app_auth_token有效期为365天,并且可以被无限次刷新。

Java代码请求示例

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key");
AlipayOpenAuthTokenAppRequest request = new AlipayOpenAuthTokenAppRequest();
// 当使用app_auth_code换取app_auth_token时,biz_content的内容如下:
request.setBizContent("{
    "grant_type": "authorization_code",
    "code": "bf67d8d5ed754af297f72cc482287X62"
  }");
// 当要刷新app_auth_token时,需要使用refresh_token,biz_content的内容如下:
// request.setBizContent("{
    // "grant_type": "refresh_token",
    // "refresh_token": "201510BB0c409dd5758b4d939d4008a525463X62"
  // }");
AlipayTradeQueryResponse response = alipayClient.execute(request);

响应示例

{"alipay_open_auth_token_app_response":{"code":"10000","msg":"Success","app_auth_token":"201510BB0c409dd5758b4d939d4008a525463X62","app_refresh_token":"201606BBe070359acffb42978a94ba693b877X26","auth_app_id":"2013111900002129","expires_in":31536000,"re_expires_in":32140800,"user_id":"2088501624816263"},"sign":"g2YqFychnAfgKZYI5B4zunQ9tFUG7CWEAwpan4Nw0AvJ70+2k02eBdFuvWNpGMkyWdbW0l9hoKknk2XVeOf7xIse7uwCMz+1xe/M1gYQklqYQ5jErks6s0nv6/HHAPd0UaJt8CRPTaXRQ9kf2imVww0FAiKUxSKGl6LfG9qLNzw="}

代商户发起当面付请求调用

系统商使用app_auth_token代替商户发起当面付条码支付、扫码支付接口调用,则可实现“使用系统商appid和密钥 + 商户授权的app_auth_token”实现收款场景。
业务参数与商户自身发起请求时保持完全一致,只是POST请求参数中增加了app_auth_token参数

  • 代替商户发起请求时请务必带上app_auth_token,否则支付宝将认为是本应用替自己发起的请求。`app_auth_token是POST请求参数,不是biz_content的子参数。
    调用示例
/**
  * 统一交易支付(条码支付、声波支付)
  * @param appAuthToken 如ISV代替商家调用当面付接口,需将商户授权后获取的app_auth_token带上;如商家申请当面付自己调用,则传null。
  * @param bizContent = "{\"out_trade_no\":\"123213445324532\",\"scene\":\"bar_code\",\"auth_code\":\"用户钱包付款码(数字)\",\"total_amount\":\"0.01\",\"subject\":\"测试\"}";
  * @return
  * @throws AlipayApiException 请处理异常
  */
public AlipayTradePayResponse pay(String appAuthToken, String bizContent)
        throws AlipayApiException {
    AlipayTradePayRequest request = new AlipayTradePayRequest();
    request.putOtherTextParam("app_auth_token", appAuthToken);
    request.setBizContent(bizContent);
    return AlipayClientFactory.getAlipayClientInstance().execute(request);
}
  • 代替商户发起请求时,POST公共请求参数中的app_id应填写开发者的app_id;如果业务参数biz_content中需要AppId,则应填写商户的AppId。

FAQ

关于此文档暂时还没有FAQ
返回
顶部