更新时间:2025-04-07 18:24:19收藏订阅更新我的文档设置返回文档下载服务端 sdk为了帮助服务商开发 spi 接口,支付宝提供了开放平台服务端 sdk,包含 java、php、python、nodejs 和 .net 等语言的版本,封装了签名、验签逻辑。请先下载对应语言版本的 sdk 并引入开发工程。各语言版本服务端 sdk 详细使用说明,详情可查看 服务端 sdk 使用说明。通信规范协议规则外部商家接入支付宝开放平台出口网关,提供的服务必须满足以下规范。网络传输协议支持 http、https数据提交方法支持 get、postcontent-typeapplication/x-www-form-urlencoded响应报文格式json签名算法支持 rsa、rsa2字符集支持 gbk、utf-8请求报文格式header 参数由 spi 接口文档中的 header 参数定义,header 中的 key 具有固定前缀 x_。query 参数字段类型字段类型必填描述示例值系统字段(固定)methodstring是接口。alipay.xxxcharsetstring是字符集。utf-8versionstring是版本号,默认 1.0。1.0biz_app_idstring否商家 app_id。2018xxxxxxxx1234invoke_app_idstring否调用方 app_id。2018xxxxxxxx4321utc_timestampstring是时间戳(秒)。1546077067sign_typestring是签名算法,支持 rsa、rsa2。rsa2signstring是签名值。***merchant_app_idstring否商家app_id,支持open_id时传入2018xxxxxxxx5678业务字段(自定义)由 spi 接口文档中的 query 参数定义,所有业务字段与系统字段处于同一层级。body 参数由 spi 接口文档中的 body 参数定义,content-type 为:application/x-www-form-urlencoded。响应报文格式响应参数定义字段类型必填描述示例值responsestring是json 格式字符串。{"code":"10000","msg":"success","key_1":"value1"}signstring否签名值。仅当 spi 响应报文需要签名时必填。tqnbnkils86fjwrqwwzptqipsklip2vnwod177h7glywulhzgrhpxgxd8god4flyhrhbtycqdiujww6vqce5ryhrju3iyqi1e0mllhcbapp_cert_snstring否应用证书编号。如果应用在 升级了证书模式,则商家返回报文加签需要使用证书进行加签,同时响应报文需要返回证书编号字段 app_cert_sn。6cd4ee7e4f31c1adba2380cc65da4a3aresponse 定义字段类型必填描述示例值codestring是错误码,只有两种。成功-10000失败-4000440004msgstring是错误描述,只有两种。成功-success失败-business failedbusiness failedsub_codestring否业务错误码,在业务失败的情况下返回,与 spi 接口文档里的“业务错误码”保持一致,值不能为 null 或 "",在业务成功的情况下不能返回。invalid_paramssub_msgstring否业务错误描述,在业务失败的情况下返回。无效参数业务字段(自定义)由 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 的处理思路自行实现。