Php 将md5更新到SHANET

Php 将md5更新到SHANET,php,md5,payment-gateway,authorize.net,sha512,Php,Md5,Payment Gateway,Authorize.net,Sha512,我正在将DPM authorizenet的md5更新为sha512- 请帮帮我- 我不能让它工作 参见代码更改- 为x_hp_哈希生成指纹时- 从md5- if (function_exists('hash_hmac')) { return hash_hmac("md5", $api_login_id . "^" . $fp_sequence . "^" . $fp_timestamp . "^" . $amount . "^", $transaction_key); } return

我正在将DPM authorizenet的md5更新为sha512- 请帮帮我-

我不能让它工作

参见代码更改-

为x_hp_哈希生成指纹时-

从md5-

if (function_exists('hash_hmac')) {

return hash_hmac("md5", $api_login_id . "^" . $fp_sequence . "^" .

 $fp_timestamp . "^" . $amount . "^", $transaction_key); 
}

return bin2hex(mhash(MHASH_MD5, $api_login_id . "^" . $fp_sequence . "^" . $fp_timestamp . "^" . $amount . "^", $transaction_key));
至sha512-

$signature_key = hex2bin($signature_key);

if (function_exists('hash_hmac')) {

return hash_hmac("sha512", $api_login_id . "^" . $fp_sequence . "^" .

 $fp_timestamp . "^" . $amount . "^", $signature_key); 

}

return bin2hex(mhash(MHASH_SHA512, $api_login_id . "^" . $fp_sequence . "^" . $fp_timestamp . "^" . $amount . "^", $signature_key));
$this->signature_key = hex2bin($this->signature_key);

$string = '^'.$this->api_login_id.'^'.$this->transaction_id.'^'.$amount.'^';

if(strtoupper(HASH_HMAC('sha512', $string, $this->signature_key)) == $this->SHA2_Hash){
  //valid

} else{
  //not valid

}
获取响应并比较x_sha_散列值时 来自md5-

if(strtoupper(md5($this->md5_setting . $this->api_login_id . $this

->transaction_id . $amount)) == $this->md5_hash){
        //valid
 } else{
        //not valid
 }
改为sha512-

$signature_key = hex2bin($signature_key);

if (function_exists('hash_hmac')) {

return hash_hmac("sha512", $api_login_id . "^" . $fp_sequence . "^" .

 $fp_timestamp . "^" . $amount . "^", $signature_key); 

}

return bin2hex(mhash(MHASH_SHA512, $api_login_id . "^" . $fp_sequence . "^" . $fp_timestamp . "^" . $amount . "^", $signature_key));
$this->signature_key = hex2bin($this->signature_key);

$string = '^'.$this->api_login_id.'^'.$this->transaction_id.'^'.$amount.'^';

if(strtoupper(HASH_HMAC('sha512', $string, $this->signature_key)) == $this->SHA2_Hash){
  //valid

} else{
  //not valid

}
我做错了什么? 在我端验证事务时,它表示请检查您的md5设置。它根据代码段中显示的最后一段代码进行验证

我的签名密钥=E284BDC12A45A7F5B0933A352EB1C3F25E91A3B92360693D94E4366190EF12E78F6CFE8601751F719DA7A72ABA117BF0161F8A1DD894ADE3C56A838D8355AD

x_hp_hash使用第二个代码段(即sha512指纹)提交 x_hp_hash=b4c9e1878f88aa9c4f808761ed8ceee71ab117cc0f1297b2d850e28351f08fc52bd528a7538c832568c674a1d5095ead1a5383a626c9797587ab16bae76e45fb

提交答复后-

X_SHA2_Hash-19AB7947709CF6CB2B8415784EBD7669FCDE5D83B69EC8C716203806A3235308187668F5783F9CA0F1AE8A47808EDAB24025A8AF61A2FABC27FA6AAA8FFD8

生成的哈希代码- 3E6427E67271B1F0732D3D95217D25EE4D7C4103C906A6CB70943498698157F48F7E5393CF2A489B464070A778F15757385E8F29029CFC366256F05

