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

EBS payment gateway: secure hash algorithm

我对您计算散列的方式有点困惑。集成指南和一些集成工具包根据所有排序的参数进行计算(PHP 工具包已将这部分代码注释掉)。然而,PHP 集成工具包和一些在线教程仅从其中几个(密钥、帐户 ID、金额、订单、return 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'

请求

到目前为止,从密钥、帐户 ID、金额、参考号、return 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 密码。

要使用加密响应,return url 必须抱怨 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 class 然后由 EBS 在 Rc43 文件 中提供,它是集成套件。

注意:Rc43 文件不是每个集成工具包的一部分。一些套件甚至包括 Crypt_RC43 class 作为控制器的私有内部 class。对于我的实现,我使用了 Wordpress-3.7.x Donate integration kit.

中包含的 Rc43 文件