代付提单签名规则

使用场景:该签名规则代付提单时使用,回调接口的还是沿用通用的签名(md5)

✅ 签名说明 :

  1. 参数名区分大小写。

  2. 如果参数的值为空不参与签名,注意一些特定字段也不参与签名,具体参见接口参数说明。

  3. 参数名 ASCIl 码从小到大排序(字典序)。

  4. 排序后按照(key1=value1&key2=value2&key3=value3...)的格式拼接成字符串 A。

  5. 用A拼接 ’key=密钥值‘ 生成最终字符串 S,key密钥值由商户创建时生成提供,请勿泄露给不相关人员。

  6. 使用RSA对字符串S进行加密(填充方式:RSA/ECB/PKCS1Padding),生成最终字符串 sign作为请求参数之一参与请求api接口,RSA密钥(2048 位 PKCS#8格式,Base64编码无头尾,一行格式)请商户自行生成后,将解密的私钥上传到商户后台,加密的公钥请商户妥善保管,防止盗窃或者丢失。

✅ 签名示例 :

示例RSA公钥:

最终字符串S:

⚠️签名串中的参数不是全部 参数拼接,是部分参数的拼接,具体请看代付参数说明,根据是否参与签名进行排序以及加密

RSA公钥加密后为(PKCS1Padding方式,加密串每次是变化的,以下只是随机的一种加密结果):

完整请求参数JSON为:

✅ JAVA 实现:

🐘PHP 实现:

🟦 Node.js 实现(使用 crypto模块):

🟨 Go 实现(使用 crypto/rsa+ encoding/pem):

✅ C++ 实现(使用 OpenSSL):

✅ C# 实现(.NET) :

商户后台上传密钥说明:

✅ 补充说明

  1. 公钥必须是 X.509 格式的 RSA 公钥,Base64 编码字符串,和 Java 的 X509EncodedKeySpec 匹配。

  2. 所有语言的输出是 Base64 编码的密文字符串。

  3. 加密结果在跨语言中应保持一致,只要公钥和填充方式一致。

  4. 加密使用相同的算法(RSA/ECB/PKCS1Padding)和 Base64 编码

  5. 示例代码都是常见的库实现方案,涉及到代码调试不做技术支持,请自行解决。

  6. 加密的字段不是所有的请求参数是选择部分加密的,加起来长度不会超过245,不用分块

Last updated