2017-02-09 9 views
1

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

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

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

Сохранить телега с использованием НТТР Post со следующими параметрами:

  • session_id
  • first_name
  • last_name
  • город

Etc.

И у меня есть t o отправьте эти данные по адресу:

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

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

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

Как отправить данные в API через HTTP-сообщение, как правило, сделано?

+0

Учитывая, используя AJAX для отправки данных? –

+0

Нет AJAX, просто сообщение HTTP. –

+1

Поскольку вы отметили PHP, вам лучше всего запустить запрос CURL. [** Это **] (https://davidwalsh.name/curl-post) - хороший пример того, как это сделать. – Darren

ответ

1

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

Завиток() ниже будет это делать, если вы передаете его:

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

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

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

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

Тогда просто вызовите функцию, как:

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

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

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; 

} 

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

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 Glad Я могу помочь –