开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
文档中心
第三方应用 
开发 > 服务端 > spi 三方服务 > 接口集成
收藏
订阅更新
我的文档
设置
下载服务端 sdk
为了帮助服务商开发 spi 接口,支付宝提供了开放平台服务端 sdk,包含 java、php、python、nodejs 和 .net 等语言的版本,封装了签名、验签逻辑。请先下载对应语言版本的 sdk 并引入开发工程。
各语言版本服务端 sdk 详细使用说明,详情可查看 服务端 sdk 使用说明
通信规范
协议规则
外部商家接入支付宝开放平台出口网关,提供的服务必须满足以下规范。
网络传输协议
支持 http、https
数据提交方法
支持 get、post
content-type
application/x-www-form-urlencoded
响应报文格式
json
签名算法
支持 rsa、rsa2
字符集
支持 gbk、utf-8
请求报文格式
header 参数
由 spi 接口文档中的 header 参数定义,header 中的 key 具有固定前缀 x_
query 参数
字段类型
字段
类型
必填
描述
示例值
系统字段(固定)
method
string

接口。
alipay.xxx
charset
string

字符集。
utf-8
version
string

版本号,默认 1.0。
1.0
biz_app_id
string

商家 app_id。
2018xxxxxxxx1234
invoke_app_id
string

调用方 app_id。
2018xxxxxxxx4321
utc_timestamp
string

时间戳(秒)。
1546077067
sign_type
string

签名算法,支持 rsa、rsa2。
rsa2
sign
string

签名值。
***
merchant_app_id
string

商家app_id,支持open_id时传入
2018xxxxxxxx5678
业务字段(自定义)
由 spi 接口文档中的 query 参数定义,所有业务字段与系统字段处于同一层级。
body 参数
由 spi 接口文档中的 body 参数定义,content-type 为:application/x-www-form-urlencoded
响应报文格式
响应参数定义
字段
类型
必填
描述
示例值
response
string

json 格式字符串。
{"code":"10000","msg":"success","key_1":"value1"}
sign
string

签名值。仅当 spi 响应报文需要签名时必填。
tqnbnkils86fjwrqwwzptqipsklip2vnwod177h7glywulhzgrhpxgxd8god4flyhrhbtycqdiujww6vqce5ryhrju3iyqi1e0mllhcb
app_cert_sn
string

应用证书编号。如果应用在 升级了证书模式,则商家返回报文加签需要使用证书进行加签,同时响应报文需要返回证书编号字段 app_cert_sn。
6cd4ee7e4f31c1adba2380cc65da4a3a
response 定义
字段
类型
必填
描述
示例值
code
string

错误码,只有两种。
成功-10000
失败-40004
40004
msg
string

错误描述,只有两种。
成功-success
失败-business failed
business failed
sub_code
string

业务错误码,在业务失败的情况下返回,与 spi 接口文档里的“业务错误码”保持一致,值不能为 null 或 "",在业务成功的情况下不能返回。
invalid_params
sub_msg
string

业务错误描述,在业务失败的情况下返回。
无效参数
业务字段(自定义)
由 spi 接口文档中的响应参数定义。
响应报文示例
成功报文示例(含签名,非证书模式),不能返回 sub_code 和 sub_msg
成功报文示例(含签名,证书模式),不能返回 sub_code 和 sub_msg
成功报文示例(不含签名,响应不加签模式),不能返回 sub_code 和 sub_msg
失败报文示例(含签名,非证书模式)
失败报文示例(含签名,证书模式)
失败报文示例(不含签名,响应不加签模式)
商家验签规则
支付宝出口网关签名流程
支付宝出口网关会对 http 请求加签,同时将签名值放在 sign 参数中。参与签名的参数包括两部分业务参数(包括 spi 接口定义的 header、query、body 参数) 系统参数(除去 sign、sign_type 以外的所有系统字段)。所有签名参数组装成待签名的 map,然后对此 map 按照 key 的 ascii 码从小到大排序并生成 k=v 字符串对,k=v 对之间以"&"连接,然后待签名字符串按 charset 设定的编码类型、私钥及加签类型生成签名值。根据上述签名内容可得,对于支付宝出口网关响应的验签流程如下:
假设收到的 http 请求体中内容如下:
可以整理得到所有待验签参数:
根据待验签参数 key 按 ascii 顺序排序:
生成待验签字符串:
验签
使用非对称验签算法 rsa(sha1withrsa)或者 rsa2(sha256withrsa)对待验签字符串进行验签,具体验签算法由 sign_type 指定。
验签建议使用 支付宝开放平台 sdk 封装的验签工具类进行验签,调用方法如下:
商家签名规则
说明:若在 服务基础配置 > 响应是否加签 中,选择 ,则跳过当前步骤,进行下一步。
商家响应报文必须为 json 格式。非证书模式响应报文示例如下:
生成签名字符串
对 response 节点的值进行加签,待签名字符串为:
签名
签名算法与签名算法一致,由 sign_type 指定。建议使用支付宝开放平台 sdk 封装的签名工具类进行签名,调用方法如下:
注意支付宝在进行响应报文的验签过程中,不会对响应报文进行任何逻辑的排序,因此需要保证加签的原文与支付宝侧收到的响应报文顺序一致,否则将导致支付宝侧验签失败情况,下列几种情况需要避免:
1. 加签前对 response 节点的值进行任何的排序和过滤逻辑。
2. 服务端框架将响应对象序列化为响应报文的序列化方式,与生成加签原文的序列化方式不同。( java 语言的 spring 框架可以通过返回 string 类型 标注 @responsebody 来屏蔽框架序列化,保证序列化方式一致,代码详见下述demo,其余服务端框架请自行探索。)
服务端实现 demo
以下 demo 是通过 java 实现的 spi 服务样例,包括验签 支付宝请求报文、业务逻辑处理、商家加签 以及 响应报文构造 的逻辑。
该 demo 仅供参考,不同语言环境可根据该 demo 的处理思路自行实现。
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图