PHP Curl nechce akceptovať premenných

0

Otázka

Snažím sa odovzdať niektoré argumenty v Curl, ale uvedomujem si, že keď som sa použiť údaje z testov (jednoduché reťazce), môžem dostať výsledok (payId a payUrl), ale keď som pomocou premenných namiesto údaje zo skúšok, som si nič späť.

Aký je najlepší spôsob, ako vyriešiť tento druh problému? Je to prvýkrát, čo som pomocou Curl tak som vytváranie túto funkciu na základe článkov našiel som tu.

Napríklad, ak som nahradiť "name" s $clientName, nebudem mať žiadne návrate z 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
}

Každá pomoc je ocenil na riešenie problémov.


Aktualizácia Kód pomocou 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);

Podľa dokumentácie, tieto sú len hodnoty potrebujem prejsť k API a ja by som si nasledovnú odpoveď (príklad):

{ "úspech": true, "data": { "order_id": 57, "url_checkout": "https://sandbox.splipay.com/payment/4openRe7Az/kzPdyP7bQr?expires=1583164527&signature=e1caae419137903f930f5a5b3d4c72608a61c0fdd36c70803d4a92c15556a4c5" } }

api curl php
2021-11-23 22:15:38
1

Najlepšiu odpoveď

0

Po presťahovaní do formáte JSON a preskúmanie API požiadavky, bol som schopný to opraviť. Raz v JSON, to bolo jednoduchšie určiť, že tam bol problém s multi rozmerné pole. Som prepísal kód a že to funguje teraz. Vďaka všetkým

JSON

$post = array(
            "reference" => "my-order-ref-0001",
            "client" => array (
                "cpf" => "43164853858",
                "name" => "John Doe",
                "email" => "[email protected]",
                "birthdate" => "1982-01-14",
                "cep" => "18053190",
                "phone" => "15987452584"
            ),
            "items" => array (
                array (
                    "reference" => "my-item-ref-0001",
                    "description" => "Test",
                    "quantity" => 1,
                    "amount" => 10
                ),
            ),
            "coupon" => array(
                "code" => "10DESCONTO",
                "value" => 1000,
                "issuer" => "merchant_api"
            ),
            "shipping" => array (
                "amount"=> 1000
            ),
            "redirect" => array (
                "success" => "www.success",
                "failed" => "www.success"
            )
        );
2021-11-24 14:13:48

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................