Null Response от Authorize.net Автоматическое повторное выставление счетов (ARB)

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

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

Пока он работает отлично, когда запрос сделан из localhost. var_dump ($ response) из localhost дает этот результат:

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;

Ответы

Ответ 1

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

В/lib/shared/AuthorizeNetRequest.php

Изменено

public $VERIFY_PEER = true;

к

public $VERIFY_PEER = false;

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

Ответ 2

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

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

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

URL-адрес CA-Bundle: 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