2016-04-22 35 views
0

OmniPay APIを使用すると、2CheckoutからAuthorization Failed応答が返されます。2Checkout OmniPay - 認証に失敗しました

私は正常にOmniPayでStripeを接続していたので、2Checkoutを接続しました。あなたがそれをするとき、Githubの最初のパッケージはあなたにthe newer version from a user collizo4skyを得るように警告します。だから、私はやった、そしてそれは致命的なエラーなしでわずかに動作するようにした。

私のWebフォームでは、トークンを正しく生成し、2Checkoutのサンドボックスログでこれを確認しています。ただし、メッセージは、「認可は失敗しました」と戻ってくる

use Omnipay\Omnipay; 
$sMerchantTransID = rand(11111111,99999999); 
$oGateway = Omnipay::create('TwoCheckoutPlus_Token'); 
$oGateway->setPrivateKey($config->TWOCHECKOUT_PRIVATE_KEY); 
$oGateway->setAccountNumber($config->TWOCHECKOUT_SELLERID); 
$oGateway->setTestMode(true); 
$oResponse = $oGateway->purchase(array(
    'amount' => $sPrice, 
    'currency' => 'USD', 
    'token' => $sToken, 
    'transactionId' => $sMerchantTransID 
))->send(); 
if (!$oResponse->isSuccessful()) { 
    die('ERROR: ' . $oResponse->getMessage()); 
} 

:私は、カードを充電しようとするOmniPayにこのコードを使用します。だから、私は...このパスでcollizo4skyのパッケージのOmniPayのAPIのソースコードに

omnipay/vendor/collizo4sky/omnipay-2checkout/src/Message/TokenPurchaseRequest.php 

を行ってきました...とのsendData()クラスメソッドのいくつかのログファイルのデバッグを追加しました。これは、と答えたもので、私は明白なプライバシー上の理由のために値の一部を変更したことに注意してください:

array (
    'sellerId' => '901414261', 
    'privateKey' => 'EAEC8615-4C48-4D98-B7E5-4B6D8865E1BA', 
    'merchantOrderId' => 65639323, 
    'token' => 'FDI1ZTM3N2UtY2VkZS00NTM1LWE5MTctYzI4MjA5YWI4Yjhm', 
    'currency' => 'USD', 
    'total' => '519.00', 
) 

私は、生成パブリッシュキーが行ったようにはい、sellerIDとのPrivateKeyは、サンドボックスアカウントから来ました最初の場所でWebフォームのトークン。これは、サンドボックスのURLに提出されたときに

だから、とにかく、それはこのレスポンスを返す:私は間違って何をやっている

HTTP/1.1 400 Bad Request 
Server: Apache-Coyote/1.1 
Cache-Control: no-cache, no-store, must-revalidate 
Date: Fri, 22 Apr 2016 03:30:37 GMT 
Expires: 0 
Pragma: no-cache 
Content-Type: application/json;charset=UTF-8 
Transfer-Encoding: chunked 

{"validationErrors":null,"response":null,"exception":{"errorMsg":"Authorization Failed","httpStatus":"400","exception":false,"errorCode":"600"}} 

EDIT:

私は、彼らが提供する2Checkout-supported PHP libraryを使用してみました。私はまったく同じトランザクションを行い、それも "Authorization Failed"を返す。

サンドボックスを使用していてもアカウントの設定に問題がありますか?つまり、私はまだプロダクションで承認されておらず、デモを行うことができるようにサンドボックスを取得しようとしていました。

また、サンドボックスでAPIキーを再生成して再試行したところ、失敗しました。

私が使用したクレジットカードは、サンドボックスAPIキーの下でサンドボックスに提供したクレジットカードで、有効期限は12/18のCVV123を使用しました。私はそれから4桁の年が必要かもしれないと思ったので、それを更新してもう一度やり直してください。失敗したのは「Authorization Failed」と同じ一貫したエラーです。

「承認に失敗しました」の意味を確認すると、それが問題のクレジットカードであるように見えます。

これまでの私の感想は、私はすべて正しいことをしていると私のアカウントの旗であることを伝えています。つまり、通常のアカウントがまだ承認されていない場合でも、サンドボックスは機能しますか?

+0

。あなたが正しいことをしているように見えますが、それはあなたのアカウントのものでなければなりません。私はそれがカードだとは思わない、私は彼らがサンドボックスモードでカードを検証するとは思わない。 – delatbabel

+0