使用上面的最后一个片段

所以这些不相等,所以不是有效的事务。

我让它工作起来了

多亏了

而不是只使用以下三个字段

$api\u登录\u id
$transaction\u id
美元金额

我必须使用以下所有字段,请参见-

$hashData = implode('^', [
$_POST['x_trans_id'],
$_POST['x_test_request'],
$_POST['x_response_code'],
$_POST['x_auth_code'],
$_POST['x_cvv2_resp_code'],
$_POST['x_cavv_response'],
$_POST['x_avs_code'],
$_POST['x_method'],
$_POST['x_account_number'],
$_POST['x_amount'],
$_POST['x_company'],
$_POST['x_first_name'],
$_POST['x_last_name'],
$_POST['x_address'],
$_POST['x_city'],
$_POST['x_state'],
$_POST['x_zip'],
$_POST['x_country'],
$_POST['x_phone'],
$_POST['x_fax'],
$_POST['x_email'],
$_POST['x_ship_to_company'],
$_POST['x_ship_to_first_name'],
$_POST['x_ship_to_last_name'],
$_POST['x_ship_to_address'],
$_POST['x_ship_to_city'],
$_POST['x_ship_to_state'],
$_POST['x_ship_to_zip'],
$_POST['x_ship_to_country'],
$_POST['x_invoice_num'],
]);
$hash = hash_hmac('sha512', '^'.$hashData.'^', hex2bin($signatureKey)); 
$hash = strtoupper($hash);
if($this->SHA2_Hash === $hash) {
  //valid
}
因此,请使用authorize.net中的所有x_字段生成hashcode

我让它工作起来了

多亏了

而不是只使用以下三个字段

$api\u登录\u id
$transaction\u id
美元金额

我必须使用以下所有字段,请参见-

$hashData = implode('^', [
$_POST['x_trans_id'],
$_POST['x_test_request'],
$_POST['x_response_code'],
$_POST['x_auth_code'],
$_POST['x_cvv2_resp_code'],
$_POST['x_cavv_response'],
$_POST['x_avs_code'],
$_POST['x_method'],
$_POST['x_account_number'],
$_POST['x_amount'],
$_POST['x_company'],
$_POST['x_first_name'],
$_POST['x_last_name'],
$_POST['x_address'],
$_POST['x_city'],
$_POST['x_state'],
$_POST['x_zip'],
$_POST['x_country'],
$_POST['x_phone'],
$_POST['x_fax'],
$_POST['x_email'],
$_POST['x_ship_to_company'],
$_POST['x_ship_to_first_name'],
$_POST['x_ship_to_last_name'],
$_POST['x_ship_to_address'],
$_POST['x_ship_to_city'],
$_POST['x_ship_to_state'],
$_POST['x_ship_to_zip'],
$_POST['x_ship_to_country'],
$_POST['x_invoice_num'],
]);
$hash = hash_hmac('sha512', '^'.$hashData.'^', hex2bin($signatureKey)); 
$hash = strtoupper($hash);
if($this->SHA2_Hash === $hash) {
  //valid
}

因此,使用authorize.net中的所有x_字段生成hashcode

您看到了哪些错误?这里的问题是什么?回答这个问题,并确保清楚地知道你想做什么,以及你得到了什么结果。提示:如果您在更改之前进行了单元测试,您将有一些基线用于稍后中断的部分。@jdv我已更新了我的问题。请看一下您看到了哪些错误?这里的问题是什么?回答这个问题,并确保清楚地知道你想做什么,以及你得到了什么结果。提示:如果您在更改之前进行了单元测试,您将有一些基线用于稍后中断的部分。@jdv我已更新了我的问题。请看一看Vikas,您在第一个示例中使用了运算符“==”,但在第二个示例中使用了运算符“==”,这可能会有所不同。比较哈希时,建议使用“==”。Vikas,您在第一个示例中使用了运算符“==”,但在第二个示例中使用了运算符“==”,这可能会有所不同。比较哈希时,建议使用“==”。