EBS支付网关:安全哈希算法

时间:2015-09-22 18:52:47

标签: php payment-gateway

我对你应该计算哈希的方式感到有点困惑。集成指南和一些集成工具包从所有已排序的参数计算(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'

1 个答案:

答案 0 :(得分:0)

请求

到目前为止,从秘密密钥,帐户ID,金额,参考编号,返回网址和模式计算请求哈希似乎是正确的方法。

$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密码。

要使用加密回复,返回网址必须按照knowledgebase中指定的格式投诉:“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类作为控制器的私有内部类。对于我的实现,我使用了Wordpress-3.7.x Donate integration kit中包含的Rc43文件。