PayPal curl使用PHP调用无响应

时间:2016-05-19 10:54:08

标签: php curl paypal

我已经看到了这个问题的一些建议,但到目前为止他们都没有帮助。我有这个简单的小班来进行cURL调用,这绝对有效,因为我已经尝试过与其他主机调用。这是班级:

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错误。所说的话很有道理,但不知何故仍然无效:(

1 个答案:

答案 0 :(得分:1)

您错误地将参数发送到您的班级功能。

CURLOPT_HEADER                      => false,
CURLOPT_SSL_VERIFYPEER              => false,
CURLOPT_SSL_VERIFYHOST              => false,

这些是卷曲选项,而不是Post变量。您将这些选项作为Post变量发送。一种方法是更新您的卷曲功能。

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"
));