【问题标题】:Null Response from Authorize.net Automatic Recurrent Billing(ARB)Authorize.net 自动循环计费 (ARB) 的空响应
【发布时间】:2015-06-16 22:08:52
【问题描述】:

当我尝试使用信用卡从我的测试服务器创建重复配置文件时,我收到来自 Authorize.Net 的空响应。 这就是我在 var_dump($response) 上得到的:

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

虽然它在从 localhost 发出请求时工作正常。 来自 localhost 的 var_dump($response) 给出以下输出:

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;

【问题讨论】:

  • 您的服务器是否能够连接到沙箱?事实并非如此。
  • @rhldr 是的,这是一个连接错误,但它出现在 ARB 响应中。不知道为什么?

标签: php authorize.net recurring-billing


【解决方案1】:

知道了!!!这是一个连接错误。当我尝试使用 AIM 付款时出现错误。仍然不知道为什么 ARB 响应中没有显示错误。无论如何,这就是我所做的

在 /lib/shared/AuthorizeNetRequest.php 中

改变了

public $VERIFY_PEER = true;

public $VERIFY_PEER = false;

它成功了!

【讨论】:

  • 对于那些看到这个快速修复(和接受的答案)的人,请阅读上面的其他回复,了解解决此问题的正确方法。不验证证书是个坏主意。您不希望任何服务器都能像它的 authorize.net 那样与您交谈
【解决方案2】:

我看到您找到了解决问题的方法,但是您在那里做的是一个坏主意,您实际上是在禁用 SSL 证书验证。

您的服务器配置应该具有受信任的 SSL 授权列表,这样您以后就不会遇到此问题并且仍然能够验证证书。

如果您没有能力修改服务器配置,您可以从 Mozilla 下载 CA 包并将其馈送到您的代码中。

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

在你的 curl 中设置它很简单,如下所示:

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

如果您能够在系统中使用自定义 php.ini 文件或覆盖 php 值,则可以为 PHP 全局设置。

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

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 2011-10-21
    • 2014-02-18
    • 1970-01-01
    • 2016-11-13
    • 2014-08-29
    • 2011-07-07
    • 2016-07-11
    • 2011-06-14
    相关资源
    最近更新 更多