2013-04-09 1 views
2

FatSecret API - food.get 방법 잘못된 서명이

안녕
내가 FatSecret 플랫폼 API에 새로운 오전과 내가 여기에 방법
을 foods.search 사용
액세스 식품 세부 사항에 PHP 스크립트를 개발은 foods.search 방법입니다 API 호출 예제, Curl을 사용하고
이 완벽하게 작동합니다.

<? php
$ consumer_key = "xxxxxxx";
$ secret_key = "xxxxxxx";
// 서명 자료 문자열
// < HTTP 방법 > & < 요청 URL > & < 정규화 매개 변수 >
$ 기본 = rawurlencode ("GET") "&를.";
$ base. = "http % 3A % 2F % 2Fplatform.fatsecret.com % 2Frest % 2Fserver
api &";

// 올바른 고유 한 서명을 작성하려면 abc ....로 매개 변수를 정렬하십시오.
$ params = "method = foods.search &";
$ params. = "oauth_consumer_key = $ consumer_key &"; // 소비자 키
$ params. = "oauth_nonce = 123 &";
$ params. ""oauth_signature_method = HMAC-SHA1 & ";
$ params. ""oauth_timestamp = ". time()."& ";
$ params. = "oauth_version = 1.0 &";
$ params. = "search_expression =". urlencode ($ _ GET [ 'pasVar']);
$ params2 = rawurlencode ($ params);
$ base. = $ params2;

// 암호화하십시오!
$ sig = base64_encode (hash_hmac ('sha1', $ base, "$ secret_key &",
true)); // xxx를 소비자 기밀로 바꿉니다

// 이제 검색 결과를 얻고
$ url = "http://platform.fatsecret.com/rest/server.api?"로 작성하십시오.
$ params. "& oauth_signature =". rawurlencode ($ sig);

// $ food_feed = file_get_contents ($ url);
list ($ output, $ error, $ info) = loadFoods ($ url);
'<pre>';
경우 ($ 에러 == 0) {
    경우 ($ 정보 [ 'HTTP_CODE'] == '200')
        에코 $ 출력;
    else
        die ('Status INFO :'. $ info [ 'http_code']);

}

else
    die ('상태 오류 :').$ 오류);

함수 loadFoods ($의 URL)
{

        // 컬 자원을
        $의 CH = curl_init를 생성;

       는 URL
        curl_setopt ($ ch를, CURLOPT_URL, $의 URL)을 설정 //;

        문자열로
        curl_setopt을 전송을 반환 // ($ ch를, CURLOPT_RETURNTRANSFER, 1);

        // $ 출력은 출력 문자열
        $ 출력 = curl_exec ($의 CH)를 함유;

        $ error = curl_error ($ ch);

        $ info = curl_getinfo ($ ch);
        // 가까운 컬 자원 시스템 자원
        curl_close ($의 채널)을 확보하기 위해;

        반환 배열 ($ output, $ error, $ info);

}

? >

내가 데이터가
잘못된 서명 오류가, 여기 food.get 방법 API 호출의 예를 말한다 food_id 사용하여 검색 할 수 food.get 방법을 사용할 때 method.But


검색을 사용하여 완벽하고 검색 식품 세부 사항을 작업 위의 스크립트, 나는
올바른 키를 부여하고 food_id 매개 변수를 전달했습니다. 누군가가
이 문제를 해결하기 위해 도움을 줄 수 있습니다. 나는이 코드를 실제로 쳤습니다.
서명 오류가 발생했습니다.

<? php
$ consumer_key = "xxxxxxxxx";
$ secret_key = "xxxxxxxxxx";
// 서명 자료 문자열
// < HTTP 방법 > & < 요청 URL > & < 정규화 매개 변수 >
$ 기본 = rawurlencode ("GET") "&를.";
$ base. = "http % 3A % 2F % 2Fplatform.fatsecret.com % 2Frest % 2Fserver.api &";

// 올바른 고유 한 서명을 작성하려면 abc ....로 매개 변수를 정렬하십시오.
$ params = "method = food.get &";
$ params. = "oauth_consumer_key = $ consumer_key &"; // 소비자 키
$ params. ""oauth_nonce = ". rand()."& ";
$ params.= "oauth_signature_method = HMAC-SHA1 &";
$ params. ""oauth_timestamp = ". time()."& ";
$ params. = "oauth_version = 1.0 &";
$ params. = "food_id =". urlencode ($ _ GET [ 'pasVar']);
$ params2 = rawurlencode ($ params);
$ base. = $ params2;

// 암호화하십시오!
$ sig = base64_encode (hash_hmac ('sha1', $ base, "$ secret_key &",
true)); // xxx를 소비자 기밀로 바꿉니다

// 이제 검색 결과를 얻고
$ url = "http://platform.fatsecret.com/rest/server.api?"로 작성하십시오.
$ params. "& oauth_signature =". rawurlencode ($ sig);

// $ food_feed = file_get_contents ($ url);
list ($ output, $ error, $ info) = loadFoods ($ url);
'<pre>';
경우 ($ 에러 == 0) {
    경우 ($ 정보 [ 'HTTP_CODE'] == '200')
        에코 $ 출력;
    else
        die ('Status INFO :'. $ info [ 'http_code']);

}

else
    die ('상태 오류 :').$ 오류);

함수 loadFoods ($의 URL)
{

        // 컬 자원을
        $의 CH = curl_init를 생성;

       는 URL
        curl_setopt ($ ch를, CURLOPT_URL, $의 URL)을 설정 //;

        문자열로
        curl_setopt을 전송을 반환 // ($ ch를, CURLOPT_RETURNTRANSFER, 1);

        // $ 출력은 출력 문자열
        $ 출력 = curl_exec ($의 CH)를 함유;

        $ error = curl_error ($ ch);

        $ info = curl_getinfo ($ ch);
        // 가까운 컬 자원 시스템 자원
        curl_close ($의 채널)을 확보하기 위해;

        반환 배열 ($ output, $ error, $ info);

}

? >

코드에서 오류가 무엇을 도와 그리고 난 당신의 응답을 기다리고 내 프로젝트에

덕분에이 API를 사용할 필요가 날
으로 문제를 해결하는 데 도움이 ....

+0

나는 위의 코드를 사용했지만 foods.serach 메소드를 사용하여 정식 서명 문제에 직면했습니다. –

답변

3

당신은 주문해야 너는 알파에 의하여 params. 이렇게 순서대로해야합니다 :

$params = "food_id=".urlencode($_GET['pasVar'])."&"; 
$params .= "method=food.get&"; 
$params .= "oauth_consumer_key=$consumer_key&"; // ur consumer key 
$params .= "oauth_nonce=".rand()."&"; 
$params .= "oauth_signature_method=HMAC-SHA1&"; 
$params .= "oauth_timestamp=".time()."&"; 
$params .= "oauth_version=1.0";