AlipayGlobal集成备忘录

一、获取clientId,publicKey,privateKey

登录开发者中心 https://global.alipay.com/developer

pFusves.png

如果当前账号尚未配置publicKey ,则需要你下载阿里官方提供的工具去生成一个

pFusXLj.png

最终你要使用的publicKey 和privateKey 分别来自以下两个地方

pFusOyQ.png
pFusLQg.png

另外开发者中心提供如图所示工具,进行一系列测试

pFusqSS.png

二、应该去哪里找API文档

开发者中心的 Basic Information会显示当前账号开通了哪些产品,点击对应的产品即可进入API文档,

pFusHW8.png

如图 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参数指的是异步通知的地址,仅需要域名后面到传参前的一段。

  • 以下是一个示例
// 官方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

六、国际信用卡异步通知

  • 国际信用卡异步通知分两次

    • 第一次的notifyTypePAYMENT_RESULT,此时代表交易已被捕获,用户卡额度被冻结

    • 第二次的notifyTypeCAPTURE_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应用。

操作步骤

  1. 点击Integration Settings tab:在Production标签页下,设置跟交换生产环境的公私钥;
  2. Acceptance Testing:确认已在沙箱环境完成集成并通过验收用例;
  3. Contract Status:确认与支付宝的正式合约签订完毕。
  4. 应用launch后,您需在应用内修改域名(请使用开发者中心内分配的生产域名),接口请求地址及生产的Client ID等信息,并等待半小时后再发起请求进行生产测试。

posted on 2024-01-29 15:20  苏维埃的苏  阅读(40)  评论(1编辑  收藏  举报

导航