这个问题是继我之前发布的一个问题: Django收回Facebook信贷
基本上,我有一个带有按钮的静态HTML页面。按下按钮后,Facebook信贷的购买对话框就会显示出来。
如Facebook博客帖子中所示,这里是我的页面链接视图-- HTML。
我对URL有一个看法,它是Facebook开发者注册的链接。这一观点如下:
def fb_credits_callback(request):
#Data array that will be returned
data = {
}
string = ''
if request.method == 'GET':
string = 'GET'
elif request.method == 'POST':
string = 'POST'
send_mail(
'TestDare Debug',
'Received '+string+" request",
'registration@my_domain.com',
['my_personal_email@gmail.com'],
fail_silently=True
)
signed_request = request['signed_request']
plain_request = parse_signed_request(signed_request, FACEBOOK_APP_ID)当然,这只是一个初步的测试(以后还有很多调试工作要做),但是当我点击页面上的按钮时,我甚至都没有收到邮件。这意味着,由于某种原因,Facebook没有执行对我的应用程序的回调。如果我执行GET到该视图,我将收到一封预期的电子邮件。
单击该按钮后,将得到以下错误:
“处理您的付款很抱歉,但是我们在处理您的付款时遇到了麻烦。您还没有收到这笔交易的费用。请再试一次。”
如果有人能帮我追踪回拨不起作用的原因,我将非常感激。
谢谢
发布于 2012-02-09 17:56:35
signed_request参数是确保您正在接收的数据是由Facebook发送的实际数据的简单方法。它是使用您的应用程序秘密签名的,只有您和Facebook才知道。如果有人要更改数据,签名将不再有效,因为他们不知道您的应用程序秘密也更新签名。
据我所知,的python不支持解析请求参数。
下面是解析"signed_request“的代码片段。
import base64
import hashlib
import hmac
import simplejson as json
def base64_url_decode(inp):
padding_factor = (4 - len(inp) % 4) % 4
inp += "="*padding_factor
return base64.b64decode(unicode(inp).translate(dict(zip(map(ord, u'-_'), u'+/'))))
def parse_signed_request(signed_request, secret):
l = signed_request.split('.', 2)
encoded_sig = l[0]
payload = l[1]
sig = base64_url_decode(encoded_sig)
data = json.loads(base64_url_decode(payload))
if data.get('algorithm').upper() != 'HMAC-SHA256':
log.error('Unknown algorithm')
return None
else:
expected_sig = hmac.new(secret, msg=payload, digestmod=hashlib.sha256).digest()
if sig != expected_sig:
return None
else:
log.debug('valid signed request received..')
return data我知道base64_url_decode中有一些神秘的代码,因为翻译、maketrans在unicode字符串中不能很好地工作。无论如何,如果你有任何问题,只需在下面的评论中删除一行。
你可以在这里找到更多的详细信息。
谢谢.
https://stackoverflow.com/questions/9062526
复制相似问题