【发布时间】:2014-05-05 19:30:11
【问题描述】:
我正在尝试使用 PHP 和协议文档集成到 SagePay。但是我的 MD5 哈希似乎有问题!
在我们收到通知 POST 之前的一切都很好。但是,当我们去验证签名时,它与通知 POST 中的签名不匹配???然而,我已经按照文件的要求进行了四次检查。除了更改文档范围之外的内容之外,还认为可能存在错字等..????非常感谢任何帮助!!!
A2:在第一次 POST 时确认响应。
3.00,OK,2014 : The Transaction was Registered Successfully.,{4483C552-6078-6D1C-E37C-294B89DB1DCA},O9WQNAKEHJ,<https://test.sagepay.com/gateway/service/cardselection?vpstxid={4483C552-6078-6D1C-E37C-294B89DB1DCA}>
A3:通知 POST 到回调。
VPSProtocol,TxType,VendorTxCode,VPSTxId,Status,StatusDetail,TxAuthNo,AVSCV2,AddressResult,PostCodeResult,CV2Result,GiftAid,3DSecureStatus,CAVV,CardType,Last4Digits,VPSSignature,DeclineCode,ExpiryDate,BankAuthCode
3.00,DEFERRED,m-5367c2da33a72,{4483C552-6078-6D1C-E37C-294B89DB1DCA},OK,0000 : The Authorisation was Successful.,6953629,SECURITY CODE MATCH ONLY,NOTMATCHED,NOTMATCHED,MATCHED,0,OK,AAABARR5kwAAAAAAAAAAAAAAAAA=,VISA,0006,CB2EFFBC5A872B26DA0AA50F85DD1FEA,00,0115,999777
我基于此构建字符串:
$string = $this->getSagePayTxID()
.$this->getVendorTxCode()
.$this->getSagePayStatus()
.$this->getTxAuthNo()
.SAGEPAY_VENDOR
.$this->getAVSCV2()
.$this->getSecurityKey()
.$this->getAddressResult()
.$this->getPostCodeResult()
.$this->getCV2Result()
.$this->getGiftAid()
.$this->get3DSecureStatus()
.$this->getCAVV()
.$this->getCardType()
.$this->getLast4Digits()
.$this->getDeclineCode()
.$this->getExpiryDate()
.$this->getFraudResponse()
.$this->getBankAuthCode();
if($signature == strtoupper(md5($string)))
{
return TRUE;
}
else
{
return FALSE;
}
产生的字符串是这样的:
{4483C552-6078-6D1C-E37C-294B89DB1DCA}m-5367c2da33a72OK6953629atbristolltdSECURITY CODE MATCH ONLYO9WQNAKEHJNOTMATCHEDNOTMATCHEDMATCHED0OKAAABARR5kwAAAAAAAAAAAAAAAAA=VISA0006000115999777
感谢您的帮助!!!
【问题讨论】:
-
您是否确定 (1) 供应商名称是小写的并且 (2) 您正在对从 SagePay 返回的数据进行 url 解码,例如字符串中应包含“ALL+MATCH” as 'ALL MATCH' (3) 在对字符串进行哈希处理之前删除所有花括号#