服务端接入支付宝文档解读

这个文档类似文言文,需要解读一下才能变成人话,请听我解读

首先确定职责范围和边界,这是最重要的,方向不对努力白费

这个图可谓是文档里最最重要的,没有之一,我在文档的犄角旮旯里找到了。

支付宝没有强调他的重要性,我替他强调一下

请看这个图,1.3,1.13,1.15是服务端要做的,除此以外的不用管,分别对应文档:app支付接口2.0文档,异步通知说明,同步通知说明

在这个图里,请注意1.3,他是没有网络请求的,重点强调!

如果你不用他的sdk,那这个文档写了和没写一样。

每到关键的地方,就会写着执行sdk,他还会很贴心的提供代码!代码是这么写的:

scss 复制代码
$aop->sdkExecute($request);
alipayClient.sdkExecute(request);
client.SdkExecute(request);
await alipaySdk.sdkExec();

是不是有种写了寂寞的感觉?

如果你不用他的sdk,其实也是有文档的,只是很隐蔽,怎么找到呢?

点击签名打开了一个页面告诉你签名规则,他是属于通用工具栏目里的,旁边有个栏目叫技术接入指南,里面有个开发指南,里面有个自行实现签名/自行实现验签。

这就需要提一下他的sdk代码了,他的sdk就做了几件事而已:签名/验签/处理证书。

解读一下,当文档在说sdk的时候,可以理解为他在说签名/验签

那自己实现一下签名/验签就是了,要什么sdk。

有具体的规则,有证书,签名就那么点东西,他还能玩出花样?他能

首先是证书,他提供了很多的文件,但是他不告诉这些文件是什么,你自己猜,我们来看看

  • 应用公钥RSA2048.txt
  • 应用私钥RSA2048-敏感数据,请妥善保管.txt
  • 支付宝.txt
  • alipayCertPublicKey_RSA2.crt
  • alipayRootCert.crt
  • appCertPublicKey_20210041xxxx.crt
  • CSR文件.csr

在自行实现签名里,他这样说:

需携带 应用公钥证书 SN (app_cert_sn)、支付宝根证书 SN(alipay_root_cert_sn)SN 值是通过解析 X.509 证书文件中签发机构名称(name)以及内置序列号(serialNumber),将二者拼接后的字符串计算 MD5 值获取

支付宝根证书SN这个是确定的:alipayRootCert.crt,这个没问题,因为只有这一个文件名里带root

应用公钥证书SN(app_cert_sn)要靠猜了。在很多次验证之后发现他说的应用公钥匙证书是appCertPublicKey_20210041xxxx.crt

签发机构名称(name)这是java语言解析出来的叫name长这样:

ini 复制代码
CN=Ant Financial Certification Authority Class 1 R1,OU=Certification Authority,O=Ant Financial,C=CN

但是php语言解析出来叫issuer,长这样

csharp 复制代码
[C] => CN
[O] => Ant Financial
[OU] => Certification Authority
[CN] => Ant Financial Certification Authority Class 1 R1

go语言解出来叫issuer,长这样

ini 复制代码
CN=Ant Financial Certification Authority Class 1 R1,OU=Certification Authority,O=Ant Financial,C=CN

文档里用name对其他语言太不友好了,要不是看了php源码,我真不知道去哪找name

使用各自语言对应的 SHA256WithRSA(对应 sign_type 为 RSA2)或 SHA1WithRSA(对应 sign_type 为 RSA)签名函数利用商家私钥对签名字符串进行签名,并进行 Base64 编码

私钥在哪?看文件名毫无疑问是这个:应用私钥RSA2048-敏感数据,请妥善保管.txt,但这内容也不是私钥格式啊

抱歉,你需要自己处理一下格式,怎么处理?文档没有,看sdk代码

下一个要解释的是公钥验签,自行实现验签的时候,他是这么说的:

使用各自语言对应的 SHA256WithRSA (对应 sign_type 为 RSA2) 或 SHA1WithRSA (对应 sign_type 为 RSA) 签名验证函数,传入待验签字段、支付宝公钥证书存放路径、签名内容(sign),验签方法(signType)进行验签,根据返回结果判定是否验签通过。

公钥是哪个呢?猜就完事了,经过各种试验,发现是alipayCertPublicKey_RSA2.crt

而且这个公钥不能直接用,需要处理一下,但是我文档不说,你看源码

最后一个要解释的是服务端API列表,各种支付接口,看他的文档结构,有请求参数,响应参数,还有错误码呢,文档上这样写着

请在服务端执行支付宝SDK中sdkExecute方法,读取响应中的body()结果。

第一反应是这是一个http请求,但是我找不到method,query,body,header,response啊,只有一个网关域名,这咋回事???

看sdk源码才知道,这根本就不是一个http请求,这就是签名而已

我建议支付宝文档,别总拿sdk说事,sdk毕竟封装了一次,不够直接,请直接说事。

  • 如果是签名,描述签名规则
  • 如果是验证,描述验证规则
  • 如果是网络请求,请给出curl
  • 如果需要证书,请指明证书以及如何处理

有了签名/验签规则、证书和curl,我不信还有什么说不清楚的。

sdk应该是辅助,有更好,没有也完全不影响。

接完之后,发现接入过程非常简单,和其他第三方没有什么不同,关键的地方一页纸一定能说清楚,不知道他们这么多人在写什么

相关推荐
红尘散仙5 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记6 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆6 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪6 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6167 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364577 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao7 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒8 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰10 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox10 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全