簡體   English   中英

如何在php中發送多維數組發布數據?

[英]how to send multidimensional array post data in php?

我正在為服務設置模擬,並嘗試將一些數據返回到我的回調頁面以保存到db表中。

這是我用來將模擬發送到回調的代碼:

function checkCallback(){

            $ch = curl_init("remote.domain.com/callback.php");

$jsonData = [


    "success" =>true,      
    "error" => null, 
"response"=> [
        "code"=>"ad3f0db2-62b6-4cf4-9027-14829d33cfd2",
        "state"=>"my-secret-state-123456789"
    ]

            ];

            $jsonDataEncoded = json_encode($jsonData);

            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);


            $result = curl_exec($ch);


            var_dump($result);
            echo $jsonDataEncoded;
              curl_close($ch);

}

callback.php:

<?php 


var_dump(get_defined_vars());

$un = 'username';
$pw = 'password';
$dsn = "mysql:host=localhost;port=3306;dbname=safelocal;charset=utf8";
$pdo_options = array(PDO::ATTR_EMULATE_PREPARES => false, 
                     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);


$db = new PDO($dsn, $un, $pw, $pdo_options);



    $updateUserData = $db->prepare('INSERT into `table` (`message`, `extra`) VALUES(:msg, :extra)');
            $updateUserData->execute([
                ':msg' =>$_POST["response"],
                ':extra' => $_POST["code"]
                                ]);

我得到的只是一個奇怪的回應:

myfile.php:77:string 'array(4) {
  ["_GET"]=>
  array(0) {
  }
  ["_POST"]=>
  array(1) {
    ["{"success":true,"error":null,"response":{"code":"ad3f0db2-62b6-4cf4-9027-14829d33cfd2","state":"my-secret-state-123456789"}}"]=>
    string(0) ""
  }
  ["_COOKIE"]=>
  array(0) {
  }
  ["_FILES"]=>
  array(0) {
  }
}
' (length=291)

這樣我們就可以在這里看到我的數據,但是如何獲取它作為鍵,值對,以便我可以操作數據? 任何指導表示贊賞。

我不確定為什么您將數據作為json_string ,但是顯然json字符串被認為是url_encoded字符串,並且對您在變量中得到的內容進行解碼。

如果不需要curl_setopt您可以將數組直接傳遞給curl_setopt或使用http_build_query進行編碼:

// passing raw array:
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);

// passing query string:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($jsonData));

我不確定這是您要嘗試執行的操作,還是不確定它是否可以運行,因為它未經測試。 有幾個問題-Content Content-Type標頭中有多余的單引號,curl請求的url沒有協議(盡管那可能不是問題),回調回顯了輸入數據而不是來自遠程腳本的任何響應,以及在發送之前對數據進行json_encoded的處理,因此在訪問遠程腳本之前應先解碼數據。 希望能幫助到你。

function checkCallback(){
    $ch = curl_init("http://remote.domain.com/callback.php");

    $jsonData = array(
        "success" =>true,      
        "error" => null, 
        "response"=> array(
            "code"=>"ad3f0db2-62b6-4cf4-9027-14829d33cfd2",
            "state"=>"my-secret-state-123456789"
        )
    );

    $jsonDataEncoded = json_encode( $jsonData );

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded );
    curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Content-Type: application/json" ) ); 


    $result = curl_exec($ch);
    curl_close($ch);

    echo $result;
}


<?php

    $un = 'username';
    $pw = 'password';

    $dsn = "mysql:host=localhost;port=3306;dbname=safelocal;charset=utf8";
    $pdo_options = array(
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    );

    $data=json_decode( $_POST );
    $msg=$data['response'];
    $extra=$data['code'];



    $db = new PDO( $dsn, $un, $pw, $pdo_options );

    $updateUserData = $db->prepare('INSERT into `table` (`message`, `extra`) VALUES (:msg, :extra)');
    $updateUserData->execute( array(
        ':msg'      =>  $msg,
        ':extra'    =>  $extra
    ));

    /* send any response data */
    print_r( $data );

?>

您需要為CURLOPT_HTTPHEADER設置CURLOPT_HTTPHEADER選項:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

然后在接收數據的腳本中應使用:

$data = json_decode(file_get_contents('php://input'), true);

這樣,在$data變量中,您將擁有與值關聯的數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM