【发布时间】:2016-05-13 00:20:04
【问题描述】:
我正在制作一些使用 Paypal 的东西,但我在 Paypal 流程的最后一步遇到了一些麻烦。我有四个对 Paypal API 的调用,它们工作得很好,但最后一个没有。首先,这是我的 curl 函数
function curl($PayPalMode,$nvpreq) {
$API_Endpoint = "https://api-3t.".$PayPalMode.".paypal.com/nvp";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
curl_setopt($ch, CURLOPT_VERBOSE, 1)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
$httpResponse = curl_exec($ch);
$httpResponseAr = explode("&", $httpResponse);
$httpParsedResponseAr = array();
foreach ($httpResponseAr as $i => $value) {
$tmpAr = explode("=", $value);
if(sizeof($tmpAr) > 1) {
$httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
}
}
if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
return "Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.";
}
return $httpParsedResponseAr;
}
然后,如前所述,这用于不同的事物四次,例如
$data_set = array(
USER = $PayPalApiUsername,
PWD = $PayPalApiPassword,
SIGNATURE = $PayPalApiSignature,
METHOD = "SetExpressCheckout",
VERSION = urlencode(109.0),
L_BILLINGTYPE0 = "RecurringPayments",
L_BILLINGAGREEMENTDESCRIPTION0 = urlencode($paypal_obj->name)." (".urlencode($paypal_obj->price)."/Month)",
CANCELURL = $PayPalCancelURL,
RETURNURL = $PayPalReturnURL,
CURRENCYCODE = $PayPalCurrencyCode
);
$nvpreq_set = http_build_query($data_set);
$set_express_checkout_curl = curl($PayPalMode,$nvpreq_set);
前四个请求(还包括 GetExpressCheckoutDetails、CreateRecurringPaymentsProfile 和 GetRecurringPaymentsProfileDetails)都可以正常工作,使用完全相同的方法。但是,第五个也是最后一个没有。这是使用 UpdateRecurringPaymentsProfile,因为我有时想试用一个月。它使用与上面完全相同的方法
$data_update = array(
USER = $PayPalApiUsername,
PWD = $PayPalApiPassword,
SIGNATURE = $PayPalApiSignature,
METHOD = "UpdateRecurringPaymentsProfile",
VERSION = urlencode(109.0),
PROFILEID = $payer_id,
TRIALBILLINGPERIOD = "Month",
TRIALBILLINGFREQUENCY = 1,
TRIALTOTALBILLINGCYCLES = 1,
TRIALAMT = 10.00,
CURRENCYCODE = "GBP"
);
$nvpreq_update = http_build_query($data_update);
$update_profile_curl = curl($PayPalMode,$nvpreq_update);
但是,这不起作用,而是返回错误 11510 - 试用金额无效,试用金额必须 >= 0。在向 Paypal 发送支持消息后,他们确认没有通过 TRIALAMT,这就是他们的全部正在接收
Timestamp 20-Jan-2016 17:40:41 GMT (1453311641)
UpdateRecurringPaymentsProfileRequest
profileid "(profileid)"
currencycode "GBP"
trialtotalbillingcycles "1"
method "UpdateRecurringPaymentsProfile"
version "109"
user (email address)
correlation_id (correlation id)
如您所见,不只是 TRIALAMT 没有通过,还有 TRIALBILLINGPERIOD 和 TRIALBILLINGFREQUENCY。这是所有这一切中唯一没有传递某些数据的实例——我的问题是有人知道为什么会这样吗?我完全迷失了,我不知道为什么这些数据不会被传递,除非我的最终请求有问题?
【问题讨论】:
-
如果您将数字括在引号中是否有效,例如:-“10.00”和“1”甚至“109.0”,因此它们作为文本值而不是数字值传递?