簡體   English   中英

php JSON管理:從解碼的JSON對象獲取值

[英]php JSON management: get a value from a decoded JSON object

我正在構建一個腳本來驗證與Apple的itunesconnect網站(iphone開發人員)的交易收據,但我不知道代碼中的錯誤在哪里。 我想獲取“狀態”值。

請幫助我找出我在做什么錯:

 <?php
    include("config.php");

    $receipt = json_encode(array("receipt-data" => $_GET["receipt"]));
    $response_json = do_post_request($url, $receipt);
    $response = json_decode($response_json);

    //Here's where I try to get the "status" key but doesn't work

    echo $response['status']; 
    //echo $response->status; 

    function do_post_request($url, $data)
    {
       //initialize cURL
     $ch = curl_init();

     // set the target url
     curl_setopt($ch, CURLOPT_URL,$url);

     // howmany parameter to post
     curl_setopt($ch, CURLOPT_POST, 1);

     // the receipt as parameter
     curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

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

    ?>

iPhone的答案如下:

{"receipt":{"item_id":"327931059", "original_transaction_id":"1000000000074412", "bvrs":"1.0", "product_id":"sandy_01", "purchase_date":"2009-09-29 16:12:46 Etc/GMT", "quantity":"1", "bid":"com.latin3g.chicasexy1", "original_purchase_date":"2009-09-29 16:12:46 Etc/GMT", "transaction_id":"1000000000074412"}, "status":0}

但目前只有“狀態”:0很重要-謝謝

json_decode()手冊上

返回一個對象,或者如果可選的assoc參數為TRUE,則返回一個關聯數組。 如果無法解碼json或編碼的數據深於遞歸限制,則返回NULL。

因此,請為第二個參數發送TRUE

$response = json_decode($response_json, true);

或使用對象語法訪問解碼的JSON

$response->status; 

編輯

隔離測試

$json = <<<JSON
{"receipt":{"item_id":"327931059", "original_transaction_id":"1000000000074412", "bvrs":"1.0", "product_id":"sandy_01", "purchase_date":"2009-09-29 16:12:46 Etc/GMT", "quantity":"1", "bid":"com.latin3g.chicasexy1", "original_purchase_date":"2009-09-29 16:12:46 Etc/GMT", "transaction_id":"1000000000074412"}, "status":0}
JSON;

$response = json_decode( $json );

echo $response->status;

$response2 = json_decode( $json, true );

echo $response2['status'];

輸出是

00

您應該可以使用:

$response->status;

將可選的true參數傳遞給json_decode函數會將結果作為關聯數組返回。

您是否檢查過response_json變量以檢查數據是否正確反序列化? 即:

var_dump($response);

哪個應該產生:

object(stdClass)#1 (2) {
["receipt"]=>
  object(stdClass)#2 (9) {
    ["item_id"]=>
    string(9) "327931059"
    ["original_transaction_id"]=>
    string(16) "1000000000074412"
    ["bvrs"]=>
    string(3) "1.0"
    ["product_id"]=>
    string(8) "sandy_01"
    ["purchase_date"]=>
    string(27) "2009-09-29 16:12:46 Etc/GMT"
    ["quantity"]=>
    string(1) "1"
    ["bid"]=>
    string(22) "com.latin3g.chicasexy1"
    ["original_purchase_date"]=>
    string(27) "2009-09-29 16:12:46 Etc/GMT"
    ["transaction_id"]=>
    string(16) "1000000000074412"
  }
  ["status"]=>
  int(0)

}

暫無
暫無

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

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