Нулевой ответ от 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;

8

Решение

Понял!!! Это была ошибка соединения. Ошибка при попытке оплаты через AIM. До сих пор не знаю, почему ошибка не была показана в ответе ARB. В любом случае, вот что я сделал

В /lib/shared/AuthorizeNetRequest.php

Изменено

public $VERIFY_PEER = true;

в

public $VERIFY_PEER = false;

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

6

Другие решения

Я вижу, что вы нашли решение для своей проблемы, но то, что вы сделали, — плохая идея. Вы по сути отключаете проверку 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
4

По вопросам рекламы [email protected]