Отправка данных в API через HTTP Post

1

У меня есть API-вызов, который мне нужен, чтобы сохранить заказ корзины покупок. Чтобы получить содержимое заказа, легко:

https://domain.com/GetCart/{SessionID}

Вышеуказанный URL-адрес возвращает XML файл с данными.

Однако, чтобы сохранить содержимое корзины, я не уверен, что мне нужно делать. Все документы говорят:

Сохраните корзину, используя HTTP-сообщение со следующими параметрами:

  • идентификатор сессии
  • имя
  • Фамилия
  • город

И т.п.

И я должен отправить эти данные:

https://domain.com/SaveCart/{SessionID}

Мой вопрос: как я могу отправить эти данные через HTTP-сообщение? Должен ли я помещать https://domain.com/SaveCart/ {SessionID} в параметр действия формы? Например:

<form action="https://domain.com/SaveCart/{SessionID}">

Как обычно выполняется передача данных в API через HTTP Post?

  • 0
    Учитывая использование AJAX для отправки данных?
  • 0
    Нет AJAX, только HTTP-пост.
Показать ещё 3 комментария
Теги:
http-post

1 ответ

1
Лучший ответ

Вы должны сделать вызов cURL с помощью POST, который передает обязательные поля в качестве полей для сообщений.

Ниже приведена функция curl(), если вы передадите ее:

$url = 'https://domain.com/SaveCart/{SessionID}';

С {SessionID} заменяется идентификатором сеанса и:

$fields[ 'first_name' ] = 'Bob';
$fields[ 'last_name' ]  = 'Smith';
$fields[ 'city' ]       = 'Seattle';

С Боб, Смитом и Сиэтлом был заменен соответствующий текст;

Затем просто вызовите функцию как:

$result = curl( $url, $fields );

Функция URLify ниже curl() вызывается curl(), чтобы преобразовать $ fields в формат, необходимый для POST.

function curl( $url, $fields = FALSE, $encode = TRUE, $tries = 1 ) {

  $ch = curl_init();
  curl_setopt( $ch, CURLOPT_URL, $url );

  if ( ( $fields == FALSE ) ) {
    curl_setopt( $ch, CURLOPT_HEADER, 0 );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  } else {
    if ( is_array( $fields ) ) {
      $fields_string = URLify( $fields, $encode );
      curl_setopt( $ch, CURLOPT_POST, count( $fields ) );
    } else {
      $fields_string = $fields;
      curl_setopt( $ch, CURLOPT_POST, 1 );
    }
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $fields_string );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 60 );
  }

  do {

    $output = curl_exec( $ch );

    $tries = $tries - 1;

    if ( ( curl_errno( $ch ) <> FALSE ) AND ( $tries > 0 ) ) {
      echo 'ERROR in curl: WILL RETRY AFTER 1 SECOND SLEEP! error number: ' . curl_errno( $ch ) . ' error : ' . curl_error( $ch ) . " url: $url";
      sleep( 1 );
    }

  } while ( ( curl_errno( $ch ) <> FALSE ) AND ( $tries > 0 ) );

  // Check if any error occurred
  if ( curl_errno( $ch ) ) {
    echo 'ERROR in curl: NO MORE RETRIES! error number: ' . curl_errno( $ch ) . ' error : ' . curl_error( $ch ) . " url: $url";
  }

  curl_close( $ch );
  return $output;

}

Эта функция вызывается функцией curl():

function URLify( $arr, $encode = FALSE ) {

    $fields_string = '';
    foreach( $arr as $key => $value ) {
        if ( $encode ) {
      $key = urlencode( $key );
            $value = urlencode( $value );
        }
        $fields_string .= $key . '=' . $value . '&';
    }
    $fields_string = substr( $fields_string, 0, ( strlen( $fields_string ) - 1 ) );

    return $fields_string;

}
  • 0
    Большое спасибо за подробное объяснение.
  • 1
    @ GTSJoe Рад, что я мог помочь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню