首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Facebook贷记Django的回调

Facebook贷记Django的回调
EN

Stack Overflow用户
提问于 2012-01-30 10:36:38
回答 1查看 551关注 0票数 4

这个问题是继我之前发布的一个问题: Django收回Facebook信贷

基本上,我有一个带有按钮的静态HTML页面。按下按钮后,Facebook信贷的购买对话框就会显示出来。

Facebook博客帖子中所示,这里是我的页面链接视图-- HTML。

我对URL有一个看法,它是Facebook开发者注册的链接。这一观点如下:

代码语言:javascript
复制
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到该视图,我将收到一封预期的电子邮件。

单击该按钮后,将得到以下错误:

“处理您的付款很抱歉,但是我们在处理您的付款时遇到了麻烦。您还没有收到这笔交易的费用。请再试一次。”

如果有人能帮我追踪回拨不起作用的原因,我将非常感激。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-09 17:56:35

signed_request参数是确保您正在接收的数据是由Facebook发送的实际数据的简单方法。它是使用您的应用程序秘密签名的,只有您和Facebook才知道。如果有人要更改数据,签名将不再有效,因为他们不知道您的应用程序秘密也更新签名。

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

下面是解析"signed_request“的代码片段。

代码语言:javascript
复制
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字符串中不能很好地工作。无论如何,如果你有任何问题,只需在下面的评论中删除一行。

你可以在这里找到更多的详细信息

谢谢.

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9062526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档