ベッドにぶつかる。修正はデモモードのパラメータでした。私はバックアップを取って数時間後に回答を掲示します。 – Volomike

答えて

2

トランザクションを取得できる唯一の方法は、[アカウント]> [サイト管理]のサンドボックス設定でデモモードを[オフ]に手動で設定し、少なくとも請求先住所を渡すことでした。私は、請求先住所の要件(デジタルダウンロード商品など)を持っていない方法を見つけたいと思っていますが、そのようなやり方を見つけていません。

デモモードを[オン]に設定し、請求先住所を送信しないと、トランザクションは正常に実行されますが、[販売]タブの販売としては表示されません。これはあまり有用ではありません。ライブに行くときには払い戻すことができる実際の販売が必要で、デモモードでは実際の請求をシミュレートしないため、そのカードの承認に過ぎません。 (少なくとも私が考え出したものです)

transactionIdパラメータでは、ここではショートカットを使用しました。あなたのシステムで(UNIX時間で生成されたいくつかの番号のように)それをユニークな番号にしてください。そうしないと、衝突する可能性があります。

電子メールだけ、電話だけ、またはその両方をコメントアウトしようとしたところ、うまくいきませんでした。「パラメータエラー」が表示されます。その後、cardbillingName,email,billingPostcodebillingCountry - のフィールドにのみ送信しようとしましたが、「パラメータエラー」でも失敗しました。それではbillingState - 「パラメータエラー」を追加しました。次に、billingCity - 「パラメータエラー」を追加しました。だから、トランザクションを通過させるために、誰かに私に設定のオーバーライドやテクニックを示すことができない限り、請求先住所が必要で、私の野生の驚きにも電子メールと電話を含める必要があります。それはデジタルダウンロードのような無形資産を売ろうとしている人たちのように、一部の人々のためのショーストッパーだと私は確信しています。また、official 2Checkout-created PHP APIを試してみましたが、これらのテストをもう一度やり直してみました。また、請求先の住所(電子メールと電話も含む)が利用されていない限り、「パラメータエラー」が返されました。 電子メールや請求先の電話番号も含めた請求先住所の全要件は、一部の企業にとっては痛手になるでしょう。

EDIT:This answer、私は右推測している場合は、2Checkout、自分自身で働く誰かからの正式な答えは?それは確かにそのように見える。とにかく、請求先住所は間違いなく必要とされていると、彼は述べています。「これは、銀行取引先の住所確認の要件です。

EDIT2:あなたは本物のトランザクションを実験する必要がありますが、私は、私はofficial 2Checkout PHP library、またはOmniPayでbillingPhonephoneNumberフィールドに空の文字列を渡す場合、少なくともサンドボックスモードで発見されましたAPIを使用すると、トランザクションは正常に実行されます。彼らは空にすることができますが、そのパラメータを見たいだけです。しかし、私がサンドボックスでしかやっていなかったように、ライブ取引でそれを試してみて(自分自身で払い戻して)、再確認してください。 This answerは2Checkout自体から正式に確認しているようです。

固定コード:私は2checkoutサポートに連絡するように誘惑されるだろう。この時点で

use Omnipay\Omnipay; 
$sMerchantTransID = rand(11111111,99999999); 
$oGateway = Omnipay::create('TwoCheckoutPlus_Token'); 
$oGateway->setPrivateKey($config->TWOCHECKOUT_PRIVATE_KEY); 
$oGateway->setAccountNumber($config->TWOCHECKOUT_SELLERID); 
$oGateway->setTestMode(true); // turns on Sandbox access 
$oResponse = $oGateway->purchase(array(
    'amount' => $sPrice, 
    'currency' => 'USD', 
    'token' => $sToken, 
    'transactionId' => $sMerchantTransID, 
    'card' => array(
     'billingName' => $sName, 
     'billingAddress1' => $sStreet1, 
     'billingAddress2' => $sStreet2, 
     'billingCity' => $sCity, 
     'billingState' => $sState, 
     'billingPostcode' => $sZip, 
     'billingCountry' => $sCountry, 
     'email' => $sEmail, 
     'billingPhone' => $sPhone 
    ) 
))->send(); 
if (!$oResponse->isSuccessful()) { 
    die('ERROR: ' . $oResponse->getMessage()); 
} 
+0

2Checkoutが失敗した場合(請求先住所の要件)、ストライプが優先されます。 Stripeでは、請求先住所を追加する必要はありません。 – Volomike

関連する問題