资金代付HTTP联动通知(RSA_SHA256)验签

返回文档首页

说明

此文档描述了当收到以RSA_SHA256验签方式的资金代付HTTP联动通知数据后,如何对通知数据进行验签,以此判断通知数据是否可信.
您也可以在启动支付服务后,访问http://<支付服务地址端口>/transfersignpage.csp来手工验签并查看验签步骤
您还可以通过ForcePaySDK使用本地的API进行验证

验签步骤

步骤1 首先需要接收资金代付HTTP联动通知数据.有两种格式一种是标准HTTP表单,一种是JSON,这里以JSON格式为例子,他们看起来像这样:
{
"MerchantID": "M05CED826F",
"TransferAccount": "xxxxxx@163.com",
"TransferAmount": "1.00",
"TransferBeginTime": "2020-05-25 15:33:44",
"TransferCustomParam": "NULL",
"TransferEndinTime": "2020-05-25 15:33:45",
"TransferMethod": "ALP",
"TransferNo": "F20200525153336491",
"TransferRealName": "%E8%92%8B%E4%B9%89%E5%9B%BD",
"TransferSignMode": "RSA_SHA256",
"TransferSignature": "XXXXXXXX",
"TransferStatus": "SUCCESS",
"TransferStatusDesc": "%E8%BD%AC%E8%B4%A6%E6%88%90%E5%8A%9F",
"TransferTimestamp": "20200525153346235",
"TransferToken": "20200525110070001506120055906865",
"TransferType": "LoginName" }
每个参数都有Name和Value值,比如第一个参数Name是MerchantID,它的Value是M05CBEFE15
步骤2 首先首先排除TransferSignMode,TransferSignature这2个参数.
对其余其他参数以Name进行字母顺序的排序,用Name=Value的格式组合并用&符号连接起来.r /> 得到得到待签名内容[SignatureContent]如下:
MerchantID=M05CED826F&TransferAccount=xxxxxx@163.com&TransferAmount=1.00&TransferBeginTime=2020-05-25 15:33:44&TransferCustomParam=NULL&TransferEndinTime=2020-05-25 15:33:45&TransferMethod=ALP&TransferNo=F20200525153336491&TransferRealName=%E8%92%8B%E4%B9%89%E5%9B%BD&TransferStatus=SUCCESS&TransferStatusDesc=%E8%BD%AC%E8%B4%A6%E6%88%90%E5%8A%9F&TransferTimestamp=20200525153346235&TransferToken=20200525110070001506120055906865&TransferType=LoginName
步骤3td> 计算[计算[SignatureContent]的MD5特征码得到[SignatureContentMD5]:
657F1301BE4BAA53A8DAE0544113D001
步骤4 对TransferSignature参数进行URL Decode解码,得到[TransferSignatureBase64]: dYpZxcRPChSWC7h+SJ8D2UmafJiHzoUL9liG5DB5EJRPLOei88C6b6SH+/I3nQ5ACdka60F5+nR4ru3pJrCmuK/RPvFif9RYjUIBuBLGzUQ1rnVcwNme9evvNfxMLZqZMrS5zz2QANf9UQ+/vERR8b9JZdGgI5fQ0WfVTP3RNH6ixZWptacdMSwnqoKeczPNIuTqRbLLp297cPPYAmAgUG42VEgfeVmZfXUbXv0jtVcmvZYdFKRj3sDLKsgfDFqCOsuP29wj/cXb9rpT5M3cwN57LmbmPWlesH/c7ZXqdRlbsiY3K8o+yscltB3r+N82Rx75LHlfFTzku/e6OoidVg==
步骤5 对[TransferSignatureBase64]进行Base64解码,得到[TransferSignatureBrinary]: 这是长度为:256的二进制RSA_SH256签名数据 75 8A 59 C5 C4 4F 0A 14 96 0B B8 7E 48 9F 03 D9 49 9A 7C 98 87 CE 85 0B F6 58 86 E4 30 79 10 94 4F 2C E7 A2 F3 C0 BA 6F A4 87 FB F2 37 9D 0E 40 09 D9 1A EB 41 79 FA 74 78 AE ED E9 26 B0 A6 B8 AF D1 3E F1 62 7F D4 58 8D 42 01 B8 12 C6 CD 44 35 AE 75 5C C0 D9 9E F5 EB EF 35 FC 4C 2D 9A 99 32 B4 B9 CF 3D 90 00 D7 FD 51 0F BF BC 44 51 F1 BF 49 65 D1 A0 23 97 D0 D1 67 D5 4C FD D1 34 7E A2 C5 95 A9 B5 A7 1D 31 2C 27 AA 82 9E 73 33 CD 22 E4 EA 45 B2 CB A7 6F 7B 70 F3 D8 02 60 20 50 6E 36 54 48 1F 79 59 99 7D 75 1B 5E FD 23 B5 57 26 BD 96 1D 14 A4 63 DE C0 CB 2A C8 1F 0C 5A 82 3A CB 8F DB DC 23 FD C5 DB F6 BA 53 E4 CD DC C0 DE 7B 2E 66 E6 3D 69 5E B0 7F DC ED 95 EA 75 19 5B B2 26 37 2B CA 3E CA C7 25 B4 1D EB F8 DF 36 47 1E F9 2C 79 5F 15 3C E4 BB F7 BA 3A 88 9D 56
步骤6 通过RSA_SH256验签算法进行验签
签名的内容数据为[SignatureContentMD5]:
657F1301BE4BAA53A8DAE0544113D001
待验证的签名数据为[TransferSignatureBrinary]: (见之前解码获得)
用于验证签名使用的商户公钥MD5为:
<*商户公钥MD5保密*>
最终验签结果为:=正确=可以信赖此代付通知!

备注

资金代付HTTP联动RSA_SHA256验签方式较为复杂,但是采用了2048位的高强度非对称加密,
它是可靠且安全.您不必担心商户公钥泄露,这不会影响验签安全性. />适用各种商业环境.