ruby-on-rails-3 – 有没有Facebook的Ruby On Rails宝石呢?或者是他们的Facebook Credits示例应用程序的ruby版本?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – 有没有Facebook的Ruby On Rails宝石呢?或者是他们的Facebook Credits示例应用程序的ruby版本?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我的Facebook应用程序中实现Facebook Credits.有没有人知道 Ruby on Rails中提供的Facebook Credits示例应用程序的版本?有人为此做了宝石吗?如果我找到一个我将链接到下面…

解决方法

这是我的代码采取FB示例和RORing它:
require 'facebook_signed_request.rb'

class FacebookCreditsController < ApplicationController

skip_before_filter :verify_authenticity_token
layout nil

  def index
    facebook_request = FacebookSignedRequest.new(request.params['signed_request'])
    data = { "content" => {} }
    # handle invalid request
    if !facebook_request.valid?
      return
    end

    signed_request = facebook_request.signed_request

    # handle invalid signed request
    if signed_request.nil?
      return
    end

    method = request.params['method']

    order_id = request.params['order_id']

    # second state response from facebook
    if method == 'payments_status_update'
      status = request.params['status']

      if status == 'placed'
        next_state = 'settled'
        data['content']['status'] = next_state
      elsif status == 'settled'
        redirect_to '/lots'
        return
      end

      # compose returning data array_change_key_case
      data['content']['order_id'] = order_id

    # first stage response from facebook
    elsif method == 'payments_get_items'

      order_info = request.params['order_info']

      item = JSON.parse(order_info)
      item['price'] = item['price'].to_i

      # for url fields,if not prefixed by http://,prefix them
      url_key = [ 'product_url','image_url' ]
      url_key.each do |key|
        if item[key][0..6] != 'http://'
          item[key] = "http://#{item[key]}"
        end
      end

      # if payload['test_mode']
      if request.params['test_mode']
        update_keys = ['title','description']
        update_keys.each do |key|
            item[key] = '[Test Mode] ' + item[key]
        end
      end

      data['content'] = [item]  
    end

    data['method'] = method

    render :json => data
  end

end

那么除此之外还有:

require 'base64'
require 'json'
require 'openssl'

class FacebookSignedRequest

  attr_reader :signed_request

  def initialize(signed_request)
    @signed_request = signed_request
  end

  def base64_url_decode str
    encoded_str = str.gsub('-','+').gsub('_','/')
    encoded_str += '=' while !(encoded_str.size % 4).zero?
    Base64.decode64(encoded_str)
  end

  def valid?
    # TODO: move it to some configuration
    secret = " << my secret is here >>"

    # decode data
    encoded_sig,payload = signed_request.split('.')
    sig = base64_url_decode(encoded_sig).unpack("H*")[0]
    data = JSON.parse base64_url_decode(payload)

    if data['algorithm'].to_s.upcase != 'HMAC-SHA256'
    # Rails.logger.error 'Unknown algorithm. Expected HMAC-SHA256'
      return false
    end

    #check sig
    expected_sig = OpenSSL::HMAC.hexdigest('sha256',secret,payload)
    if expected_sig != sig
    # Rails.logger.error 'Bad Signed JSON signature!'
      return false
    end

    data
  end

我不知道这是否有助于任何人,但它都适用于我.对不起,花了很长时间才记得回来并发布我的工作代码

根据要求查看相关代码

#view
<%= javascript_include_tag "premium_signup" %>
<script type="text/javascript">
    $(document).ready(function() {
        $('#premium_signup_button').click(function() {
            signupAsPremiumMember('Premium Membership','Create unlimited auctions with no extra charge at all for 1 year.',"1",'','');
        });
    });
</script>
...
<button id="premium_signup_button">Signup as a premium member</button>

#premium_signup.js
function signupAsPremiumMember(title,desc,price,imageURL,productURL) {
var order_info = {
    "title": title,"description": desc,"price": price,"image_url": imageURL,"product_url": productURL
};

var payload = {
    "method": 'pay',"order_info": order_info,"purchase_type": 'item'
};

console.log(FB.ui(payload,facebookPurchaseCompletionCallback));
}

function facebookPurchaseCompletionCallback(data) {
    if (data['order_id']) {
        console.log(data['order_id']);
    }
    else if (data['error_code']) {
        console.log(data['error_code']);
    }
    else {
        console.log("Failed");
    }
}

#in the layout
#in head
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<%= javascript_include_tag 'application' %>
#in body
  <div id="fb-root"></div>
    <script>
      FB.init({
        appId  : '############',status : true,// check login status
        cookie : true,// enable cookies to allow the server to access the session
        xfbml  : true  // parse XFBML
      });

现在所有这一切都来自一个坐下来学习如何在Ruby On Rails中编程的人,而在去年的大约12个星期里,Ruby On Rails几乎没有支持JavaScript知识,而且在今年的大约12个星期里,还有几个星期在这个时候被抛出了测量.我说,谨慎 – 我发布的代码可能是垃圾…但它的工作原理:-)

如果有人真的发现任何这个有用的一个投票在答案将不胜感激 – 只是sayin’:-)

猜你在找的Ruby相关文章