2016-05-19 3 views
1

Ich habe einige der Vorschläge für diese Frage schon gesehen, aber keiner von ihnen hat bisher geholfen. Ich habe diese einfache kleine Klasse für cURL Anrufe, die definitiv funktioniert, weil ich es mit anderen Host-Anrufen versucht habe. Hier ist die Klasse:PayPal Curl Anruf keine Antwort mit 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; 
    } 
} 

Dies bedeutet einfach, ich einen Host und ein Array von Werten angeben kann, schreiben und die Post-Methode zurückkehrt, was es Antwort ist ist.

Dann für mein PayPal-Anruf, den ich tue folgendes:

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

Soweit ich dies sollte zumindest Rückkehr etwas sehen kann? Auch wenn es ein Fehler war, aber ich bekomme absolut nichts.

Habe ich getäuscht?

  • EDIT -

Nach Ghulam Ali Kommentar hat er darauf hingewiesen, dass ich CURLOPT Parameter in die Post-Array, anstatt den tatsächlichen curl Optionen vorging. So habe ich diese Änderungen vorgenommen:

Die Post-Methode von CurlHelper:

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

Der PayPal Aufruf:

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

Aber leider bin ich immer noch ein SSL-Fehler. Was gesagt wurde, macht durchaus Sinn, aber irgendwie immer noch nicht funktioniert :(

+1

echo 'Curl Fehler:'. curl_error ($ ch); füge den code vor dem curl close ein und erkenne den fehler – JYoThI

+0

Ooo, ich habe vergessen du könntest das tun ... ich bekomme "SSL connect error" .. könnte das möglicherweise sein, weil ich das von einem "dev server" mache der das nicht ist öffentlich zugänglich oder würde das keinen Unterschied machen? – Zephni

Antwort

1

Sie falsch den Parameter auf Ihre Klasse Funktion senden.

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

Dies sind die curl Optionen nicht die POST-Variablen. Sie senden diese . Optionen wie die POST-Variablen Eine Möglichkeit ist, Ihre Locken-Funktion zu aktualisieren

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

Und Ihre Klasse Funktion wie folgt aufrufen:.

$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

Hallo Ghulam Ali, deine Antwort macht Sinn, kannst du mir meine Frage in meiner Frage ansehen, um zu sehen, was ich falsch mache? – Zephni

+0

Ich habe den Code getestet und er hat etwas wie folgt zurückgegeben: TIMESTAMP = ... & CORRELATIONID = ... & ACK = ... Ist das die Antwort, die Sie erwarten? –

+0

Ahah! Die Lösung ist eine Mischung aus Ihrem Kommentar und etwas anderem. Ich lade meine Änderungen auf einen Live-Server hoch und jetzt funktioniert es. Aus einigen Gründen scheint SSL also ein Problem zu sein. Von einem Server aus, auf den nicht zugegriffen werden kann, führt dies zu einem Problem. Vielen Dank für Ihre Hilfe – Zephni