2015-04-11 4 views
14

Я получаю нулевой ответ от Authorize.Net при попытке создать повторяющийся профиль с моего тестового сервера с использованием кредитной карты. это то, что я получаю на var_dump ($ ответ):Null Response from Authorize.net Автоматическое повторное выставление счетов (ARB)

object(AuthorizeNetARB_Response)#18 (2) { 
     ["xml"]=> 
     NULL 
     ["response"]=> 
     bool(false) 
    } 

Хотя он прекрасно работает, когда запрос сделан из локального хоста. var_dump ($ ответ) с локального хоста дает этот вывод:

object(AuthorizeNetARB_Response)#18 (3) { 
    ["xml"]=> 
    object(SimpleXMLElement)#19 (2) { 
    ["messages"]=> 
    object(SimpleXMLElement)#21 (2) { 
     ["resultCode"]=> 
     string(2) "Ok" 
     ["message"]=> 
     object(SimpleXMLElement)#22 (2) { 
     ["code"]=> 
     string(6) "I00001" 
     ["text"]=> 
     string(11) "Successful." 
     } 
    } 
    ["subscriptionId"]=> 
    string(7) "2382386" 
    } 
    ["response"]=> 
    string(401) "<?xml version="1.0" encoding="utf-8"?><ARBCreateSubscriptionResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"><messages><resultCode>Ok</resultCode><message><code>I00001</code><text>Successful.</text></message></messages><subscriptionId>2382386</subscriptionId></ARBCreateSubscriptionResponse>" 
    ["xpath_xml"]=> 
    object(SimpleXMLElement)#20 (2) { 
    ["messages"]=> 
    object(SimpleXMLElement)#21 (2) { 
     ["resultCode"]=> 
     string(2) "Ok" 
     ["message"]=> 
     object(SimpleXMLElement)#22 (2) { 
     ["code"]=> 
     string(6) "I00001" 
     ["text"]=> 
     string(11) "Successful." 
     } 
    } 
    ["subscriptionId"]=> 
    string(7) "2382386" 
    } 
} 

Не знаю, где может быть проблема. Пожалуйста, помогите

Вот код

Yii::import('application.vendor.anet_php_sdk.AuthorizeNet'); 
     Yii::import('application.vendor.anet_php_sdk.lib.*'); 
     Yii::import('application.vendor.anet_php_sdk.lib.shared.*'); 
     include('AuthorizeNetARB.php'); 
     include('shared/AuthorizeNetTypes.php'); 
     define("AUTHORIZENET_API_LOGIN_ID", Yii::app()->params['authorize_net_login_id']); 
     define("AUTHORIZENET_TRANSACTION_KEY", Yii::app()->params['authorize_net_transaction_key']); 
     define("AUTHORIZENET_SANDBOX", Yii::app()->params['authorize_net_sandbox_mode']); 
     define("AUTHORIZENET_MD5_SETTING",Yii::app()->params['authorize_net_login_id']); 

     $subscription       = new AuthorizeNet_Subscription; 
     $subscription->name     = "Monthly Subscription"; 
     $subscription->intervalLength   = "1"; 
     $subscription->intervalUnit   = "months"; 
     $subscription->startDate    = "$today"; 
     $subscription->totalOccurrences  = "$months"; 
     $subscription->amount     = "$amt"; 
     $subscription->creditCardCardNumber = "$card_number"; 
     $subscription->creditCardExpirationDate= "$card_expiration"; 
     $subscription->creditCardCardCode  = "$cvv_number"; 
     $subscription->billToFirstName   = "Happy"; 
     $subscription->billToLastName   = "User"; 

     // Create the subscription. 
     $request = new AuthorizeNetARB; 
     $response = $request->createSubscription($subscription); 
     $subscription_id = $response->getSubscriptionId(); 
     $status = $response->getResultCode(); 

     //var_dump($subscription); 
     var_dump($response);die; 
+0

Возможно ли подключить ваш сервер к песочнице? это не так. – rhldr

+0

@rhldr Да, это была ошибка соединения, но она отображалась в ответе ARB. Не знаете, почему? – manoj

ответ

12

получил его !!! Это была ошибка подключения. Получил ошибку, когда я попытался сделать платеж с AIM. Все еще не знаю, почему ошибка не была показана в ответе ARB. В любом случае, вот что я сделал

В /lib/shared/AuthorizeNetRequest.php

Изменено

public $VERIFY_PEER = true; 

в

public $VERIFY_PEER = false; 

И это сработало!

+0

Для тех, кто видит это быстрое исправление (и принятый ответ), любезно прочитайте другой ответ выше для правильного решения этой проблемы. Не проверка сертификата - плохая идея. Вы не хотите, чтобы какой-либо сервер мог разговаривать с вами, как с его authorize.net –

4

Я вижу, что вы нашли решение своей проблемы, но то, что вы сделали, есть плохая идея. Вы по существу отключили проверку сертификата SSL.

Конфигурация вашего сервера должна иметь список доверенных SSL-сертификатов, чтобы в будущем вы не столкнулись с этой проблемой. & все еще может проверять сертификаты.

Если у вас нет возможности изменять конфигурации сервера, вы можете скачать комплект CA из Mozilla & Подайте его, чтобы он завивался в вашем коде.

CA-Bundle URL: http://curl.haxx.se/ca/cacert.pem

Настройка его в вашем завиток легко следующим образом:

curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem'); 

Если у вас есть возможность использовать пользовательский файл php.ini или переопределение php в вашей системе, вы можете установить это глобально для PHP.

curl.cainfo=/path/to/cacert.pem