1 | ## |
||
2 | # Copyright (c) 2012-2016 WePay. |
||
3 | # |
||
4 | # http://opensource.org/licenses/Apache2.0 |
||
5 | ## |
||
6 | |||
7 | 1 | require 'cgi' |
|
8 | 1 | require 'json' |
|
9 | 1 | require 'net/http' |
|
10 | 1 | require 'net/https' |
|
11 | 1 | require 'rubygems' |
|
12 | 1 | require 'uri' |
|
13 | |||
14 | ## |
||
15 | # The root WePay namespace. |
||
16 | ## |
||
17 | 1 | module WePay |
|
18 | |||
19 | ## |
||
20 | # A very simple wrapper for the WePay API. |
||
21 | ## |
||
22 | 1 | class Client |
|
23 | |||
24 | # Stage API endpoint |
||
25 | 1 | STAGE_API_ENDPOINT = "https://stage.wepayapi.com/v2" |
|
26 | |||
27 | # Stage UI endpoint |
||
28 | 1 | STAGE_UI_ENDPOINT = "https://stage.wepay.com/v2" |
|
29 | |||
30 | # Production API endpoint |
||
31 | 1 | PRODUCTION_API_ENDPOINT = "https://wepayapi.com/v2" |
|
32 | |||
33 | # Production UI endpoint |
||
34 | 1 | PRODUCTION_UI_ENDPOINT = "https://www.wepay.com/v2" |
|
35 | |||
36 | 1 | attr_reader :api_endpoint |
|
37 | 1 | attr_reader :api_version |
|
38 | 1 | attr_reader :client_id |
|
39 | 1 | attr_reader :client_secret |
|
40 | 1 | attr_reader :ui_endpoint |
|
41 | |||
42 | 1 | def initialize(client_id, client_secret, use_stage = true, api_version = nil) |
|
43 | 18 | @client_id = client_id.to_s |
|
44 | 18 | @client_secret = client_secret.to_s |
|
45 | 18 | @api_version = api_version.to_s |
|
46 | |||
47 | 18 | if use_stage |
|
48 | 14 | @api_endpoint = STAGE_API_ENDPOINT |
|
49 | 14 | @ui_endpoint = STAGE_UI_ENDPOINT |
|
50 | else |
||
51 | 4 | @api_endpoint = PRODUCTION_API_ENDPOINT |
|
52 | 4 | @ui_endpoint = PRODUCTION_UI_ENDPOINT |
|
53 | end |
||
54 | end |
||
55 | |||
56 | ## |
||
57 | # Execute a call to the WePay API. |
||
58 | ## |
||
59 | 1 | def call(call, access_token = false, params = {}, risk_token = false, client_ip = false) |
|
60 | 7 | path = call.start_with?('/') ? call : call.prepend('/') |
|
61 | 7 | url = URI.parse(api_endpoint + path) |
|
62 | |||
63 | 7 | call = Net::HTTP::Post.new(url.path, { |
|
64 | 'Content-Type' => 'application/json', |
||
65 | 'User-Agent' => 'WePay Ruby SDK' |
||
66 | }) |
||
67 | |||
68 | 7 | unless params.empty? |
|
69 | 2 | call.body = params.to_json |
|
70 | end |
||
71 | |||
72 | 7 | if access_token then call.add_field('Authorization', "Bearer #{access_token}"); end |
|
73 | 7 | if @api_version then call.add_field('Api-Version', @api_version); end |
|
74 | if risk_token then call.add_field('WePay-Risk-Token', risk_token); end |
||
75 | 7 | if client_ip then call.add_field('Client-IP', client_ip); end |
|
76 | |||
77 | make_request(call, url) |
||
78 | end |
||
79 | |||
80 | ## |
||
81 | # Returns the OAuth 2.0 URL that users should be redirected to for |
||
82 | # authorizing your API application. The `redirect_uri` must be a |
||
83 | 1 | # fully-qualified URL (e.g., `https://www.wepay.com`). |
|
84 | ## |
||
85 | def oauth2_authorize_url( |
||
86 | redirect_uri, |
||
87 | user_email = false, |
||
88 | user_name = false, |
||
89 | permissions = "manage_accounts,collect_payments,view_user,send_money,preapprove_payments,manage_subscriptions", |
||
90 | 2 | user_country = false |
|
91 | ) |
||
92 | url = @ui_endpoint + |
||
93 | '/oauth2/authorize?client_id=' + @client_id.to_s + |
||
94 | '&redirect_uri=' + redirect_uri + |
||
95 | 2 | '&scope=' + permissions |
|
96 | 2 | ||
97 | 2 | url += user_name ? '&user_name=' + CGI::escape(user_name) : '' |
|
98 | url += user_email ? '&user_email=' + CGI::escape(user_email) : '' |
||
99 | url += user_country ? '&user_country=' + CGI::escape(user_country) : '' |
||
0 ignored issues
–
show
Unused Code
introduced
by
![]() |
|||
100 | end |
||
101 | |||
102 | ## |
||
103 | 1 | # Call the `/v2/oauth2/token` endpoint to exchange an OAuth 2.0 `code` for an `access_token`. |
|
104 | 1 | ## |
|
105 | def oauth2_token(code, redirect_uri) |
||
106 | call('/oauth2/token', false, { |
||
107 | 'client_id' => @client_id, |
||
108 | 'client_secret' => @client_secret, |
||
109 | 'redirect_uri' => redirect_uri, |
||
110 | 'code' => code |
||
111 | }) |
||
112 | 1 | end |
|
113 | |||
114 | private |
||
115 | |||
116 | ## |
||
117 | 1 | # Make the HTTP request to the endpoint. |
|
118 | 7 | ## |
|
119 | 7 | def make_request(call, url) |
|
120 | 7 | request = Net::HTTP.new(url.host, url.port) |
|
121 | request.read_timeout = 30 |
||
122 | 7 | request.use_ssl = true |
|
123 | 7 | ||
124 | response = request.start { |http| http.request(call) } |
||
125 | JSON.parse(response.body) |
||
126 | end |
||
127 | end |
||
128 | end |
||
129 |