2017-01-10 5 views
0

Authorize.netのSIMでクレジットカード処理を実装していますので、私のサイトはAuthorize.netの支払いフォームに送信されます。私は "(99)この取引は受け入れることができません"と私はなぜか分からない。Authorize.netのPHP統合でエラー99を修正する方法

ここでは、これを処理するために一緒に投げたコードのコアを示します。ここで計算された値(キーを除く)は、入力されたフォームのinput [type = hidden]要素に入れられます。

<?php 
date_default_timezone_set("America/New_York"); 
$login = "XXX"; //A 12-character string 
$sequenceNumber = $orderId; //equals 22 
$timestamp = time(); 
$amount = $cost; // Equals 53.18 
$key = "XXX"; //A 128-character string 
$x_fp_hash = bin2hex(hash_hmac("sha512","$login^$sequenceNumber^$timestamp^$amount^USD",$key)); 
?> 

私のアカウントでは、Authorize.netのオンラインインターフェイスから$ keyと$ loginが取得されています。

エラー99が表示されています。これは、ハッシュが自分の考えているものと一致していないことを示しています。私はこれにいくつかのバリエーションを試して、それを動作させることはできません。誰かが洞察力を持っていますか?

問題を複雑にするために、私が参照しているすべてのヘルプ資料は「トランザクションキー」について語っていますが、official developer guide pdfは「署名キー」のみを参照しています。上記の "$ key"の場合、私は署名キーを使用するように思えますが、両方を試しました。開発者ガイドでは特にsha512の使用が記載されていますが、多くのオンラインディスカッションではmd5を参照しているため、混乱しています。

私は署名キーを使用する権利があります。私はそれを正しく使用していますか、私がハッシュを生成している方法に何か間違った点を見つけることができますか?

答えて

0

最初にキーをパックしなければならなかったことが分かります。次のコードは重要なビットが最終行であるように動作しました。

<?php 
    $x_login = "XXX"; 

    // Where you define orderId as you want 
    $x_fp_sequence = $orderId; 

    date_default_timezone_set("America/New_York"); 
    $x_fp_timestamp = time(); 

    // Where you define costTotal (and ensure that it always has two decimal digits 
    $x_amount = $costTotal; 

    //Instead of XXX this was the 128-character Signature Key as provided by Authorize.net online interface 
    $sig_key = "XXX"; 
    $x_fp_hash = hash_hmac("sha512","$x_login^$x_fp_sequence^$x_fp_timestamp^$x_amount^USD",pack("H*", $sig_key)); 
?> 
関連する問題