2016-05-16 13 views
0

Also nach vielen Suchen konnte ich endlich mein Paypal Access Token mit PHP cURL erfolgreich bekommen. Jetzt versuche ich Transaktionsdetails basierend auf Transaktions-ID abzurufen. Bis jetzt glaube ich, dass ich die Anruf-URL richtig gelesen habe, aber ich denke, dass meine Postdaten-Formatierung möglicherweise falsch ist. Der Code verwendet wird, wie folgt zu finden:Paypal Transaktionsdetails mit PHP cURL bekommen

<?php 

//this function is for handling post call requests 
function make_post_call($url, $postdata) { 
    global $token; 
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); 
    curl_setopt($curl, CURLOPT_SSLVERSION , 6); 
    curl_setopt($curl, CURLOPT_HEADER, false); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
       'Authorization: Bearer '.$token, 
       'Accept: application/json', 
       'Content-Type: application/json' 
       )); 

    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); 
    $response = curl_exec($curl); 
    print_r($response); //IM NOW RECEIVING OUTPUT, however symbols are now being replaced by placeholders such as '%40', how can i prevent this? 
    if (empty($response)) { 
     die(curl_error($curl)); //close due to error 
     curl_close($curl); 
    } else { 
     $info = curl_getinfo($curl); 
     echo "Time took: " . $info['total_time']*1000 . "ms\n"; 
     curl_close($curl); // close cURL handler 
     if($info['http_code'] != 200 && $info['http_code'] != 201) { 
      echo "Received error: " . $info['http_code']. "\n"; 
      echo "Raw response:".$response."\n"; 
      die(); 
     } 
    } 
    // Convert the result from JSON format to a PHP array 
    $jsonResponse = json_decode($response, TRUE); 
    return $jsonResponse; 
} 

$token = get_access_token($url,$postArgs); //works and returns a valid access token 

//This is the URL for the call 
$url = 'https://api-3t.sandbox.paypal.com/nvp'; 

//This is the data to be sent in the call 
$postdata = array(
'USER' => 'peoplesroewrwwsg_api1.outlook.com', 
'PWD' => 'KR2TVKHGDSHSNDJ6E2', 
'SIGNATURE' => 'AFcWxV21C7fdFHSGGSDGD51G0BJYUWOCSyjUAKPPGs', 
'METHOD' => 'GetTransactionDetails', 
'VERSION' => '123', 
'TransactionID' => '1RE953245246192109' 
); 

$postdata = http_build_query($postdata); 
//$postdata = json_encode($postdata); //Is this the correct way of formatting? 

$transactionInfo = make_post_call($url, $postdata); //get transaction details NOT WORKING 

print_r($transactionInfo); //does not print anything 
?> 

im keine cURL Fehlern recieving so nehme ich an, dass das Problem ist entweder die Daten im Senden oder, wie ich es formatiert werden.

A breif Paypal Anleitung, wie man dies tun kann hier->https://developer.paypal.com/docs/classic/express-checkout/gs_transaction/#tryit aber es ist geschrieben in cURL und nicht PHP cURL Erweiterung so im nicht sicher, ob im richtig Senden der Daten zu finden.

Paypal GetTransactionDetails Details hier->https://developer.paypal.com/docs/classic/api/merchant/GetTransactionDetails_API_Operation_NVP/

Jede mögliche Anleitung zur Datenformatierung, oder irgendwelche anderen Vorschläge sind wir sehr dankbar!

---------------------------------------------- -----------AKTUALISIEREN!------------------------------------- ----------------------

Jetzt, wenn ich das Ergebnis ausdrucken, sobald die cURL-Anweisung ausgeführt wird, im Empfangen von Informationen wie folgt:

RECEIVERID=GN7SRQEGEREASDV9BQU&EMAIL=peoplesrobotiblabal%40outlook%2ecom&PAYERID=JC5RWUUKWGDFYJYY&PAYERSTATUS=verified&COUNTRYCODE=US&SHIPTONAME=Jane%20Smurf... 

Wie man sieht, werden einige Symbole wie zB Punkte durch Platzhalter wie '% 40' ersetzt. Kann die Kraft dieser Person identifiziert werden? liegt es daran, dass ich eine JSON-Antwort erwarte?

+1

Die Dokumentation eindeutig angegeben name => Wert-Paare nicht JSON. Verwenden Sie 'http_build_query()', um die Post-Daten zu erstellen. Und was lässt dich denken, dass die Antwort in JSON sein wird? – frz3993

+0

hallo! Vielen Dank für den Vorschlag (auch ich rate nur, dass die Antwort JSON ist, ich bin mir nicht sicher, was es wirklich ist). Ich änderte es zurück zu 'http_build_query()' und fügte eine Druckanweisung hinzu, die das cURL Resultat druckte, sobald es innerhalb der Funktion empfangen wurde und ich jetzt eine sorta korrekte Ausgabe empfange! Wie auch immer, einige Symbole werden durch Platzhalter wie '% 40' ersetzt. – DiscreteTomatoes

+0

Das ist eine urldecodierte Zeichenkette, die benötigt wird, wenn eine HTTP-Anfrage ausgeführt wird. Können Sie alle 'print_r' auskommentieren und tun Sie einfach' var_dump ($ POST) ', nachdem Sie die Curl-Anfrage gemacht haben. Bitte aktualisieren Sie die Frage mit dem Ergebnis. Ich denke, dass die API eine Rückpostenanforderung stellen wird. – frz3993

Antwort

2

Um eine HTTP-Abfragezeichenfolge aus einem PHP-Array zu erstellen, können Sie PHP http_build_query() verwenden. Beispiel:

$array = ['username' => 'John', 'password' => '123456abc']; 
$postdata = http_build_query($array); 

Das von Ihnen erwähnte Symbol ist die urlencodierte Form von Sonderzeichen. Für die HTTP-Anforderung muss die Abfragezeichenfolge urlencodiert werden. %40 ist die urlencodierte Form von @. Wenn Sie in der Zukunft eine Codierung/Dekodierung von einer urlcodierten Zeichenkette benötigen, können Sie rawurldecode(), rawurlencode(), urlencode() und urldecode() verwenden.

Zum Analysieren der Antwort von PAYPAL NVP API. Sie können parse_str() verwenden. Beispiel 1:

$response = 'status=success&code=02'; 
parse_str($response, $response_array); 
//$response_array will contain the $response as array 

Beispiel 2:

$response = 'status=success&code=02'; 
parse_str($response); 
//this will display success 
echo $status; 
//this will display 02 
echo $code;