一、获取clientId,publicKey,privateKey
登录开发者中心 https://global.alipay.com/developer
如果当前账号尚未配置publicKey ,则需要你下载阿里官方提供的工具去生成一个
最终你要使用的publicKey 和privateKey 分别来自以下两个地方
另外开发者中心提供如图所示工具,进行一系列测试
二、应该去哪里找API文档
开发者中心的 Basic Information
会显示当前账号开通了哪些产品,点击对应的产品即可进入API文档,
如图 Cashier Payment的文档地址就是 https://global.alipay.com/docs/ac/cashierpay/overview
https://global.alipay.com/docs/ac/ams/payment_agreement
三、国家,币种,支付方式之间的关系
以下链接在测试不同币种或支付方式时,需注意对应关系,因为有时候你得到的报错信息不会提示币种或支付方式有误
https://global.alipay.com/docs/ac/cashierpay/payment_method_capabilities?pageVersion=38
https://global.alipay.com/docs/ac/ref/payment_method
四、测试支付
一般情况下,测试支付的账号可以随意填写,少数支付渠道需要使用特定的mock数据,这些mock数据需要找阿里沟通群的负责人要
五、异步通知
-
异步通知的地址需要在创建交易时指定,并且该地址要求公网可以访问,本地开发可以使用内网穿透方式
-
如果可以,尽量遵照官方的要求对通知参数进行验签,对应的SDK下载地址
https://global.alipay.com/docs/sdks
注意
接收到的签名参数在
header
中携带,验签时仅需要截取signature=
后的字符串,并对其进行urldecode
后再调用sdk的验签方法仅PHP语言需留意 对接收到的
body
参数进行json_encode
时,应使用JSON_FORCE_OBJECT
参数,确保得到的json
字符串中若存在空对象,不会被转为空数组形式验签参数中的
path
参数指的是异步通知的地址,仅需要域名后面到传参前的一段。
- 例如:通知地址为 https://www.abc.com/alipay/notify?k1=v1&k2=v2 ,则验签是的
path
参数为/alipay/nofity
,不需要将域名和get
参数作为path
参数传进去
- 以下是一个示例
// 官方SDK验签的方法
$isVerifyPass = SignatureTool::verify($httpMethod, $path, $clientId,
$rspTime, $rspBody, $rspSignValue, $alipayPublicKey);
// $httpMethod 默认为 POST
// $path 按照上述方式传参即可
// $clientId 当前使用的clientId
// $rspTime 取header中的request-time
// $rspBody 取post请求过来的body即可,如果使用了某些框架封装的参数获取方法,
// 则需要注意:获取到的body可能会被转成数组,当其中存在空值时,可能
// 会被转为数组而非对象
// 有两种处理方式:
// (1) 使用原生 $_POST
// (2) 对封装的参数获取方法得到的数组进行
// json_encode($params, JSON_FORCE_OBJECT)
// $rspSignValue 对header中的signature进行截取,取signature=后的字符串
// 并urldecode
// $alipayPublicKey 使用获取到的publicKey
六、国际信用卡异步通知
-
国际信用卡异步通知分两次
-
第一次的
notifyType
是PAYMENT_RESULT
,此时代表交易已被捕获,用户卡额度被冻结 -
第二次的
notifyType
是CAPTURE_RESULT
,此时代表交易已结算,认为交易已成功,业务上可以进入后续流程
-
-
拒付通知
-
拒付通知的地址需要在开发者中心进行配置,无法在支付发起时指定
-
信用卡支付存在用户拒付的情况,出现在已经
CAPTURE
完成之后,此时会收到notifyDispute
,其中disputeNotificationType
分为以下四种:DISPUTE_CREATED
: Indicates that a dispute occurs.(争议创建)DISPUTE_JUDGED
: Indicates that the dispute is judged. (争议判决)DISPUTE_CANCELLED
: indicates that the dispute is cancelled by the user. (用户取消争议请求)DEFENSE_SUPPLIED
: indicates that your defense documents for the dispute are submitted. (争议辩护文件已提交)
-
一般情况,捕获到
DISPUTE_CREATED
时,应取消订单,拦截发货。或者发送提醒给客服,尝试联系客户询问原因
-
七、应用上线
上线前提:
确认开发者中心上application的状态,登录开发者中心查看设置相关事项,全部显示completed/signed的情况下再去launch应用。
操作步骤
- 点击Integration Settings tab:在Production标签页下,设置跟交换生产环境的公私钥;
- Acceptance Testing:确认已在沙箱环境完成集成并通过验收用例;
- Contract Status:确认与支付宝的正式合约签订完毕。
- 应用launch后,您需在应用内修改域名(请使用开发者中心内分配的生产域名),接口请求地址及生产的Client ID等信息,并等待半小时后再发起请求进行生产测试。