我对你计算哈希的方法有点困惑。集成指南和一些集成工具包从所有已排序的参数中进行计算(PHP工具包已将这部分代码注释掉)。但是,PHP集成工具包和一些在线教程只从其中几个(密钥、帐户id、金额、订单、返回url和模式)计算请求散列,并且实际工作。
我在寻找关于这种状况的解释。
此外,我在计算响应散列时也遇到了一些困难。
$data = $config['secretKey'];
$hash = $params['SecureHash'];
unset($params['SecureHash']);
ksort($params);
foreach ($params as $param) {
if (strlen($param) > 0) {
$data .= '|' . $param;
};
}
$data = hash($config['hashAlgoritm'], $data); // The same hash algorithm used for request
return $data == $hash;而且,响应似乎不包含AccountID。
ResponseCode = '0'
ResponseMessage = 'Transaction Successful'
DateCreated = '2015-09-23 00:18:15'
PaymentID = '42609232'
MerchantRefNo = '223'
Amount = '1.00'
Mode = 'TEST'
BillingName = 'John Raj'
BillingAddress = 'Arcot Road'
BillingCity = 'Chennai'
BillingState = 'Tamil Nadu'
BillingPostalCode = '600001'
BillingCountry = 'IND'
BillingPhone = '04423452345'
BillingEmail = 'test@40test.test'
DeliveryName = 'John Esak'
DeliveryAddress = 'Arcot Road'
DeliveryCity = 'Chennai'
DeliveryState = 'Tamil Nadu'
DeliveryPostalCode = '600001'
DeliveryCountry = 'IND'
DeliveryPhone = '04423452345'
Description = 'Test Order Description'
IsFlagged = 'NO'
TransactionID = '110978476'
PaymentMethod = '1001'
RequestID = '7331147'
SecureHash = 'f9101f3cbf53be4da75e51c208775953'发布于 2015-09-27 20:53:43
请求
到目前为止,从密钥、帐户id、金额、引用号、返回url和模式中计算请求散列似乎是正确的方法。
$hashData = 'The secret key';
$hashType = 'md5'; // md5|sha1|sha250
$hash .= "|" . urlencode($params['account_id']) . "|"
. urlencode($params['amount']) . "|"
. urlencode($params['reference_no']) . "|"
. $params['return_url'] . "|"
. urlencode($params['mode']);
return hash($hashType, $hashData);响应
至于响应,我无法重建应该计算安全散列的方式,或者即使安全散列应该被完全用于验证。因此,我转而使用加密版本的响应。
EBS没有指定应该使用哪种算法,但它会使人感到它是某种RC4密码。
要使用加密的响应,返回url必须按照知识库中指定的格式抱怨:'http://www.yourdomainname.com/response.extension?DR={DR}‘
$DR = preg_replace("/\s/","+",$_GET['DR']);
$rc4 = new Crypt_RC4($secret_key);
$QueryString = base64_decode($DR);
$rc4->decrypt($QueryString);
$QueryString = explode('&',$QueryString);
$response = array();
foreach($QueryString as $param){
$param = explode('=',$param);
$response[$param[0]] = urldecode($param[1]);
}
return $response然后,Crypt_RC43类由EBS在Rc43文件中提供,后者是集成工具包的一部分。
注意: Rc43文件并不是每个集成工具包的一部分。有些工具包甚至将Crypt_RC43类作为控制器的私有内部类。对于我的实现,我使用了包含在Rc43中的Wordpress-3.7.x捐赠集成工具包文件。
https://stackoverflow.com/questions/32724694
复制相似问题