2016-05-19 24 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