原力支付-退款HTTP联动通知(MD5)验签文档

返回文档首页

说明

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

验签步骤

步骤1 首先需要接收交易HTTP联动通知数据.有两种格式一种是标准HTTP表单,一种是JSON,这里以JSON格式为例子,他们看起来像这样:
"MerchantID": "M05CBEFE15",
"ProductID": "P05CC449F5",
"RefundActual": "0.30",
"RefundAmount": "0.30",
"RefundBeginTime": "2019-04-29 16:33:31",
"RefundCustomParam": "NULL",
"RefundEndinTime": "2019-04-29 16:33:36",
"RefundNo": "R20190429163329991",
"RefundReason": "REFUND",
"RefundSignMode": "MD5",
"RefundSignature": "50733AFB21B1B86B057FB15A8E884221",
"RefundStatus": "REFUND_SUCCESS",
"RefundTimestamp": "20190429163337532",
"TradeNo": "T20190429161256258"
}
每个参数都有Name和Value值,比如第一个参数Name是MerchantID,它的Value是M05CBEFE15
步骤2 首先排除RefundSignMode,RefundSignature这2个参数.
对其余其他参数以Name进行字母顺序的排序,用Name=Value的格式组合并用&符号连接起来.
得到待签名内容[SignatureContent]如下:
MerchantID=M05CBEFE15&ProductID=P05CC449F5&RefundActual=0.30&RefundAmount=0.30&RefundBeginTime=2019-04-29 16:33:31&RefundCustomParam=NULL&RefundEndinTime=2019-04-29 16:33:36&RefundNo=R20190429163329991&RefundReason=REFUND&RefundStatus=REFUND_SUCCESS&RefundTimestamp=20190429163337532&TradeNo=T20190429161256258
步骤3 计算[SignatureContent]的MD5特征码得到[SignatureContentMD5]:
B032D6BD051AE0FAC4681253C66635F3
步骤4 MerchantPublicKey是您的商户公钥,可以在商户管理页面中导出获得
计算[MerchantPublicKey]的MD5特征码得到[MerchantPublicKeyMD5]:
773D5FA18C0CEB6637600CBBCFB28E66
步骤5 组合[SignatureContentMD5]+#+[MerchantPublicKeyMD5]得到签名数据体[SignatureBody]
B032D6BD051AE0FAC4681253C66635F3#773D5FA18C0CEB6637600CBBCFB28E66
步骤6 对[SignatureBody]进行MD5计算得到[Signature]:
50733AFB21B1B86B057FB15A8E884221
步骤7 将[Signature]与[TradeSignature]值进行对比,如果相同则说明验签正确.反之则说明验签失败.
最终验签结果为:=正确=可以信赖此交易通知!

备注

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