カスタムREST APIデモを書いています。デモで数字と文字列を返すことができるようになりましたが、他のREST APIのようにJSONオブジェクトを返すようにします。
デモでは、Magento 2 API をcurlで呼び出し(つまり、顧客情報を取得:http://localhost/index.php/rest/V1/customers/1)、curlでJSON文字列を返します。
"{\" id \ ":1、\" group_id \ ":1、\" default_billing \ ":\" 1 \ "、\" created_at \ ":\" 2016-12-13 14:57:30 \ " 、\ "updated_at \":\ "2016-12-13 15:20:19 \"、\ "created_in \":\ "Default Store View \"、\ "email \":\ "75358050@qq.com \ "、\" firstname \ ":\" azol \ "、\" lastname \ ":\" young \ "、\" store_id \ ":1、\" website_id \ ":1、\" addresses \ ":[{ \ "id \":1、\ "customer_id \":1、\ "region \":{\ "region_code \":\ "AR \"、\ "region \":\ "Arad \"、\ "region_id \ ":279}、\" region_id \ ":279、\" country_id \ ":\" RO \ "、\" street \ ":[\" abc \ "]、\" telephone \ ":\" 111 \ "、\"郵便番号\":\"1111 \ "、\" city \ ":\" def \ "、\" firstname \ ":\" azol \ "、\" lastname \ ":\" young \ "、\" default_billing \ ":true}]、 \ "disable_auto_group_change \":0} "
応答はJSON文字列ですが、すべてのキーにはスラッシュが含まれています。でスラッシュを削除できることは知っていますstr_replace
が、それは愚かな方法です。キー内にスラッシュなしでJSONオブジェクトを返す他の方法はありますか?
************ 2016.12.27更新************
ここにテストコードを貼り付けました。
$method = 'GET';
$url = 'http://localhost/index.php/rest/V1/customers/1';
$data = [
'oauth_consumer_key' => $this::consumerKey,
'oauth_nonce' => md5(uniqid(rand(), true)),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_token' => $this::accessToken,
'oauth_version' => '1.0',
];
$data['oauth_signature'] = $this->sign($method, $url, $data, $this::consumerSecret, $this::accessTokenSecret);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => [
'Authorization: OAuth ' . http_build_query($data, '', ','),
'Content-Type: application/json'
],
]);
$result = curl_exec($curl);
curl_close($curl);
// this code has slash still
//return stripslashes("hi i\" azol");
// has slashes still
//return stripcslashes("{\"id\":1,\"group_id\":1,\"default_billing\":\"1\",\"created_at\":\"2016-12-13 14:57:30\",\"updated_at\":\"2016-12-13 15:20:19\",\"created_in\":\"Default Store View\",\"email\":\"75358050@qq.com\",\"firstname\":\"azol\",\"lastname\":\"young\",\"store_id\":1,\"website_id\":1,\"addresses\":[{\"id\":1,\"customer_id\":1,\"region\":{\"region_code\":\"AR\",\"region\":\"Arad\",\"region_id\":279},\"region_id\":279,\"country_id\":\"RO\",\"street\":[\"abc\"],\"telephone\":\"111\",\"postcode\":\"1111\",\"city\":\"def\",\"firstname\":\"azol\",\"lastname\":\"young\",\"default_billing\":true}],\"disable_auto_group_change\":0}");
// has slashes still
//return json_encode(json_decode($result), JSON_UNESCAPED_SLASHES);
// this code will throw and expcetion:
// Undefined property: *****\*****\Model\Mycustom::$_response
//return $this->_response->representJson(json_encode($data));
return $result;
$json_string = stripslashes($result)
とreturn json_decode($json_string, true);
return json_encode($result, JSON_UNESCAPED_SLASHES);
ますか?