Authorize.Net SHA512 проблема с проверкой хеша - PullRequest
0 голосов
/ 11 июля 2019

Я получаю другой хэш после оплаты через Authorize.Net DPM. Это работало раньше, но с последних 1-2 дней это не работает. Я использую следующую функцию для генерации отпечатка пальца для x_hp_hash -

$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));

и хеш сравнивать после оплаты -

 $hashFields =  [
                $_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'],
            ];
  $hashString = '^'.implode('^', $hashFields).'^';
  $signature_key = hex2bin($signature_key);
  $generatedhash = strtoupper(HASH_HMAC('sha512', $hashString, $signature_key));

  if (function_exists('hash_equals')) {
      $equals = hash_equals($_POST['x_SHA2_Hash'], $generatedhash);
  } else {
      $equals = $_POST['x_SHA2_Hash'] === $generatedhash;
  }
  if($equals) {
      //valid
  } else{
      //not valid
  }

Всегда давать недействительно. Это работало раньше. Я обновил этот код в начале января 2019 года, и с тех пор он работал.

значения $ _POST для среды тестирования -

Array
(
    [x_response_code] => 1
    [x_response_reason_code] => 1
    [x_response_reason_text] => (TESTMODE) This transaction has been approved.
    [x_avs_code] => P
    [x_auth_code] => 000000
    [x_trans_id] => 0
    [x_method] => CC
    [x_card_type] => MasterCard
    [x_account_number] => XXXX5100
    [x_first_name] => Vikk
    [x_last_name] => kkk
    [x_company] => kkk
    [x_address] => kkk
    [x_city] => kkk
    [x_state] => kkk
    [x_zip] => 98979
    [x_country] => nn
    [x_phone] => 
    [x_fax] => 
    [x_email] => 
    [x_invoice_num] => 
    [x_description] => description givne
    [x_type] => auth_capture
    [x_cust_id] => 
    [x_ship_to_first_name] => 
    [x_ship_to_last_name] => 
    [x_ship_to_company] => 
    [x_ship_to_address] => 
    [x_ship_to_city] => 
    [x_ship_to_state] => 
    [x_ship_to_zip] => 
    [x_ship_to_country] => 
    [x_amount] => 5.69
    [x_tax] => 0.00
    [x_duty] => 0.00
    [x_freight] => 0.00
    [x_tax_exempt] => FALSE
    [x_po_num] => 
    [x_MD5_Hash] => 
    [x_SHA2_Hash] => C0E2B949E5C80F5634380CF8DB8CE3EDD5EF5DF1AB1BB819F1120142F92C7B7684EE775502E410538F8A005CFF4249090F18A38B43A7D4859AFBA0009A6A5A29
    [x_cvv2_resp_code] => 
    [x_cavv_response] => 
    [x_test_request] => true
    [payment_mode] => dpm
    [x_current_url] => www.websiteurl.com
    [x_final_url] => www.websiteurl.com
   )
...