为什么 PayPal 的快速结帐失败且没有错误?
Why does PayPal's Express Checkout fail with no errors?
PayPal 在从 JavaScript 调用的 checkout.php 中的第一步失败。我正在使用沙箱并在本地和服务器上尝试过 运行。我发了一个技术。支持请求解释了问题,但 3 天后我没有收到他们的任何回复。我猜这应该归咎于天气。
下面有一串参数,貌似都输入正确了。它还包含空白错误消息:
nvpstr=&PAYMENTREQUEST_0_AMT=15.00&PAYMENTREQUEST_0_PAYMENTACTION=促销&RETURNURL=http://jquery.bunkerhill.com/php/orderconfirm.php&CANCELURL=http://jquery.bunkerhill.com/php/cancel.php&PAYMENTREQUEST_0_CURRENCYCODE=USD&REQCONFIRMSHIPPING=0&NOSHIPPING=1&L_PAYMENTREQUEST_0_NAME0=jQuery-Translator&L_PAYMENTREQUEST_0_AMT0=15.00&L_PAYMENTREQUEST_0_QTY0=1&L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital
ACK=SetExpressCheckout API调用失败。
详细错误消息:
简短错误消息:
错误代码:
错误严重性代码:
有没有人遇到过类似的问题?
checkout.php:
<?php
require_once ("paypalfunctions.php");
$PaymentOption = "PayPal";
if ($PaymentOption == "PayPal")
{
// ==================================
// PayPal Express Checkout Module
// ==================================
//'------------------------------------
//' The paymentAmount is the total value of
//' the purchase.
//'
//' TODO: Enter the total Payment Amount within the quotes.
//' example : $paymentAmount = "15.00";
//'------------------------------------
$paymentAmount = "15.00";
//'------------------------------------
//' The currencyCodeType
//' is set to the selections made on the Integration Assistant
//'------------------------------------
$currencyCodeType = "USD";
$paymentType = "Sale";
//'------------------------------------
//' The returnURL is the location where buyers return to when a
//' payment has been succesfully authorized.
//'
//' This is set to the value entered on the Integration Assistant
//'------------------------------------
$returnURL = "http://jquery.bunkerhill.com/php/orderconfirm.php";
//'------------------------------------
//' The cancelURL is the location buyers are sent to when they hit the
//' cancel button during authorization of payment during the PayPal flow
//'
//' This is set to the value entered on the Integration Assistant
//'------------------------------------
$cancelURL = "http://jquery.bunkerhill.com/php/cancel.php";
//'------------------------------------
//' Calls the SetExpressCheckout API call
//'
//' The CallSetExpressCheckout function is defined in the file PayPalFunctions.php,
//' it is included at the top of this file.
//'-------------------------------------------------
$items = array();
$items[] = array('name' => 'jQuery-Translator', 'amt' => $paymentAmount, 'qty' => 1);
//::ITEMS::
// to add anothe item, uncomment the lines below and comment the line above
// $items[] = array('name' => 'Item Name1', 'amt' => $itemAmount1, 'qty' => 1);
// $items[] = array('name' => 'Item Name2', 'amt' => $itemAmount2, 'qty' => 1);
// $paymentAmount = $itemAmount1 + $itemAmount2;
// assign corresponding item amounts to "$itemAmount1" and "$itemAmount2"
// NOTE : sum of all the item amounts should be equal to payment amount
$resArray = SetExpressCheckoutDG( $paymentAmount, $currencyCodeType, $paymentType,
$returnURL, $cancelURL, $items );
$ack = strtoupper($resArray["ACK"]);
if($ack == "SUCCESS" || $ack == "SUCCESSWITHWARNING")
{
$token = urldecode($resArray["TOKEN"]);
RedirectToPayPalDG( $token );
}
else
{
//Display a user friendly Error on the page using any of the following error information returned by PayPal
$ErrorCode = urldecode($resArray["L_ERRORCODE0"]);
$ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]);
$ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]);
$ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]);
echo "SetExpressCheckout API call failed. " . "<br/>";
echo "Detailed Error Message: " . $ErrorLongMsg . "<br/>";
echo "Short Error Message: " . $ErrorShortMsg . "<br/>";
echo "Error Code: " . $ErrorCode . "<br/>";
echo "Error Severity Code: " . $ErrorSeverityCode . "<br/>";
}
}
?>
您一定从 PayPal 收到了空白响应,这意味着您可能遇到了 curl 错误,这意味着您可能 运行 进入了 SSLv3 握手失败,而 PayPal 刚刚用它打开了开关2016 年 1 月 19 日。
这是 PayPal 所做的,因为 POODLE vulnerability。
您应该做的是检查 curl 错误以验证这是您 运行 遇到的问题(我几乎可以保证是因为他们打开开关后我们看到了很多这样的问题.)
然后,最简单的方法就是联系您的网络托管服务商并说明您 运行 遇到了这个问题,他们需要更新您的服务器以修复它。它基本上归结为服务器软件堆栈,特别是 OpenSSL,更新到正确处理 TLS 回退的受支持版本。
PayPal 在从 JavaScript 调用的 checkout.php 中的第一步失败。我正在使用沙箱并在本地和服务器上尝试过 运行。我发了一个技术。支持请求解释了问题,但 3 天后我没有收到他们的任何回复。我猜这应该归咎于天气。
下面有一串参数,貌似都输入正确了。它还包含空白错误消息:
nvpstr=&PAYMENTREQUEST_0_AMT=15.00&PAYMENTREQUEST_0_PAYMENTACTION=促销&RETURNURL=http://jquery.bunkerhill.com/php/orderconfirm.php&CANCELURL=http://jquery.bunkerhill.com/php/cancel.php&PAYMENTREQUEST_0_CURRENCYCODE=USD&REQCONFIRMSHIPPING=0&NOSHIPPING=1&L_PAYMENTREQUEST_0_NAME0=jQuery-Translator&L_PAYMENTREQUEST_0_AMT0=15.00&L_PAYMENTREQUEST_0_QTY0=1&L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital
ACK=SetExpressCheckout API调用失败。
详细错误消息:
简短错误消息:
错误代码:
错误严重性代码:
有没有人遇到过类似的问题?
checkout.php:
<?php
require_once ("paypalfunctions.php");
$PaymentOption = "PayPal";
if ($PaymentOption == "PayPal")
{
// ==================================
// PayPal Express Checkout Module
// ==================================
//'------------------------------------
//' The paymentAmount is the total value of
//' the purchase.
//'
//' TODO: Enter the total Payment Amount within the quotes.
//' example : $paymentAmount = "15.00";
//'------------------------------------
$paymentAmount = "15.00";
//'------------------------------------
//' The currencyCodeType
//' is set to the selections made on the Integration Assistant
//'------------------------------------
$currencyCodeType = "USD";
$paymentType = "Sale";
//'------------------------------------
//' The returnURL is the location where buyers return to when a
//' payment has been succesfully authorized.
//'
//' This is set to the value entered on the Integration Assistant
//'------------------------------------
$returnURL = "http://jquery.bunkerhill.com/php/orderconfirm.php";
//'------------------------------------
//' The cancelURL is the location buyers are sent to when they hit the
//' cancel button during authorization of payment during the PayPal flow
//'
//' This is set to the value entered on the Integration Assistant
//'------------------------------------
$cancelURL = "http://jquery.bunkerhill.com/php/cancel.php";
//'------------------------------------
//' Calls the SetExpressCheckout API call
//'
//' The CallSetExpressCheckout function is defined in the file PayPalFunctions.php,
//' it is included at the top of this file.
//'-------------------------------------------------
$items = array();
$items[] = array('name' => 'jQuery-Translator', 'amt' => $paymentAmount, 'qty' => 1);
//::ITEMS::
// to add anothe item, uncomment the lines below and comment the line above
// $items[] = array('name' => 'Item Name1', 'amt' => $itemAmount1, 'qty' => 1);
// $items[] = array('name' => 'Item Name2', 'amt' => $itemAmount2, 'qty' => 1);
// $paymentAmount = $itemAmount1 + $itemAmount2;
// assign corresponding item amounts to "$itemAmount1" and "$itemAmount2"
// NOTE : sum of all the item amounts should be equal to payment amount
$resArray = SetExpressCheckoutDG( $paymentAmount, $currencyCodeType, $paymentType,
$returnURL, $cancelURL, $items );
$ack = strtoupper($resArray["ACK"]);
if($ack == "SUCCESS" || $ack == "SUCCESSWITHWARNING")
{
$token = urldecode($resArray["TOKEN"]);
RedirectToPayPalDG( $token );
}
else
{
//Display a user friendly Error on the page using any of the following error information returned by PayPal
$ErrorCode = urldecode($resArray["L_ERRORCODE0"]);
$ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]);
$ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]);
$ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]);
echo "SetExpressCheckout API call failed. " . "<br/>";
echo "Detailed Error Message: " . $ErrorLongMsg . "<br/>";
echo "Short Error Message: " . $ErrorShortMsg . "<br/>";
echo "Error Code: " . $ErrorCode . "<br/>";
echo "Error Severity Code: " . $ErrorSeverityCode . "<br/>";
}
}
?>
您一定从 PayPal 收到了空白响应,这意味着您可能遇到了 curl 错误,这意味着您可能 运行 进入了 SSLv3 握手失败,而 PayPal 刚刚用它打开了开关2016 年 1 月 19 日。
这是 PayPal 所做的,因为 POODLE vulnerability。
您应该做的是检查 curl 错误以验证这是您 运行 遇到的问题(我几乎可以保证是因为他们打开开关后我们看到了很多这样的问题.)
然后,最简单的方法就是联系您的网络托管服务商并说明您 运行 遇到了这个问题,他们需要更新您的服务器以修复它。它基本上归结为服务器软件堆栈,特别是 OpenSSL,更新到正确处理 TLS 回退的受支持版本。