是否有在Google App Engine上使用Facebook积分的示例?
我发现了这篇博文,但还不完整 http://blog.suinova.com/2011/01/integrating-facebook-credits-api-into.html
我在app Engine上运行了示例runwithfriends example,尝试使用Credits扩展它,到目前为止没有运气。
还搜索了FB开发者论坛,一无所获。
您可以指点我的任何资源吗?
什么不起作用:
1)当我点击“付费用Facebook”按钮时,我收到“应用程序错误”,没有任何错误代码
- 检查javascript控制台
- 检查fb app设置
- 在本地服务器和生产服务器上结束
2)callback.py未完成,因为我无法解析签名的请求(py中没有可用的代码供我学习)
3)我基本上做的是将Suinova Designs(上面的链接)中的代码添加到现有的Run With Friends应用程序代码中。没有像预期的那样结束。
到目前为止我的代码:
//payment_page.html
<html>
<table>
<tr><th>Name</th><th>Price</th><th> </th></tr>
<tr><td>Something to buy</td><td>10 FC</td><td><a href="" onclick="return buyit();">
<img src="http://www.facebook.com/connect/button.php?app_id=215638625132268&feature=payments&type=light_l" />
</a></td></tr>
</table>
// javascript
function buyit(){
FB.ui({
method:'pay',
purchase_type:'item',
order_info:{
item_id:'myitem',
title:'Something to buy',
price:2,
description:'Whatever',
image_url:'http://www.facebook.com/images/gifts/21.png',
product_url:'http://www.facebook.com/images/gifts/21.png'}
},
function(resp){
if(resp.order_id) window.top.location='http://apps.facebook.com/runwithfriends trial'; else alert(resp.error_message);
});
return false;
}
//callback.py
class FacebookPaymentRequest(webapp.RequestHandler):
def post(self):
signed_request = parse_signed_request(self.request.get('signed_request'),conf.FACEBOOK_APP_SECRET)
payload = signed_request['credits'] #credits:{buyer:int,order_id:int,order_info:{},receiver:int}
order_id = payload['order_id']
method = web.request.get('method')
return_data = {'method':method}
if method == 'payments_get_items':
order_info = payload['order_info'] #order_info:{item_id:'',title:'',description:'',price:0,image_url:'',product_url:''}
item = simplejson.loads(order_info) #needs to convert JSON string to dict
#check item,price,etc and reply
return_data['content'] = [item]
elif method == 'payments_status_update':
status = payload['status']
return_data['content'] = {'status':'settled','order_id':order_id}
if status == 'placed':
#just return settled status to Facebook, this may be called twice
order_details = simplejson.loads(payload['order_details'])
#check and log here
elif status == 'settled':
order_details = simplejson.loads(payload['order_details'])
#order_details:{order_id:0,buyer:0,app:0,receiver:0,amount:0,update_time:0,time_placed:0,data:'',items:[{}],status:'placed'}
buyer = order_details['buyer']
item = order_details['items'][0]
#now save this transaction into our database
else:
#may be refunded, canceled, log the activity here
return_data['content']['status'] = status
self.response.out.write(simplejson.dumps(return_data))
答案 0 :(得分:0)
您的python代码看起来相当正常,所以我猜您只是在使用授权时遇到问题。根据您的授权方式(一个比信用系统更复杂的过程),您很可能会获得一个仅部分授权的签名请求...这意味着您只能访问Facebook的某些部分,但通常不会授权访问活动/登录用户(即我)。
您可以通过确定signed_request是否为完整的80多个字符(而不是大约40个字符)来验证这一点。通常我尝试通过破译配置文件(signed_request)进行身份验证,如果失败,那么我尝试使用以前存储的cookie,如果失败,我尝试重新登录用户。我通过在我的调用周围放置try / except以通过GraphAPI获取“我”对象来确定失败。