Sto cercando di passare alcuni argomenti in Curl, ma mi rendo conto che quando uso dei dati di test (semplici stringhe), riesco a ottenere il risultato (payId e payUrl) ma quando uso le variabili invece di dati di test, ottengo nulla.
Qual è il modo migliore per risolvere questo tipo di problema? E ' la mia prima volta con Curl così sto creando questa funzione sulla base degli articoli che ho trovato qui.
Se, per esempio, sostituire "nome" con $clientName, ho vinto ' t ottenere alcun ritorno dalle API.
function generatePayment($sendId, $clientCPF, $clientName, $clientEmail, $clientCep, $clientPhone, $amount){
// CONFIG
$urlCallBack = "http://192.168.0.79/sistema/admin/shipList.php?transactionStatus=success";
$urlError = "http://192.168.0.79/sistema/admin/shipList.php?transactionStatus=failed";
$debug = true;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'urlhere');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n\t\"reference\": \"my-order-ref-0001\",\n\t\"client\": {\n \t\"cpf\": \"43164853858\",\n \t\"name\": \"John Doe\",\n \t\"email\": \"[email protected]\",\n \t\"birthdate\": \"1982-01-14\",\n \t\"cep\": \"18053190\",\n \t\"phone\": \"15987452584\"\n\t},\n\t\"items\": [\n \t{\n \t\"reference\": \"my-item-ref-0001\",\n \t\"description\": \"Apple iMac 21.5-inch\",\n \t\"quantity\": \"1\",\n \t\"amount\": 149900\n \t},\n \t{\n \t\"reference\": \"my-item-ref-0002\",\n \t\"description\": \"Apple iPhone 11 Pro\",\n \t\"quantity\": 1,\n \t\"amount\": 99900\n \t}\n\t],\n \"coupon\": {\n \"code\": \"10DESCONTO\",\n \"value\": 1000,\n \"issuer\": \"merchant_api\"\n },\n\t\"shipping\": {\n \"amount\": 1000\n\t},\n\t\"redirect\": {\n \t \"success\": \"https://example.com/sp_callback?success\",\n \t \"failed\": \"https://example.com/sp_callback?failed\"\n\t}\n}");
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer '.$_POST['token'];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
} else {
if ($debug){
echo "<BR><BR><BR> DATA PASSED TO FUNCTION <BR>";
echo "<br>sendId ===> ".$sendId;
echo "<br>clientCPF ===> ".$clientCPF;
echo "<br>clientName ===> ".$clientName;
echo "<br>clientEmail ===> ".$clientEmail;
echo "<br>clientCep ===> ".$clientCep;
echo "<br>clientPhone ===> ".$clientPhone;
echo "<br>amount ===> ".$amount;
$decode = json_decode($result,true);
echo "<BR><BR> DATA RECEIVED FROM API <BR>";
echo '<br> payId generated by API ==> '.$payId = $decode['data']['order_id'];
echo '<br> PayURL generated by API ==>'.$payUrl = $decode['data']['url_checkout'];
} else {
$decode = json_decode($result,true);
$transactionId = $decode['data']['order_id'];
$payUrl = $decode['data']['url_checkout'];
$_SESSION['transactionUrl'] = $decode['data']['url_checkout'];
$_SESSION['transactionId'] = $transactionId;
$_SESSION['sendId'] = $sendId;
}
}
curl_close($ch);
// END GENERATE PAYMENT
}
Ogni aiuto è apprezzato su come risolvere i problemi.
Aggiornamento del Codice utilizzando JSON
//INITIALIZE
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sandbox.splipay.com/api/orders');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
// POST
$post = array(
"items" => array (
"description" => "Test",
"quantity" => 1,
"amount" => 10
),
"redirect" => array (
"success" => "www.success",
"failed" => "www.success"
)
);
$post = json_encode($post);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
// HEADERS
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer '.$_POST['token'];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//EXECUTE
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
} else {
$arr = json_decode($result);
echo "<br><br>Return from VAR_DUMP";
var_dump ($arr);
echo "<BR><BR>INFO RETURN<BR>";
$info = curl_getinfo($ch);
var_dump ($info);
// $_POST['token'] = $arr['access_token'];
}
curl_close($ch);
Come per la documentazione, questi sono gli unici valori che ho bisogno di passare per le API e che ho avuto la seguente risposta (esempio):
{ "successo": true, "data": { "order_id": 57, "url_checkout": "https://sandbox.splipay.com/payment/4openRe7Az/kzPdyP7bQr?expires=1583164527&signature=e1caae419137903f930f5a5b3d4c72608a61c0fdd36c70803d4a92c15556a4c5" } }