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