首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EBS支付网关:安全哈希算法

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

Stack Overflow用户
提问于 2015-09-22 18:52:46
回答 1查看 1K关注 0票数 1

我对你计算哈希的方法有点困惑。集成指南和一些集成工具包从所有已排序的参数中进行计算(PHP工具包已将这部分代码注释掉)。但是,PHP集成工具包和一些在线教程只从其中几个(密钥、帐户id、金额、订单、返回url和模式)计算请求散列,并且实际工作。

我在寻找关于这种状况的解释。

此外,我在计算响应散列时也遇到了一些困难。

代码语言:javascript
复制
$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。

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-27 20:53:43

请求

到目前为止,从密钥、帐户id、金额、引用号、返回url和模式中计算请求散列似乎是正确的方法。

代码语言:javascript
复制
$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}‘

代码语言:javascript
复制
$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捐赠集成工具包文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32724694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档