嗨
,我是 FatSecret 平台 API 的新手,我开发了一个 PHP 脚本来
使用 foods.search 方法访问食物详细信息
这是 food.search 方法 Api 调用示例,使用 Curl 并且效果
很好。
<?php
$consumer_key = "xxxxxxx";
$secret_key = "xxxxxxx";
//签名基字符串
//<HTTP Method>&<Request URL>&<Normalized Parameters>
$base = 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 替换为 Consumer Secret
//现在获取搜索结果并将它们写下来
$url = "http://platform.fatsecret.com/rest/server.api?".
$params."&oauth_signature=".rawurlencode($sig);
//$food_feed = file_get_contents($url);
列表($output,$error,$info)= loadFoods($url);
回声'<pre>';
if($error == 0){
if($info['http_code'] == '200')
echo $output;
else
die('状态信息:'.$info['http_code']);
else
die('状态错误:'.$error);
函数加载食物($url)
{
// 创建 curl 资源
$ch = curl_init();
// 设置 url
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);
返回数组($输出,$错误,$信息);
?>
上面的脚本工作完美,并使用搜索方法检索食物详细信息。但是
当我使用 food.get 方法使用 food_id 检索数据时,它说
无效签名错误,这是 food.get 方法 api 调用示例,我
提供了正确的密钥并传递了 food_id 参数。有人可以帮
我解决这个问题,我真的击中此代码。它说无效
签名错误。
<?php
$consumer_key = "xxxxxxxxx";
$secret_key = "xxxxxxxxxx";
//签名基字符串
//<HTTP Method>&<Request URL>&<Normalized Parameters>
$base = 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 替换为 Consumer Secret
//现在获取搜索结果并将它们写下来
$url = "http://platform.fatsecret.com/rest/server.api?".
$params."&oauth_signature=".rawurlencode($sig);
//$food_feed = file_get_contents($url);
列表($output,$error,$info)= loadFoods($url);
回声'<pre>';
if($error == 0){
if($info['http_code'] == '200')
echo $output;
else
die('状态信息:'.$info['http_code']);
else
die('状态错误:'.$error);
函数加载食物($url)
{
// 创建 curl 资源
$ch = curl_init();
// 设置 url
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);
返回数组($输出,$错误,$信息);
?>
帮助我代码中有什么错误并帮助我解决问题,因为
我必须在我的项目中使用这个 API
感谢等待您的回复......