2016-05-19 79 views
1

我已经看到了这个问题的一些建议,但没有一个帮助到目前为止。我有这个简单的小班制作cURL电话,这肯定是因为我已经尝试过与其他主持人通话。这里是类:PayPal curl调用没有回复使用PHP

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

至于我可以看到至少应该回报些什么呢?即使这是一个错误,但我什么也得不到。

我有没有疯掉?

  • 编辑 -

吴拉姆·阿里的评论后,他指出,我经过CURLOPT参数进入后阵列,而不是实际的卷曲选项。所以我做了这些变化:

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

贝宝电话:

$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

echo'卷曲错误:'。 curl_error($ CH);在curl关闭前粘贴代码并知道错误 – JYoThI

+0

Ooo,我忘了你可以这样做......我得到“SSL连接错误”..可能这是因为我是从“dev服务器”这样做可公开访问还是不会造成影响? – Zephni

回答

1

您错误地发送参数到你的类功能。

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

这些都是卷曲的选项不是邮政的变量。您发送这些。选项后变量的方法之一是更新您的卷曲功能

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

嗨古拉姆阿里,你的回答非常有意义,你能看看我的问题中的编辑,看看我做错了什么吗? – Zephni

+0

我测试了代码,它返回了类似于:TIMESTAMP = ...&CORRELATIONID = ...&ACK = ...这是您期望的响应吗? –

+0

啊哈!解决方案是您的评论和其他内容之间的混合。我将更改上传到实时服务器,现在它可以正常工作。所以出于某些原因,SSL似乎是一个问题,从公开无法访问的服务器导致问题。非常感谢您的帮助 – Zephni