2017-02-21 3 views
1

Es ist nicht die Post Anfrage senden. Ich bin mir nicht sicher, warum oder was ich falsch mache. PHP Curl Beitrag Anfrage funktioniert nicht kein Beitrag

Dies ist die API in der Datenbank:

 //servapi added to code for clarity 
     $servapi = "https://(hidingwebsiteforthispost).com/api.php?key=(my_key)&service=31&action=order&profile=[link]&amount=[amount]" 

     //original code 
     $arrayFind = array(
      '[link]', 
      '[amount]' 
     ); 
     $arrayReplace = array(
      $link, 
      $quanity 
     ); 
     $APILink  = $servapi; 
     $APILink  = str_replace($arrayFind, $arrayReplace, $APILink); 
     $ch   = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $APILink); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_NOSIGNAL, 1); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 3); 
     curl_exec($ch); 
     curl_close($ch); 

von Moderator Hinzugefügt:

Benutzer ist zu prüfen, ob eine POST-Anforderung durch die Überprüfung seines Kontos auf dem Zielserver erfolgreich ist. Wenn dies erfolgreich ist, wird eine neue Bestellung unter seinem Konto gestartet. Wenn er die API-Zeichenfolge von requestmaker.com verwendet, wird eine neue Bestellung erstellt, aber wenn er den obigen Code ausführt, wird keine neue Bestellung erstellt.

Wenn Sie var_dump zum Überprüfen des zurückgegebenen Pakets von curl_exec($ch) verwenden, gibt der Benutzer an, dass die Antwort leer ist.

Der Benutzer hat auch seinen Code aktualisiert, um CURLOPT_POST auf true zu setzen.

+0

Vaxified L, um die Leute zu helfen, die Ihre Frage beantworten werden, fügen Sie bitte einige Details hinzu. Woher wissen Sie, dass die Funktion curl_exec() keine Daten an die API sendet? Haben Sie Protokolle vom Server? Alle Informationen, die Sie angeben, warum Sie glauben, dass der Code funktioniert oder nicht, helfen uns zu verstehen, was Sie versucht haben und was Sie noch nicht versucht haben. –

+0

Ich besitze nicht die API, aber ich habe die Anfrage auf requestmaker.com getestet und es hat gut funktioniert. Aber wenn ich gehe, um die Anfrage auf meinem Server zu senden passiert nichts. –

+0

Sie sagen also, dass die Anforderung eine Änderung vornehmen sollte, die auf der Zielwebsite sichtbar ist, und wenn Sie diese Website über eine andere Methode anzeigen, die die erwartete Änderung nicht anzeigt. Ist das richtig? –

Antwort

1

Sie sind nicht wirklich eine Post-Anforderung zu tun, werden Sie

curl_setopt($ch, CURLOPT_POST, true); 

um eine POST-Anfrage zu senden hinzufügen möchten.

Weitere Informationen finden Sie in der curl documentation und speziell in der curl_setopt documentation.

+0

noch nicht funktioniert:/ –

+0

Was genau hat nicht funktioniert? Bitte geben Sie an, was das Ergebnis nach dieser Änderung ist. – nvisser

+0

Nichts hatte sich wirklich verändert. Ich habe die API nicht, also habe ich keine Protokolle dafür. Ich erhalte auf meinem Server, der die Anfrage sendet, keinen bestimmten Fehler. Es passiert einfach nichts, wenn die Anfrage gesendet wird. –

1

Zusätzlich zu dem Vorschlag von @ nvisser sollten Sie auch die Antwort von der CURL-Anforderung erfassen und überprüfen. Ändern Sie Ihre curl_exec wie folgt:

$response = curl_exec($ch); 

Weil Sie CURLOPT_RETURNTRANSFER auf TRUE gesetzt haben, Ihre curl_exec kapselt alle Antworten als String und gibt sie an eine Variable Ihrer Wahl.

Geben Sie die Antwort aus und Sie werden wahrscheinlich weitere Informationen finden, die Ihnen bei der Diagnose des Problems helfen.

nach Diskussion in den Kommentaren hinzugefügt:

Hier ist, was wir tun sollten:

Da Sie nicht die Kontrolle über das Netzwerk haben, versuchen Sie die Installation und Aktivierung des Web-Servers auf Ihrem virtuellen privaten Server so dass Sie bei http://localhost/fakeServer.php

erhalten und Prozessanforderungen können Sobald Sie Apache2 oder NGINX installiert und eingerichtet haben, ein kleines Programm erstellen fakeServer.php an der Wurzel dieser Web-Verzeichnis genannt wird, und stellen Sie die API uRL http://localhost/fakeServer.php. Erstellen Sie in diesem Skript ein Protokoll, das den Inhalt der Header $_POST jedes Mal ausgibt, wenn das Skript ausgeführt wird.

Auf diese Weise können Sie beweisen, ob Ihr Skript Anforderungen sendet und wie sie auf dem empfangenden Server aussehen. Das wird Ihnen helfen, Ihr Skript zu debuggen, um die API-Klasse zu verwenden, und zu überprüfen, dass Ihr Ihr-Code ordnungsgemäß formatiert ist und ordnungsgemäß funktioniert.

Lassen Sie fakeServer.php eine Antwort ausgeben und überprüfen Sie diese Antwort in Ihrem Programm. Wenn alles gut funktioniert, wird die Ausgabe von fakeServer.php in Ihrer $response Variable enden.

Wenn alles nicht gut funktioniert, haben wir mehr Kontrolle über die Testumgebung, um das Problem zu finden.

+0

Es gibt keine Antwort. –

+0

Keine Antwort deutet darauf hin, dass Ihr Internet-Paket es niemals auf dem Remote-Server macht. Wenn Sie Ihren Code auf einem anderen Server testen und Ihr Code von diesem Server verifiziert wird, müssen Sie die Dinge, die sich unterscheiden, aufschlüsseln. Wir können davon ausgehen, dass Ihr PHP korrekt ist, weil Sie es auf requestmaker.com verifiziert haben. Denken Sie dann über Ihren Server und das Netzwerk nach, auf dem er sich befindet. Gibt es eine Firewall, die Ihre ausgehenden Anfragen blockieren könnte? Wenn dies der Fall ist, wird Ihre Anfrage es niemals schaffen, bis Sie einen Weg gefunden haben, die Firewall zu passieren. –

+0

Versuchen Sie, an den vollständigen Weg zu denken, den Ihr Internet-Paket von der Erstellung zur Zerstörung zurücklegen wird, und denken Sie darüber nach, wie es sich von dem auf requestmaker.com erstellten Internet-Paket unterscheidet. –