系统商使用签约支付宝账户登录支付宝开放平台,操作步骤见截图.申请后有2个工作日的审批周期
点击“上线”申请“添加当面付”功能。提交上线申请后,大概需要1个工作日的审核时间。
审核通过后可进入授权流程。
查看应用,配置秘钥。见截图:
开发者按照规则拼接授权URL,并且引导商户进行授权。
URL拼接规则:https://openauth.alipay.com/oauth2/appToAppAuth.htm?app_id=APPID
&redirect_uri=ENCODED_URL
APPID
就是开发者申请的第三方应用IDENCODED_URL
的地址必须与维护的授权回调地址一致,并且需要URL ENCODE,否则报错无法授权。商户访问拼接后的URL,使用签约当面付2.0的支付宝账户登录,确认授权
商户确认授权成功后,页面会跳转至开发者定义的授权回调页面。支付宝会在回调页面请求中加入参数,包括用户授权码app_auth_code
、开发者的app_id
返回样例如下
https:example.com/doc/toAuthPage.html?app_id=2016061401516471&source=alipay_app_auth&enctraceid=eHXFUyuctPVky1OWXgZb7B7RRVTlAVBU9sujJ5yHB0w,&app_auth_code=442d8b9a521b4017ae90b72c3b70dX31
接口名称: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
参数
/** * 统一交易支付(条码支付、声波支付) * @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); }