gpt4 book ai didi

django - Django 上的 Facebook 积分回调

转载 作者:行者123 更新时间:2023-11-30 05:28:38 25 4
gpt4 key购买 nike

这个问题是在我发布的上一个问题之后: Django Callback on Facebook Credits

基本上,我有一个带按钮的静态 HTML 页面。按下按钮后,应显示 Facebook 积分的购买对话框。

Facebook blog post所示, 这是我的页面 link查看 HTML 源代码。

我有一个 URL 的 View ,这是在 Facebook Developers 中注册的链接。 View 如下:

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 没有执行对我的应用程序的回调。如果我对该 View 执行 GET,我会按预期收到一封电子邮件。

单击按钮后出现以下错误:

“处理您的付款时出现问题抱歉,我们在处理您的付款时遇到问题。您尚未为此交易付费。请重试。”

如果有人能帮我找出回调不起作用的原因,我将不胜感激。

谢谢

最佳答案

The signed_request parameter is a simple way to make sure that the data you're receiving is the actual data sent by Facebook. It is signed using your application secret which is only known by you and Facebook. If someone were to make a change to the data, the signature would no longer validate as they wouldn't know your application secret to also update the signature.

据我所知,Facebook 的 python-sdk 不支持解析请求参数

这是一段用于解析“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 中有一些神秘代码,因为 translate、maketrans 不能很好地处理 unicode 字符串。无论如何,如果您有任何问题,请在下面的评论中留言。

Myabe 你可以在这里找到更多details .

谢谢..

关于django - Django 上的 Facebook 积分回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9062526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com