2017-03-19 85 views
1

這是我第一次嘗試使用Authorize.net。我認爲這很簡單,但在示例代碼中沒有太多內容。 我想使用在authorize.net服務器上託管的表單。Authorize.net使用php的SIM卡

首先,我對指紋感到困惑。我使用交易密鑰還是簽名密鑰?

無論使用事務密鑰還是簽名密鑰,我都會得到相同的錯誤。我得到這個錯誤代碼:(99)此事務不能被接受。

  date_default_timezone_set("UTC"); 
      $xyz_x_fp_timestamp = time() ; 
      $xyz_x_fp_sequence = $xyz_x_fp_timestamp - 1489881251 ;//this will generate a unique number every second 

      $xyz_x_login = '123123123123'; 
      $xyz_x_amount = 25.00; 
      $my_key = '222222222222222222222222'; 

      $hash_input = $xyz_x_login.'^'.$xyz_x_fp_timestamp.'^'.$xyz_x_fp_sequence.'^'.$xyz_x_amount.'^'; 
      $xyz_x_fp_hash = hash_hmac('sha512', $hash_input ,$my_key); 
      ?> 
    <div class="entry-content"> 
    <form method="post" action="https://secure.authorize.net/gateway/transact.dll"> 

    <input type="hidden" name="x_login" value="<?php echo $xyz_x_login; ?>" > 
    <input type="hidden" name="x_show_form" value="PAYMENT_FORM" > 
    <input type="hidden" name="x_type" value="AUTH_CAPTURE" > 
    <input type="hidden" name="x_fp_hash" value="<?php echo $xyz_x_fp_hash; ?>" > 
    <input type="hidden" name="x_fp_sequence" value="<?php echo $xyz_x_fp_sequence; ?>" > 
    <input type="hidden" name="x_fp_timestamp" value="<?php echo $xyz_x_fp_timestamp; ?>" > 
    <input type="hidden" name="x_amount" value="<?php echo $xyz_x_amount; ?>" > 
    <p><br/><br/><input class="button" type="submit" name="submit" value="Pay $<?php echo $xyz_x_amount; ?> Now" ><br/></p> 
    </form> 

回答

1

指紋需要MD5而不是SHA512。它使用您的交易密鑰。

$xyz_x_fp_hash = hash_hmac('md5', sprintf('%s^%s^%s^%s^', 
    $xyz_x_login, 
    $xyz_x_fp_sequence, 
    $xyz_x_fp_timestamp, 
    $xyz_x_amount 
), $my_key); 

Official Documentation

有兩點要注意:

  1. 你並不需要設置爲使用time()的時區。它總是返回當前的Unix時間戳,它總是以UTC(即時區獨立)。

  2. 你的隨機數實際上並不隨機。生成隨機序列的一種稍好的方法是使用rand()。對於非常敏感的應用程序,它有其自身的侷限性,但在此應用程序中運行良好($xyz_x_fp_sequence = rand(0, 10000);

<?php 
    $xyz_x_fp_timestamp = time() ; 
    $xyz_x_fp_sequence = rand(1, 10000); 
    $xyz_x_login  = '123123123123'; 
    $xyz_x_amount  = 25.00; 
    $my_key    = '222222222222222222222222'; 
    $xyz_x_fp_hash = hash_hmac('md5', sprintf('%s^%s^%s^%s^', 
     $xyz_x_login, 
     $xyz_x_fp_sequence, 
     $xyz_x_fp_timestamp, 
     $xyz_x_amount 
    ), $my_key); 
?> 
    <div class="entry-content"> 
    <form method="post" action="https://secure.authorize.net/gateway/transact.dll"> 

    <input type="hidden" name="x_login" value="<?php echo $xyz_x_login; ?>" > 
    <input type="hidden" name="x_show_form" value="PAYMENT_FORM" > 
    <input type="hidden" name="x_type" value="AUTH_CAPTURE" > 
    <input type="hidden" name="x_fp_hash" value="<?php echo $xyz_x_fp_hash; ?>" > 
    <input type="hidden" name="x_fp_sequence" value="<?php echo $xyz_x_fp_sequence; ?>" > 
    <input type="hidden" name="x_fp_timestamp" value="<?php echo $xyz_x_fp_timestamp; ?>" > 
    <input type="hidden" name="x_amount" value="<?php echo $xyz_x_amount; ?>" > 
    <p><br/><br/><input class="button" type="submit" name="submit" value="Pay $<?php echo $xyz_x_amount; ?> Now" ><br/></p> 
    </form> 
+0

非常感謝!這工作! – PeggyMe

+1

如果這有助於您確定[接受我的答案爲正確](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –