2014-05-23 1 views
-1

나는 컬을 사용하여 API (메일 침프)에 요청을 보내려고. GET과 함께 작동하지만 GET-URl을 POST를 통해 적절한 연관 PHP 배열로 변환하는 데 문제가 있습니다. 편집 MarcB가 주석으로, 요청이 PHP는 - 연관 배열의 구조를 얻을 수없는 권리

내가 asteriks (*이)로 변수의 값을 대체 있습니다 등을하는 아이폰에 제한과 같은 몇 가지 부정적인 측면을 가지고 GET 때문입니다.

Array 
(
    [apikey] => *** 
    [order] => Array 
     (
      [id] => *** 
      [campaign_id] => *** 
      [email_id] => *** 
      [total] => *** 
      [order_date] => *** 
      [shipping] => *** 
      [tax] => *** 
      [store_id] => *** 
      [store_name] => *** 
      [items] => Array 
       (
        [0] => Array 
         (
          [product_id] => *** 
          [category_id] => *** 
          [category_name] => *** 
         ) 

        [1] => Array 
         (
          [product_id] => *** 
          [category_id] => *** 
          [category_name] => *** 
         ) 

        ... 

       ) 

     ) 

) 


응답은 :

Validation error: {\"order\":\"Please enter a struct\\\/associative array\"} 


상관

https://us3.api.mailchimp.com/2.0/ecomm/order-add.json?apikey=*** 
&order[id]=*** 
&order[campaign_id]=*** 
&order[email_id]=*** 
&order[total]=*** 
&order[store_id]=*** 
&order[items][0][product_id]=*** 
&order[items][0][category_id]=*** 
&order[items][0][category_name]=*** 
&order[items][1][product_id]=*** 
&order[items][1][category_id]=*** 
&order[items][1][category_name]=*** 
... 


이는 POST 요청에 대한 PHP 배열이다
이 작용 GET-파라미터 아이디어, 내가 여기서 누락 된 부분은 무엇입니까? 구조가 같지 않아?

-
UPDATE :
이는 컬 코드는 다음과 같습니다 스타터

function httpPost($url,$params) 
{ 
    $postData = ''; 
    //create name value pairs seperated by & 
    foreach($params as $k => $v) 
    { 
     $postData .= $k . '='.$v.'&'; 
    } 
    rtrim($postData, '&'); 

    $ch = curl_init(); 

    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
    curl_setopt($ch,CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_POST, count($postData)); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);  

    $output=curl_exec($ch); 
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    curl_close($ch); 
    return array($output, $httpCode); 

} 

print_r(httpPost($mc_api_url, $curl_data)); 
+2

긴 쿼리 문자열입니다. 많은 데이터는 GET 쿼리가 아닌 게시를 통해 이동해야합니다.검색어 문자열은 이유 때문에 길이가 제한되어 있으므로 어딘가에서 잘릴 수 있습니다. –

+0

안녕하세요 @ MarcB, 네 감사합니다. 당신 말이 맞습니다. 그래서 POST 대신 GET하지 말고 싶습니다. GET은 작동한다면 그냥 시도했지만 POST를 사용할 때이 오류가 나타나서 왜 볼 수 없습니까? – Chris

+0

글쎄, 유효성 검사 오류가 JSON처럼 보입니다. mailchimp API가 json을 기대합니까? 그런 경우에 적절한 json_encode()를 수행하고 있습니까? –

답변

1

OK, 당신은 수동으로 쿼리 문자열을 구축해서는 안됩니다. 연관 배열을 CURLOPT_POSTFIELDS으로 전달하거나 http_build_query() (http://www.php.net/manual/en/function.http-build-query.php)과 같은 것을 사용하여 쿼리 문자열을 작성하십시오.

둘째, 당신은 당신의 CURLOPT_POST 필드 true의 값을 사용한다.

물론이 모든 API는 application/x-www-form-urlencoded POST 요청을 기대하고 가정된다. 내 생각에 JSON처럼 응답이있는 것처럼 보일 수도 있습니다.

http://apidocs.mailchimp.com/api/2.0/

노트이의 메일 침프 API 문서에 대한 간단한 눈 : 적절한 매개 변수를 사용하여 API 엔드 포인트에 JSON 객체를 게시하여

요청 데이터를 API로 전달됩니다.

실제로이 API 버전을 사용하는 경우 ContentType 헤더로 application/json을 사용하여 예상되는 형식으로 JSON 개체를 만들어야합니다.

도움이된다면

, 난 당신이 더 쉽게 편안하고 서비스와 상호 작용하는 데 사용하실 수 있습니다 매우 가벼운 컬을 기반 REST 클라이언트를 가지고있다. 여기 체크 아웃 :

0

https://github.com/mikecbrant/php-rest-client 나는 같은 오류가 있고, 내 컬 호출에 몇 가지 추가 조건을 추가하여 작업을 얻었다. 다음을 추가하여 작동하는지 확인하십시오.

$data = json_encode($data); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);