#php #wordpress #rest #woocommerce
#php #wordpress #остальное #woocommerce
Вопрос:
Привет, я пытаюсь использовать woocommerce API и отправлять запросы на данные клиентов и добавлять внутренний идентификатор клиента.
Вот мои данные
Я попытался передать эти данные через post-запрос
$extension = "/wp-json/wc/v3/customers?";
$method = "POST";
$data = [
'email' => 'johndoe@example.com',
'first_name' => 'John',
'last_name' => 'Doe',
'username' => 'johndoe',
'billing' => [
'first_name' => 'John',
'last_name' => 'Doe',
'company' => '',
'address_1' => '969 Market',
'address_2' => '',
'city' => 'San Francisco',
'state' => 'CA',
'postcode' => '94103',
'country' => 'US',
'email' => 'john.doe@example.com',
'phone' => '(555) 555-5555',
],
'shipping' => [
'first_name' => 'John',
'last_name' => 'Doe',
'company' => '',
'address_1' => '969 Market',
'address_2' => '',
'city' => 'San Francisco',
'state' => 'CA',
'postcode' => '94103',
'country' => 'US'
],
'meta_data' => [
'proceed_id' => '2'
]
];
$response = woo_api_request($extension, $method, $data);
Ниже приведен ответ, когда я прокомментировал метаданные. Но, как вы можете видеть, есть массив метаданных.
{"id":7,"date_created":"2021-01-04T21:50:58","date_created_gmt":"2021-01-04T21:50:58","date_modified":"2021-01-04T21:51:02","date_modified_gmt":"2021-01-04T21:51:02","email":"johndoe@example.com","first_name":"John","last_name":"Doe","role":"customer","username":"johndoe","billing":{"first_name":"John","last_name":"Doe","company":"","address_1":"969 Market","address_2":"","city":"San Francisco","postcode":"94103","country":"US","state":"CA","email":"john.doe@example.com","phone":"(555) 555-5555"},"shipping":{"first_name":"John","last_name":"Doe","company":"","address_1":"969 Market","address_2":"","city":"San Francisco","postcode":"94103","country":"US","state":"CA"},"is_paying_customer":false,"avatar_url":"https://secure.gravatar.com/avatar/fd876f8cd6a58277fc664d47ea10ad19?s=96amp;d=mmamp;r=g","meta_data":[],"_links":{"self":[{"href":"https://localhost.com/wp-json/wc/v3/customers/7"}],"collection":[{"href":"https://localhost.com/wp-json/wc/v3/customers"}]}}
Но когда я пытаюсь передать proceed_id, я получаю сообщение об ошибке.Это ошибка
{"code":"rest_invalid_param","message":"Invalid parameter(s): meta_data","data":{"status":400,"params":{"meta_data":"meta_data is not of type array."}}}
Нужно ли регистрировать метаданные? Или я что-то еще упускаю?
ОБНОВЛЕНИЕ 1:
Я попытался изменить способ структурирования моих meta_data следующим образом:
'meta_data' => [
['key' => "proceed_id"],
['value' => "4"]
]
Похоже, что сейчас не выдается ошибка с типом массива, но я получаю уведомление :
Примечание: неопределенный индекс: ввод wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-customers-v2-controller.php в строке 106
Ответ №1:
Согласно документации WooCommerce REST API, вы должны предоставить meta_data в виде массива. Скорее всего, один массив PHP преобразуется в объект JSON вместо массива.
В подобных случаях может помочь, если вы попытаетесь сделать запрос вручную, используя Postman или какой-либо подобный инструмент.
Если я правильно понимаю документацию, это должно сработать:
'meta_data' => [
['proceed_id' => 4],
]
Комментарии:
1. Да, это была проблема. Мне нужно было преобразовать данные в формат массива, но я не был уверен, как это сделать. Спасибо, я опубликовал точный ответ, который сработал для меня ниже. Что близко к вашему ответу.
Ответ №2:
'meta_data' =>
[
[
'key' => "proceed_id",
'value' => "4"
]
]
Этот метод сработал. Поскольку документация классифицирует meta_data как массив, а не объект. Вам нужно передать его как таковой.
Нашел ответ здесь:
https://github.com/claudiosanches/woocommerce-extra-checkout-fields-for-brazil/issues/56
Полный parms :
$data = [
'email' => 'johndoe6@example.com',
'first_name' => 'John',
'last_name' => 'Doe',
'username' => 'johndoe6',
'proceed_id' => '2',
'billing' => [
'first_name' => 'John',
'last_name' => 'Doe',
'company' => '',
'address_1' => '969 Market',
'address_2' => '',
'city' => 'San Francisco',
'state' => 'CA',
'postcode' => '94103',
'country' => 'US',
'email' => 'john.doe@example.com',
'phone' => '(555) 555-5555',
],
'shipping' => [
'first_name' => 'John',
'last_name' => 'Doe',
'company' => '',
'address_1' => '969 Market',
'address_2' => '',
'city' => 'San Francisco',
'state' => 'CA',
'postcode' => '94103',
'country' => 'US'
],
'meta_data' => [
['key' => "proceed_id",
'value' => "4"]
]
];