获取被标记图片所有者用户名时遇Instagram API令牌错误
问题分析与解决
核心问题1:API端点地址错误
你请求me/tags时用了Facebook的API地址(https://graph.facebook.com/),但me/tags是Instagram Graph API的专属端点,Facebook的API无法识别IG开头的Instagram用户令牌,这直接导致了Invalid OAuth access token错误。而me/media能成功是因为你用了正确的Instagram API地址。
核心问题2:权限缺失(可能)
获取自己被标记的内容需要user_tags权限,如果你申请令牌时没有包含这个权限,即使地址正确也会报错。而me/media只需要user_media权限,所以之前能正常请求。
具体修复步骤
1. 修正API端点地址
修改fullTagUrl的生成逻辑,改用Instagram的Base API地址:
// 原错误代码 string fullTagUrl = $"{this.facebookBaseAPIUrl}{tagUrl}"; // 修改后 string fullTagUrl = $"{this.instagramBaseAPIUrl}{tagUrl}";
2. 确认令牌权限
检查你的Instagram用户令牌是否包含user_tags权限:
- 登录Facebook开发者后台,进入你的应用
- 找到应用的Instagram Graph API权限配置,确保
user_tags已被添加并通过审核 - 如果缺少该权限,重新生成包含
user_tags的用户令牌
3. 验证令牌有效性
虽然me/media能成功,但建议确认令牌未过期:
- 调用
https://graph.instagram.com/debug_token?input_token=你的IG令牌&access_token=你的应用令牌(用应用令牌验证用户令牌),查看令牌的权限和过期时间
修改后的完整Service代码
public class SocialFeedService { private readonly string instagramBaseAPIUrl = "https://graph.instagram.com/"; public string GetInstagramContents(string userToken) { using (var client = new HttpClient()) { try { string tagUrl = $"me/tags?fields=id,username&access_token={userToken}"; string fullTagUrl = $"{this.instagramBaseAPIUrl}{tagUrl}"; client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = client.GetStringAsync(new Uri(fullTagUrl)).Result; return string.IsNullOrEmpty(response) ? string.Empty : response; } catch (Exception ex) { throw ex; } } } }
内容的提问来源于stack exchange,提问作者hassysl
相关产品推荐
相关产品推荐

