Как отправить информацию в этот API с помощью cURL и PUT? - PullRequest
0 голосов
/ 30 апреля 2020

Я работаю с API, который задокументирован здесь: https://cutt.ly/BygHsPV

Документация немного тонкая, но я пытаюсь понять ее как можно лучше. До середины следующей недели не будет разработчика из создателя API, и я надеялся завершить работу до этого.

По сути, я пытаюсь обновить согласие клиент. Насколько я могу понять из документации в разделе API -> Customer, мне нужно отправить информацию через PUT в / customer / {customerId}. Этот объект имеет массив с именем "CommunicationChoices".

Переход в Объекты -> CustomerUpdate Я нахожу "CommunicationChoices", который указан как "Тип: список CommunicationChoiceRequest". Этот объект выглядит следующим образом:

{
  "choice": true,
  "typeCode": ""
}

Делая все возможное, понимаю это, я сделал эту функцию:

function update_customer_consent() {
    global $userPhone, $username, $password;

    // Use phone number to get correct user
    $url = 'https://apiurlredacted.com/api/v1/customers/' . $userPhone .'?customeridtype=MOBILE';

    // Initiate cURL.
    $ch = curl_init( $url );

    // Specify the username and password using the CURLOPT_USERPWD option.
    curl_setopt( $ch, CURLOPT_USERPWD, $username . ":" . $password );

    // Tell cURL to return the output as a string instead
    // of dumping it to the browser.
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

    // Data to send

    $data = [
        "communicationChoices" => [
            "communicationChoiceRequest" => [
                "choice" => true,
                "typeCode" => "SMS"
            ]
        ]
    ];

    $json_payload = json_encode($data);

    print_r($json_payload);

    // Set other options
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($json_payload)));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_payload);

    // Execute the cURL request

    $response = curl_exec($ch);

    // Check for errors.
    if( curl_errno( $ch ) ) :
       // If an error occured, throw an Exception.
       throw new Exception( curl_error( $ch ) );
    endif;

    if (!$response)
    {
        return false;
    } else {
        // Decode JSON
        $obj = json_decode( $response );
    }

    print_r($response);

}

Я понимаю, что это очень трудно отладить, не зная, что в API и с ограниченной документацией, но я подумал, что спросить здесь все равно стоило.

По сути, $ json_payload, похоже, идеально подходит JSON объект. Ответ от API, однако, является кодом ошибки, который означает неизвестную ошибку. Поэтому я, должно быть, делаю что-то не так. Может быть, кто-то имеет больше опыта работы с API и такой документацией и может видеть, что я действительно должен отправлять и как.

Любая помощь или руководство будут высоко оценены!

1 Ответ

0 голосов
/ 30 апреля 2020

перед тестированием своего кода вы можете использовать форму, предоставленную в документации API.

при переходе к API > Customers > /customers/{customerId} (GET) вы увидите форму в правой части страницы ( прокрутить вверх). Вы должны указать необходимые значения в форме и нажать кнопку «Отправить». Вы обязательно получите действительные данные для communicationChoices на основе результата из раздела Текст ответа под кнопкой Отправить.

Теперь следуйте структуре данных объекта communicationChoices, полученного из результата, и попробуйте то же самое в API > Customers > /customers/{customerId} (PUT) форме.

используя формы API, вы можете мгновенно увидеть успех или ошибку из вашего ввода (структура данных), а затем преобразовать его в свой код.

...