AJAX перенаправление из CURL с параметрами ассоциативного массива

Я пытаюсь получить доступ к другому сайту, используя запрос POST через ajax. Таким образом, поток доступа стал:

Запрос AJAX → PHP CURL → www.somedomain.com

Это код для запроса AJAX. Я гарантирую, что он правильно передает параметры:

$("#new_access_token").submit(function(ev){

$.ajax({
 url : "back_access/access_code.php",
 type : "POST",
 data: "access_token[app_id]=601&access_token[subscriber_num]="+$("#input-phone-number").val(),

 success : function(res){
 console.log(res);
 }
});

return false;
 });

Скрипт php curl находится здесь (access_code.php):

$ch = curl_init();

$url = "http://developer.globelabs.com.ph/oauth/request_authorization";

$data = array("access_token" => array(

 'app_id' => $_POST['access_token']['app_id'],
 'subscriber_number' => $_POST['access_token']['subscriber_number']

));

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

$result = curl_exec($ch);

print_r($result);

curl_close($ch);

Он возвращает ошибку "500". При правильных параметрах в терминале curl и Advanced Rest Client он возвращает страницу. Однако этот скрипт не работает. Как управлять параметрами?

1 ответ

потому что вы отправляете многомерный массив, поэтому вам придется строить строку POST вручную, а не передавать весь массив в. Вы должны добавить заголовок curl с формой Type multipart и другими относительными вещами, такими как accept, content-length т.д.

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));

если вы сериализуете или jsone_encode всего поля, вы можете отправить данные, но в этом случае вам также нужно будет захватить данные и unserialize/json_decode с конца сервера.

licensed under cc by-sa 3.0 with attribution.