• Facebook接入(下)


    四、充值

    充值弹窗

    <div id="fb-root"></div>
    <script src="http://connect.facebook.net/en_US/all.js"></script>
    <script>
    FB.init({ 
        appId:'{{ app_id }}', cookie:true, 
        status:true, xfbml:true 
     });
    </script>
    function buyit(rmb, pearls){
        FB.ui({
            method:'pay',
            //credits_purchase: true,
            purchase_type:'item',
            //redirect_uri: 'http://apps.facebook.com/bubblefish_tw/',
            order_info:{
                item_id:'pearls',
                title:'泡泡魚珍珠'+ pearls +'顆 ',
                price:rmb,
                description:'獲取泡泡魚珍珠' + pearls + '顆',
                image_url:'{{ media_url }}images/payment_logo.jpg',
                product_url:'{{ media_url }}images/payment_logo.jpg'
                }
            },
    
            function(resp){
                if(resp.order_id) {
                    //alert("ok! order_id," + resp.order_id);
                    window.top.location='{{ sns_url }}'; 
                }
                else {
    //                alert(resp.error_message);
                }
            }
        );
        return false;
    }
    FB.Canvas.setAutoResize();
    </script>
    

    充值后台

    def pay(request):
        if request.POST.has_key('signed_request'):
            signed_request = request.POST.get("signed_request", '')
            data, sig_ok = parse_signed_request(signed_request)
            if not sig_ok:
                return HttpResponse("SIG_ERROR")
            
            if not data.has_key('user_id') or not data.has_key('oauth_token'):
                app_id = settings.SNS_APP_ID
                sns_url = settings.SNS_URL
                redirect_uri = urllib.quote_plus(sns_url)
                redirect_url = "https://www.facebook.com/dialog/oauth?client_id=%s&redirect_uri=%s&scope=email,read_stream" %(app_id, redirect_uri)
                return render_to_response('%s/freegift/redirect.html' % (settings.SNS), {'redirect_url': redirect_url})
            access_token = data['oauth_token']
            to_sns_id = data['user_id']
        else:
            return HttpResponse("POST_ERROR")
    
        member = login_sns_user(request, access_token)
        if not member:
            HttpResponse("MEMBER_ERROR")
        
        index_file = '%s/payment_facebook_tw/index.html' % (settings.SNS)
        confirm_file = '%s/payment_facebook_tw/confirm.html' % (settings.SNS)
        ret = in_activity_time()
        if ret:
            index_file = '%s/payment_facebook_tw/index_activity.html' % (settings.SNS)
            confirm_file = '%s/payment_facebook_tw/confirm_activity.html' % (settings.SNS)
        return render_to_response(index_file,
                                  {
                                   'media_url':settings.MEDIA_URL,
                                   'sns_url':settings.SNS_URL,
                                   'score': member.score,
                                   'skey': access_token,
                                   'app_id':settings.SNS_APP_ID,
                                   },
                                context_instance=RequestContext(request))
    
    def callback(request):
        if request.POST.has_key('signed_request'):
            signed_request = request.POST.get("signed_request", '')
            data, sig_ok = parse_signed_request(signed_request)
            if not sig_ok:
                return HttpResponse("SIG_ERROR")
            
            payload = data['credits']
            order_id = payload['order_id']
            method = request.POST.get('method', None)
            return_data = {'method':method}
            if method == 'payments_status_update':
                status = payload['status']
                return_data['content'] = {'status':'settled','order_id':order_id}
                if status == 'placed':
                    order_details = simplejson.loads(payload['order_details'])
                    buyer = order_details['buyer']
                    item = order_details['items'][0]
                    rmb = item['price']
                    pearls = rmb_to_pearls(rmb)
                    member = get_member_by_sns_id(buyer)
                    record = RechargeRecord(member_id=member.id,
                                    pearls=pearls,
                                    rmb=rmb,
                                    tid=str(order_id),
                                    status='UP')
                    record.save()
                    #check and log here
                elif status == 'settled':
                    order_details = simplejson.loads(payload['order_details'])
                    buyer = order_details['buyer']
                    item = order_details['items'][0]
                    #now save this transaction into our database
                    record = RechargeRecord.objects.get(tid=str(order_id))
                    result = finish_payment(record)
                    if not result:
                        HttpResponse("ERROR")
                else:
                    return_data['content']['status'] = status
            elif method == 'payments_get_items':
                order_info = payload['order_info']
                item = simplejson.loads(order_info)
                return_data['content'] = [item]
            return HttpResponse(simplejson.dumps(return_data))
        else:
            return HttpResponse("POST_ERROR")
    

    五、邀请

    邀请弹窗

    message= "you_msg"
    redirect_url = "http://www.facebook.com/dialog/apprequests?app_id=%s&redirect_uri=%s&message=%s" %( app_id, redirect_uri, message)
    return render_to_response('/redirect.html', {'redirect_url': redirect_url})
    

    获取邀请好友的IDs

    res_get = request.GET.copy()
    request_ids = [res_get[i] for i in res_get if i.startswith('request_ids')]
    to_ids = []
    for request_id in request_ids:
        from_id, to_id = get_request_info(access_token, request_id)
        if from_id == str(member.sns_id):
            to_ids.append(int(to_id))
    

    备注:
    redirect.html

    <script> top.location.href='{{ redirect_url|safe }}'</script>
    

    六、粉丝礼物

    粉丝礼物选择朋友界面

    <div id="friends_list">
    <fb:serverfbml style=" 500px; height:20px;">
        <script type="text/fbml">
            
    <fb:fbml>
    <fb:request-form 
    action="{{ site_url }}/freegifts_callback/?v={{ style }}&skey={{ skey }}" 
    method="POST" 
    invite="true" 
    type="BubbleFish"content="Hey there, I've Send a gift to you in the BubbleFish! <fb:req-choice url='{{ sns_url }}?s={{ f_sns_id }}&i={{ gift_id }}' label='Accept' />" 
    >
    <fb:multi-friend-selector 
    showborder="false" 
    actiontext="Let's send free gifts to each other !" 
    exclude_ids="" 
    import_external_friends="false" 
    bypass="cancel" />
    </fb:request-form>
    </fb:fbml> 
    
        </script>
    </fb:serverfbml>
    </div>
    

    七、小应用

    live-stream:

    <div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId={{ app_id }}&xfbml=1"></script><fb:live-stream event_app_id="{{ app_id }}" width="745" height="500" xid="" always_post_to_friends="true"></fb:live-stream>
    

    like button:

    <iframe src="http://www.facebook.com/plugins/like.php?app_id={{ app_id }}&href=http%3A%2F%2Fwww.facebook.com%2Fapps%2Fapplication.php%3Fid%3D{{ app_id }}&send=false&layout=standard&width=450&show_faces=false&action=like&colorscheme=light&font&height=35" scrolling="no" frameborder="0" style="border:none; overflow:hidden; 550px; height:35px;" allowTransparency="true"></iframe>
    

    bookmark:

    <fb:bookmark />
    

    八、原来的FBML充值实现

    使用IFrame

    def pay(request):
        ret = """
        <div>
            <fb:iframe src="http://%s/payment/pay_index/" frameborder="0" width="760" height="500" scrolling="no"></fb:iframe>
        </div>
        """ % settings.SNS_APP_SERVER_NAME
    
        return HttpResponse(ret)
    

    修改JS中method
    method:'pay.prompt'

    问题:

    IE中赠送礼物无法出现好友列表:

    解决:<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">

  • 相关阅读:
    [组合][DP]luogu P3643 [APIO2016]划艇
    [倍增]luogu P4155 [SCOI2015]国旗计划
    [并查集][线段树]luogu P3273 [SCOI2011]棘手的操作
    pytest警告DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
    docker-compose5分钟搭建wordpress博客网站
    Docker安装入门
    Windows10安装wget命令
    CRC (Cyclic Redundancy Check)
    Linux学习笔记
    Linux学习笔记
  • 原文地址:https://www.cnblogs.com/imouren/p/2093425.html
Copyright © 2020-2023  润新知