php - 使用 PHP 的 PayPal curl 调用没有响应

标签 php curl paypal

我已经看到了一些关于这个问题的建议,但到目前为止都没有帮助。我有一个用于进行 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/

相关文章:

php - 转换用于 MySQL FULLTEXT bool 模式的多词搜索字符串

php - 无法使用关联数组通过 PDO 插入数据

php - 检查约束不起作用

bash - 如何在bash脚本中执行存储在heredoc中的curl命令?

http - 从 wxWidgets 应用程序通过 HTTPS POST 发送反馈数据

PayPal Plus : Sorry, 目前由于技术原因无法处理付款

asp.net - 支付宝底层连接被关闭

php - 扩展 PDO 类

spring - 在端口 8080 的 DNS 缓存中未找到主机名,但在端口 80 上正常?

paypal - 使用 PayPal REST API 通过 Express Checkout 测试被拒绝的付款