我已经看到了一些关于这个问题的建议,但到目前为止都没有帮助。我有一个用于进行 cURL 调用的简单小类,它绝对有效,因为我已经在其他主机调用中尝试过它。这是类(class):
class CurlHelper
{
public static function Post($URL, $Fields = array(), $DieExplainError = false)
{
return self::Call(array(
CURLOPT_URL => $URL,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => count($Fields),
CURLOPT_POSTFIELDS => http_build_query($Fields)
), $DieExplainError);
}
public static function Call($Array, $DieExplainError = false)
{
$ch = curl_init();
curl_setopt_array($ch, $Array);
$Result = curl_exec($ch);
if($DieExplainError && curl_error($ch))
die(curl_error($ch));
curl_close($ch);
return $Result;
}
}
这只是意味着我可以指定一个主机和一个要发布的值数组,并且 Post 方法返回任何它的响应。
然后,对于我的 PayPal 调用,我将执行以下操作:
$Response = CurlHelper::Post("https://api-3t.sandbox.paypal.com/nvp", array(
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
"USER" => "user",
"PWD" => "pass",
"SIGNATURE" => "sig",
"METHOD" => "SetExpressCheckout",
"VERSION" => 86,
"PAYMENTREQUEST_0_PAYMENTACTION" => "SALE",
"PAYMENTREQUEST_0_AMT" => 19,
"PAYMENTREQUEST_0_CURRENCYCODE" => "GBP",
"cancelUrl" => "myurl",
"returnUrl" => "myurl"
), true);
die("test: ".print_r($Response));
据我所知,这至少应该返回一些东西?即使这是一个错误,但我绝对一无所获。
我傻了吗?
- 编辑 -
在 Ghulam Ali 的评论之后,他指出我将 CURLOPT 参数传递到 post 数组而不是实际的 curl 选项。所以我做了这些改变:
CurlHelper的Post方法:
public static function Post($URL, $Fields = array(), $DieExplainError = false)
{
return self::Call(array(
CURLOPT_URL => $URL,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_POST => count($Fields),
CURLOPT_POSTFIELDS => http_build_query($Fields)
), $DieExplainError);
}
PayPal 调用:
$Response = CurlHelper::Post("https://api-3t.sandbox.paypal.com/nvp", array(
"USER" => "",
"PWD" => "",
"SIGNATURE" => "",
"METHOD" => "SetExpressCheckout",
"PAYMENTREQUEST_0_PAYMENTACTION" => "SALE",
"PAYMENTREQUEST_0_AMT" => 19,
"PAYMENTREQUEST_0_CURRENCYCODE" => "GBP",
"cancelUrl" => "",
"returnUrl" => ""
), true);
但不幸的是,我仍然遇到 SSL 错误。所说的很有道理,但不知何故仍然行不通:(
最佳答案
您错误地将参数发送到您的类函数。
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
这些是 curl 选项而不是 Post 变量。您将这些选项作为 Post 变量发送。一种方法是更新您的 Curl 函数。
return self::Call(array(
CURLOPT_URL => $URL,
CURLOPT_HEADER => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => count($Fields),
CURLOPT_POSTFIELDS => http_build_query($Fields)
), $DieExplainError);
然后像这样调用你的类函数:
$Response = CurlHelper::Post("https://api-3t.sandbox.paypal.com/nvp", array(
"USER" => "user",
"PWD" => "pass",
"SIGNATURE" => "sig",
"METHOD" => "SetExpressCheckout",
"VERSION" => 86,
"PAYMENTREQUEST_0_PAYMENTACTION" => "SALE",
"PAYMENTREQUEST_0_AMT" => 19,
"PAYMENTREQUEST_0_CURRENCYCODE" => "GBP",
"cancelUrl" => "myurl",
"returnUrl" => "myurl"
));
关于php - 使用 PHP 的 PayPal curl 调用没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37321103/