Paypal получает детали транзакции с помощью PHP cURL
Так что после долгих поисков я наконец смог успешно получить свой токен доступа Paypal, используя PHP cURL. Теперь я пытаюсь получить детали транзакции на основе идентификатора транзакции. До сих пор я думаю, что получил правильный URL-адрес вызова, однако я думаю, что мое форматирование данных поста может быть неправильным. Используемый код находится ниже:
<?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
?>
Я не получаю никаких ошибок cURL, поэтому я предполагаю, что проблема заключается в отправке данных или в том, как я их форматирую.
Краткое руководство по Paypal о том, как это сделать, можно найти здесь-> https://developer.paypal.com/docs/classic/express-checkout/gs_transaction/ Однако оно написано на cURL, а не на расширении PHP cURL, поэтому я не уверен, правильно ли я отправляю данные.
Подробнее о PayPal GetTransactionDetails здесь-> https://developer.paypal.com/docs/classic/api/merchant/GetTransactionDetails_API_Operation_NVP/
Будем очень благодарны за любые рекомендации относительно форматирования данных или любые другие предложения!
-------------------------------------------------- -------ОБНОВИТЬ!-----------------------------------------------------------
Теперь, когда я печатаю результат, как только выполняется оператор cURL, я получаю такую информацию:
RECEIVERID=GN7SRQEGEREASDV9BQU&EMAIL=peoplesrobotiblabal%40outlook%2ecom&PAYERID=JC5RWUUKWGDFYJYY&PAYERSTATUS=verified&COUNTRYCODE=US&SHIPTONAME=Jane%20Smurf...
Как видно, некоторые символы, такие как точки, заменяются местозаполнителями, такими как "%40". Может ли это быть идентифицировано? Это потому, что я ожидаю ответа JSON?
2 ответа
Чтобы построить строку запроса http из массива PHP, вы можете использовать PHP http_build_query()
, Пример:
$array = ['username' => 'John', 'password' => '123456abc'];
$postdata = http_build_query($array);
Символ, который вы упомянули, является формой специальных символов в кодировке urlenco. Http-запрос потребует, чтобы строка запроса была закодирована. %40
это Urlencoded форма @
, Если в будущем вам потребуется кодирование / декодирование в / из строки urlencoded, вы можете использовать rawurldecode()
, rawurlencode()
, urlencode()
а также urldecode()
,
Для анализа ответа от PAYPAL NVP API. Ты можешь использовать parse_str()
, Пример 1:
$response = 'status=success&code=02';
parse_str($response, $response_array);
//$response_array will contain the $response as array
Пример 2:
$response = 'status=success&code=02';
parse_str($response);
//this will display success
echo $status;
//this will display 02
echo $code;
<?php
function get_transaction_details( $transaction_id ) {
$api_request = 'USER=' . urlencode( 'api_username' )
. '&PWD=' . urlencode( 'api_password' )
. '&SIGNATURE=' . urlencode( 'api_signature' )
. '&VERSION=76.0'
. '&METHOD=GetTransactionDetails'
. '&TransactionID=' . $transaction_id;
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, 'https://api-3t.sandbox.paypal.com/nvp' ); // For live transactions, change to 'https://api-3t.paypal.com/nvp'
curl_setopt( $ch, CURLOPT_VERBOSE, 1 );
// Uncomment these to turn off server and peer verification
// curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
// curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_POST, 1 );
// Set the API parameters for this transaction
curl_setopt( $ch, CURLOPT_POSTFIELDS, $api_request );
// Request response from PayPal
$response = curl_exec( $ch );
// print_r($response);
// If no response was received from PayPal there is no point parsing the response
if( ! $response )
die( 'Calling PayPal to change_subscription_status failed: ' . curl_error( $ch ) . '(' . curl_errno( $ch ) . ')' );
curl_close( $ch );
// An associative array is more usable than a parameter string
parse_str( $response, $parsed_response );
return $parsed_response;
}
$response = get_transaction_details('transaction_id');
echo "<pre>"; print_r($response);
?>
Получение информации от cURL
$str = RECEIVERID=GN7SRQEGEREASDV9BQU&EMAIL=peoplesrobotiblabal%40outlook%2ecom&PAYERID=JC5RWUUKWGDFYJYY&PAYERSTATUS=verified&COUNTRYCODE=US&SHIPTONAME=Jane%20Smurf...
Пожалуйста, используйте parse_str("$str"); // add your value here, it will give you proper data format
Более подробная информация: https://www.w3schools.com/php/func_string_parse_str.asp