当我尝试使用信用卡从我的测试服务器创建定期配置文件时,我收到了Authorize.Net的null响应。 这是我在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;
答案 0 :(得分:6)
得到了!!!这是一个连接错误。当我尝试使用AIM付款时出错。仍然不知道为什么ARB响应中没有显示错误。无论如何,这就是我做的事情
在/lib/shared/AuthorizeNetRequest.php
中已更改
public $VERIFY_PEER = true;
到
public $VERIFY_PEER = false;
它有效!
答案 1 :(得分:4)
我看到你找到了解决问题的方法,但你做的是一个坏主意,你基本上是禁用SSL证书验证。
您的服务器配置应该具有受信任的SSL权限列表,因此您将来不会遇到此问题。仍然能够验证证书。
如果您无法修改服务器配置,可以从Mozilla&amp; amp;将其提供给您的代码中卷曲。
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