首页 文章

FatSecret API - food.get方法无效签名

提问于
浏览
2

你好
我是FatSecret Platform API的新手,我开发了一个PHP脚本
使用foods.search方法获取食物细节
这里是foods.search方法Api调用的例子,使用了Curl和作品
完善 .

<?PHP
$ consumer_key = "xxxxxxx";
$ secret_key = "xxxxxxx";
//签名基本字符串
// <HTTP方法>&<请求URL>&<规范化参数>
$ base = rawurlencode("GET") . "&";
$ base . =“http%3A%2F%2Fplatform.fatsecret.com%2Frest%2Fserver .
API&“;

//按abc排序params ....构建正确的唯一签名所必需的
$ 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&",
真正)); //用消费者秘密替换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);
echo '<pre>';
if($ error == 0){
if($ info ['http_code'] == '200')
echo $ output;
其他
死('Status INFO : ' . $ info ['http_code']);

}

其他
死('Status ERROR : ' . $ error);

function loadFoods($ url)
{

//创建curl资源
$ ch = curl_init();

//设置网址
curl_setopt($ ch,CURLOPT_URL,$ url);

//将传输作为字符串返回
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1);

// $ output包含输出字符串
$ output = curl_exec($ ch);

$ error = curl_error($ ch);

$ info = curl_getinfo($ ch);
//关闭curl资源以释放系统资源
curl_close($ CH);

返回数组($ output,$ error,$ info);

}

?>

上面的脚本工作完美,并使用 . 检索食物细节
搜索方法 . 但是

当我使用food.get方法使用food_id检索数据时,它说
无效的签名错误,这是food.get方法api调用示例,我
已经给出了正确的密钥并传递了food_id参数 . 可以帮助
我解决了这个问题,我对这段代码感到非常震惊 . 它说无效
签名错误 .

<?PHP
$ consumer_key = "xxxxxxxxx";
$ secret_key = "xxxxxxxxxx";
//签名基本字符串
// <HTTP方法>&<请求URL>&<规范化参数>
$ base = rawurlencode("GET") . "&";
$ base . = "http%3A%2F%2Fplatform.fatsecret.com%2Frest%2Fserver.api&";

//按abc排序params ....构建正确的唯一签名所必需的
$ 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&",
真正)); //用消费者秘密替换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);
echo '<pre>';
if($ error == 0){
if($ info ['http_code'] == '200')
echo $ output;
其他
死('Status INFO : ' . $ info ['http_code']);

}

其他
死('Status ERROR : ' . $ error);

function loadFoods($ url)
{

//创建curl资源
$ ch = curl_init();

//设置网址
curl_setopt($ ch,CURLOPT_URL,$ url);

//将传输作为字符串返回
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1);

// $ output包含输出字符串
$ output = curl_exec($ ch);

$ error = curl_error($ ch);

$ info = curl_getinfo($ ch);
//关闭curl资源以释放系统资源
curl_close($ CH);

返回数组($ output,$ error,$ info);

}

?>

帮助我代码中的错误是什么,并帮助我解决问题
我必须在我的项目中使用此API

谢谢等待你的回复....

1 回答

  • 3

    你应该通过alpha订购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";
    

相关问题