资金代付HTTP联动通知(MD5)验签文档

返回文档首页

说明

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

验签步骤

步骤1 首先需要接收交易HTTP联动通知数据.有两种格式一种是标准HTTP表单,一种是JSON,这里以JSON格式为例子,他们看起来像这样:
{
"MerchantID": "M05CED826F",
"TransferAccount": "xxxxxx@163.com",
"TransferAmount": "1.00",
"TransferBeginTime": "2020-05-25 18:57:11",
"TransferCustomParam": "NULL",
"TransferEndinTime": "2020-05-25 18:57:12",
"TransferMethod": "ALP",
"TransferNo": "F20200525185700775",
"TransferRealName": "%E8%92%8B%E4%B9%89%E5%9B%BD",
"TransferSignMode": "MD5",
"TransferSignature": "39001CBD73838F80C01AF67217560F8E",
"TransferStatus": "SUCCESS",
"TransferStatusDesc": "%E8%BD%AC%E8%B4%A6%E6%88%90%E5%8A%9F",
"TransferTimestamp": "20200525185713228",
"TransferToken": "20200525110070001506120055922309",
"TransferType": "LoginName"
}
每个参数都有Name和Value值,比如第一个参数Name是MerchantID,它的Value是M05CBEFE15
步骤2 首先排除TransferSignMode,TransferSignature这2个参数.
对其余其他参数以Name进行字母顺序的排序,用Name=Value的格式组合并用&符号连接起来.
得到待签名内容[SignatureContent]如下:
MerchantID=M05CED826F&TransferAccount=xxxxxx@163.com&TransferAmount=1.00&TransferBeginTime=2020-05-25 18:57:11&TransferCustomParam=NULL&TransferEndinTime=2020-05-25 18:57:12&TransferMethod=ALP&TransferNo=F20200525185700775&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=20200525185713228&TransferToken=20200525110070001506120055922309&TransferType=LoginName
步骤3 计算[SignatureContent]的MD5特征码得到[SignatureContentMD5]:
7A0336DB203628917C5A80CB1C5A966E
步骤4 MerchantPublicKey是您的商户公钥,可以在商户管理页面中导出获得
计算[MerchantPublicKey]的MD5特征码得到[MerchantPublicKeyMD5]:
<*商户公钥MD5保密*>
步骤5 组合[SignatureContentMD5]+#+[MerchantPublicKeyMD5]得到签名数据体[SignatureBody]
7A0336DB203628917C5A80CB1C5A966E#<*商户公钥MD5保密*>
步骤6 对[SignatureBody]进行MD5计算得到[Signature]:
39001CBD73838F80C01AF67217560F8E
步骤7 将[Signature]与[TransferSignature]值进行对比,如果相同则说明验签正确.反之则说明验签失败.
最终验签结果为:=正确=可以信赖此交易通知!

备注

代付HTTP联动MD5验签方式的特点是简单,但是并不安全.
它是利用了[MerchantPublicKey]的保密性来实现验签的.
在实际使用当中您应该对[MerchantPublicKey]做好保密工作,
适用于可控性私密性较强的个人场景.
如需商业环境使用请使用RSA_SHA256方式验签.