2013-06-24 54 views
5

Tôi đang cố thiết lập ứng dụng Stripe Connect cho ứng dụng đường ray 3.2.13. Tôi đã chỉ đạo người dùng sọc và nhận lại mã uỷ quyền từ Stripe:Kết nối sọc - truy xuất mã thông báo truy cập

HTTP/1.1 302 Found 
Location: http://localhost:3000/yourshop/stripe?scope=read_write&state=1234&code=AUTHORIZATION_CODE 

Bước tiếp theo liên quan đến việc thực hiện một yêu cầu POST để nhận được access_token qua access_token_url, mỗi tài liệu Stripe:

curl -X POST https://connect.stripe.com/oauth/token \ 
    -d client_secret=sk_test_code \ 
    -d code=AUTHORIZATION_CODE \ 
    -d grant_type=authorization_code 

Tôi không có bất kỳ kinh nghiệm với curl là một ứng dụng đường ray và tôi không thể tìm thấy bất cứ điều gì trong API Stripe có vẻ như yêu cầu POST này bao gồm trong Stripe Gem:

Gem file:

gem 'omniauth-stripe-connect' 
gem 'stripe' 

Mẫu

def save_with_stripe_account 
    code = self.stripe_code 
    customer = curl -X POST https://connect.stripe.com/oauth/token \ 
    -d "client_secret=ENV['STRIPE_SECRET_KEY']" \ 
    -d "code=code" \ 
    -d "grant_type=authorization_code" 
    raise customer.inspect 
end 

Lỗi:

syntax error, unexpected tCONSTANT, expecting keyword_do or '{' or '(' 

Không chắc chắn nếu chỉ là định dạng sai cho curl trong đường ray hoặc nếu cần thiết phải sử dụng cái gì khác.

+1

Tôi không biết API sọc, nhưng chỉ để bạn biết: [curl] (http://curl.haxx.se/docs/manpage.html) là công cụ dòng lệnh, do đó bạn không thể ** sao chép-dán như là một lệnh curl trong mã Ruby của bạn. Ít nhất bạn cần thực hiện [gọi hệ thống trong Ruby] (http://martinhauser.com/wiki/Ruby_System_Calls). Trong thực tế, tôi khuyên bạn nên sử dụng chính gem của Stripe (có thể bao gồm những gì bạn cần) hoặc - nếu bạn cần thực hiện các yêu cầu HTTP tùy chỉnh, hãy sử dụng thư viện Ruby HTTP như [curb] (https://rubygems.org)/gems/curb) sử dụng thư viện chính thức của libcurl hoặc 'Net :: HTTP'. – deltheil

Trả lời

3

tôi đã nhận nó quá làm việc, có lẽ không phải là cách đẹp nhất:

Điều đầu tiên tôi học được là curl có thể làm việc bên trong đường ray nếu bạn đặt backticks xung quanh mã curl. Điều này sẽ trả về JSON mà chỉ cần được định dạng. Tôi đã kết thúc với những điều sau đây trong mô hình của tôi:

customer = ActiveSupport::JSON.decode(`curl -X POST https://connect.stripe.com/oauth/token -d client_secret=#{ENV['STRIPE_SECRET_KEY']} -d code=#{self.stripe_code} -d grant_type=authorization_code`) 

tôi sau đó là có thể trích xuất các dữ liệu từ các hash khách hàng như "access_token":

customer['access_token'] 
+0

hoạt động tốt.thanx –

5

Hãy thử công thức này:

cài đặt đá quý HTTParty trong ứng dụng đường ray của bạn

response = HTTParty.post ("https://connect.stripe.com/oauth/token",: query => {client_secret: "# {ENV ['STRIPE_SECRET_KEY']}", mã: response_ code, grant_type: "authorization_code"})

Sau đó, bạn sẽ có thể truy cập phản hồi ['access_token'] mà không phải sử dụng backticks xung quanh mã curl. Nó làm việc cho tôi.

+0

Khi in đáp ứng, tôi nhận được tất cả các giá trị nhưng tôi không thể nhận access_token như là phản hồi ['access_token']. – logesh

+0

điều này làm việc cho tôi, cảm ơn – Tom

0

Nếu bạn đang sử dụng omniauth stripe connect strategy thì nó sẽ được chăm sóc cho bạn và được đặt trong số request.env["omniauth.auth"] trong bộ điều khiển cuộc gọi lại sót lại của bạn.

Không cần phải thực hiện bất kỳ HTTParty nào, chiến lược kết nối dải omniauth sẽ xử lý tất cả mọi thứ. Sắc đẹp, vẻ đẹp!

Các vấn đề liên quan