Python Instagram:签名不匹配

Python Instagram:签名不匹配,python,instagram,instagram-api,Python,Instagram,Instagram Api,我正在尝试开始使用Instagram API,但我甚至不能进行简单的调用,因为我遇到了一个错误 {"code": 403, "error_type": "OAuthForbiddenException", "error_message": "Invalid signed-request: Signature does not match"} 我生成了我的access\u令牌,范围为likes+comments 这是我的网址: 我从Instagram开发者网站上用这个脚本生成了签名,因为它最初

我正在尝试开始使用Instagram API,但我甚至不能进行简单的调用,因为我遇到了一个错误

{"code": 403, "error_type": "OAuthForbiddenException", "error_message": "Invalid signed-request: Signature does not match"}
我生成了我的
access\u令牌
,范围为
likes+comments

这是我的网址:

我从Instagram开发者网站上用这个脚本生成了签名,因为它最初给了我

"Invalid signed-request: Missing required parameter 'sig'"
以下是脚本:

    # -*- coding: UTF-8 -*-
import hmac
from hashlib import sha256

def generate_sig(endpoint, params, secret):
    sig = endpoint
    for key in sorted(params.keys()):
        sig += '|%s=%s' % (key, params[key])
    return hmac.new(secret, sig, sha256).hexdigest()

endpoint = 'media/search'
params = {
    'access_token': _______________,
    'count': 10,
}
secret = ______________________
sig = generate_sig(endpoint, params, secret)
print "sig is",sig
感谢您的帮助! 感谢来自文档的

启用时,Instagram将检查每个传感器的sig参数 请求并验证该值是否与使用 客户机密。预期值是使用SHA256散列的HMAC 使用所有请求参数和客户端密码的算法

您的签名生成器函数可以,但它不包括所有参数。应该是:

params = {
    'access_token': _______________,
    'count': 10,
    'lat':  "<lat value>",
    'lng': "<long value>",
}
它应该为我们提供如下格式的URL:

https://api.instagram.com/v1/media/search?access_token=XXX&lat=XXX&lng=XXX&sig=XXX&count=XXX
从文档:

启用时,Instagram将检查每个传感器的sig参数 请求并验证该值是否与使用 客户机密。预期值是使用SHA256散列的HMAC 使用所有请求参数和客户端密码的算法

您的签名生成器函数可以,但它不包括所有参数。应该是:

params = {
    'access_token': _______________,
    'count': 10,
    'lat':  "<lat value>",
    'lng': "<long value>",
}
它应该为我们提供如下格式的URL:

https://api.instagram.com/v1/media/search?access_token=XXX&lat=XXX&lng=XXX&sig=XXX&count=XXX

我认为
'count':10
参数不应该在签名生成中传递,因为它不存在于url中。根据Insta doc->Token:API端点,该端点附加了请求参数的所有键/值对的串联,按键升序排序。每个键/值对由管道字符分隔。因此,要么将计数添加到API请求URL中,要么将其从签名生成参数中删除,否则仍会出现“无效签名请求”错误@谢谢你的回答。我试过了,但还是不行。它给了我相同的“无效签名请求:签名不匹配”错误。@coderz我也试过了。我将其从参数中删除,并将其添加到我的URL:。但是,它仍然给我同样的错误@Arjun您是否启用了“已签名的请求”?另外,您能提供完整的错误消息信息吗?@felipsmartins错误消息是:{“代码”:403,“错误类型”:“OAuthBankedenException”,“错误消息”:“无效签名请求:签名不匹配”},我取消了“强制签名请求”复选框,现在我可以获取数据了。我认为
“count”:10
参数不应该在签名生成中传递,因为它不存在于url中。根据Insta doc->Token:API端点,该端点附加了请求参数的所有键/值对的串联,按键升序排序。每个键/值对由管道字符分隔。因此,要么将计数添加到API请求URL中,要么将其从签名生成参数中删除,否则仍会出现“无效签名请求”错误@谢谢你的回答。我试过了,但还是不行。它给了我相同的“无效签名请求:签名不匹配”错误。@coderz我也试过了。我将其从参数中删除,并将其添加到我的URL:。但是,它仍然给我同样的错误@Arjun您是否启用了“已签名的请求”?另外,您能提供完整的错误消息信息吗?@felipsmartins错误消息是:{“代码”:403,“错误类型”:“OAuthBankedenException”,“错误消息”:“无效的签名请求:签名不匹配”}此外,我取消了“强制签名请求”的复选框,现在我可以获取数据了。