Пример кредитов Facebook в App Engine? - PullRequest
2 голосов
/ 04 мая 2011

Есть ли примеры использования кредитов Facebook в Google App Engine?

Я нашел это сообщение в блоге, но оно не завершено http://blog.suinova.com/2011/01/integrating-facebook-credits-api-into.html

Я получил пример runwithfriends пример работает над App Engine, пытался расширить его кредитами, пока что безуспешно.

Также искал форумы разработчиков FB, ничего не получил.

Любые ресурсы, которые вы можете мне указатьto?

Что не работает:
1) Когда я нажимаю кнопку «Оплатить с помощью Facebook», я получаю «Ошибка приложения» без кода ошибки.
-Проверена консоль javascript
-Проверил настройки приложения fb
-Пробовал на локальном сервере и производственном сервере

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))

1 Ответ

0 голосов
/ 07 мая 2011

Ваш код на python выглядит вполне нормально, поэтому я думаю, у вас просто проблемы с авторизацией. В зависимости от того, как вы авторизуетесь (процесс довольно сложный, чем система кредитов), вы, скорее всего, получаете подписанный запрос, который только частично авторизован ... означает, что вы авторизованы для доступа только к определенным частям Facebook, но обычно нет авторизован для доступа к активному / зарегистрированному пользователю (т.е. мне).

Вы можете проверить это, определив, если вы подписали_request на целых 80+ символов (в отличие от около 40). Обычно я пытаюсь пройти аутентификацию, расшифровывая профиль (signature_request). Если это не удается, я пытаюсь использовать ранее сохраненный файл cookie, а затем, если это не удается, я пытаюсь повторно зарегистрировать пользователя. Я определяю ошибку, помещая попытку / за исключением моих вызовов, чтобы получить объект «я» через GraphAPI.

...