wepay-api 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +118 -0
- data/Rakefile +7 -0
- data/lib/wepay-api.rb +2 -0
- data/lib/wepay.rb +23 -0
- data/lib/wepay/api.rb +27 -0
- data/lib/wepay/api/account.rb +86 -0
- data/lib/wepay/api/base.rb +25 -0
- data/lib/wepay/api/checkout.rb +68 -0
- data/lib/wepay/api/preapproval.rb +50 -0
- data/lib/wepay/api/subscription.rb +50 -0
- data/lib/wepay/api/subscription_plan.rb +59 -0
- data/lib/wepay/api/withdrawal.rb +41 -0
- data/lib/wepay/client.rb +63 -0
- data/lib/wepay/client/data.rb +31 -0
- data/lib/wepay/client/token.rb +30 -0
- data/lib/wepay/configuration.rb +34 -0
- data/lib/wepay/error.rb +28 -0
- data/lib/wepay/middleware.rb +44 -0
- data/lib/wepay/oauth.rb +32 -0
- data/lib/wepay/version.rb +3 -0
- data/spec/fixtures/vcr_cassettes/Wepay_Middleware/Wepay_Middleware_CheckStatus/raises_a_Wepay_ApiError_with_proper_error_type_message_and_code.yml +35 -0
- data/spec/fixtures/vcr_cassettes/wepay_account.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_account_add_bank.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_account_balance.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_account_create.yml +46 -0
- data/spec/fixtures/vcr_cassettes/wepay_account_delete.yml +48 -0
- data/spec/fixtures/vcr_cassettes/wepay_account_find.yml +43 -0
- data/spec/fixtures/vcr_cassettes/wepay_account_get_tax.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_account_modify.yml +49 -0
- data/spec/fixtures/vcr_cassettes/wepay_account_set_tax.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_checkout.yml +40 -0
- data/spec/fixtures/vcr_cassettes/wepay_checkout_cancel.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_checkout_capture.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_checkout_create.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_checkout_find.yml +51 -0
- data/spec/fixtures/vcr_cassettes/wepay_checkout_modify.yml +40 -0
- data/spec/fixtures/vcr_cassettes/wepay_checkout_refund.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_preapproval.yml +39 -0
- data/spec/fixtures/vcr_cassettes/wepay_preapproval_cancel.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_preapproval_create.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_preapproval_find.yml +39 -0
- data/spec/fixtures/vcr_cassettes/wepay_preapproval_modify.yml +39 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_cancel.yml +36 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_create.yml +48 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_find.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_modify.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_plan.yml +39 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_plan_create.yml +48 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_plan_delete.yml +48 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_plan_find.yml +39 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_plan_get_button.yml +48 -0
- data/spec/fixtures/vcr_cassettes/wepay_subscription_plan_modify.yml +49 -0
- data/spec/fixtures/vcr_cassettes/wepay_withdrawal.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_withdrawal_create.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_withdrawal_find.yml +38 -0
- data/spec/fixtures/vcr_cassettes/wepay_withdrawal_modify.yml +38 -0
- data/spec/settings.yml.example +6 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/matchers.rb +5 -0
- data/spec/support/rspec_helper.rb +30 -0
- data/spec/support/settings.rb +14 -0
- data/spec/support/vcr.rb +17 -0
- data/spec/wepay/api/account_spec.rb +110 -0
- data/spec/wepay/api/checkout_spec.rb +86 -0
- data/spec/wepay/api/preapproval_spec.rb +69 -0
- data/spec/wepay/api/subscription_plan_spec.rb +83 -0
- data/spec/wepay/api/subscription_spec.rb +65 -0
- data/spec/wepay/api/withdrawal_spec.rb +53 -0
- data/spec/wepay/api_spec.rb +9 -0
- data/spec/wepay/configuration_spec.rb +25 -0
- data/spec/wepay/middleware_spec.rb +21 -0
- data/spec/wepay/oauth_spec.rb +23 -0
- data/wepay-api.gemspec +29 -0
- metadata +273 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
module Wepay
|
2
|
+
module Api
|
3
|
+
class Subscription < Base
|
4
|
+
##
|
5
|
+
# @param params [Hash] See documentation below
|
6
|
+
# @return [Hashie::Mash]
|
7
|
+
# @docs [/subscription](https://www.wepay.com/developer/reference/subscription#lookup)
|
8
|
+
#
|
9
|
+
def show(params)
|
10
|
+
post 'subscription', params
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# @param params [Hash] See documentation below
|
15
|
+
# @return [Hashie::Mash]
|
16
|
+
# @docs [/subscription/find](https://www.wepay.com/developer/reference/subscription#find)
|
17
|
+
#
|
18
|
+
def find(params)
|
19
|
+
post 'subscription/find', params
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# @param params [Hash] See documentation below
|
24
|
+
# @return [Hashie::Mash]
|
25
|
+
# @docs [/subscription/create](https://www.wepay.com/developer/reference/subscription#create)
|
26
|
+
#
|
27
|
+
def create(params)
|
28
|
+
post 'subscription/create', params
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# @param params [Hash] See documentation below
|
33
|
+
# @return [Hashie::Mash]
|
34
|
+
# @docs [/subscription/cancel](https://www.wepay.com/developer/reference/subscription#cancel)
|
35
|
+
#
|
36
|
+
def cancel(params)
|
37
|
+
post 'subscription/cancel', params
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# @param params [Hash] See documentation below
|
42
|
+
# @return [Hashie::Mash]
|
43
|
+
# @docs [/subscription/modify](https://www.wepay.com/developer/reference/subscription#modify)
|
44
|
+
#
|
45
|
+
def modify(params)
|
46
|
+
post 'subscription/modify', params
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Wepay
|
2
|
+
module Api
|
3
|
+
class SubscriptionPlan < Base
|
4
|
+
##
|
5
|
+
# @param params [Hash] See documentation below
|
6
|
+
# @return [Hashie::Mash]
|
7
|
+
# @docs [/subscription_plan](https://www.wepay.com/developer/reference/subscription_plan#lookup)
|
8
|
+
#
|
9
|
+
def show(params)
|
10
|
+
post 'subscription_plan', params
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# @param params [Hash] See documentation below
|
15
|
+
# @return [Hashie::Mash]
|
16
|
+
# @docs [/subscription_plan/find](https://www.wepay.com/developer/reference/subscription_plan#find)
|
17
|
+
#
|
18
|
+
def find(params)
|
19
|
+
post 'subscription_plan/find', params
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# @param params [Hash] See documentation below
|
24
|
+
# @return [Hashie::Mash]
|
25
|
+
# @docs [/subscription_plan/create](https://www.wepay.com/developer/reference/subscription_plan#create)
|
26
|
+
#
|
27
|
+
def create(params)
|
28
|
+
post 'subscription_plan/create', params
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# @param params [Hash] See documentation below
|
33
|
+
# @return [Hashie::Mash]
|
34
|
+
# @docs [/subscription_plan/delete](https://www.wepay.com/developer/reference/subscription_plan#delete)
|
35
|
+
#
|
36
|
+
def delete(params)
|
37
|
+
post 'subscription_plan/delete', params
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# @param params [Hash] See documentation below
|
42
|
+
# @return [Hashie::Mash]
|
43
|
+
# @docs [/subscription_plan/get_button](https://www.wepay.com/developer/reference/subscription_plan#get_button)
|
44
|
+
#
|
45
|
+
def get_button(params)
|
46
|
+
post 'subscription_plan/get_button', params
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# @param params [Hash] See documentation below
|
51
|
+
# @return [Hashie::Mash]
|
52
|
+
# @docs [/subscription_plan/modify](https://www.wepay.com/developer/reference/subscription_plan#modify)
|
53
|
+
#
|
54
|
+
def modify(params)
|
55
|
+
post 'subscription_plan/modify', params
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Wepay
|
2
|
+
module Api
|
3
|
+
class Withdrawal < Base
|
4
|
+
##
|
5
|
+
# @param params [Hash] See documentation below
|
6
|
+
# @return [Hashie::Mash]
|
7
|
+
# @docs [/withdrawal](https://www.wepay.com/developer/reference/withdrawal#lookup)
|
8
|
+
#
|
9
|
+
def show(params)
|
10
|
+
post 'withdrawal', params
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# @param params [Hash] See documentation below
|
15
|
+
# @return [Hashie::Mash]
|
16
|
+
# @docs [/withdrawal/find](https://www.wepay.com/developer/reference/withdrawal#find)
|
17
|
+
#
|
18
|
+
def find(params)
|
19
|
+
post 'withdrawal/find', params
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# @param params [Hash] See documentation below
|
24
|
+
# @return [Hashie::Mash]
|
25
|
+
# @docs [/withdrawal/create](https://www.wepay.com/developer/reference/withdrawal#create)
|
26
|
+
#
|
27
|
+
def create(params)
|
28
|
+
post 'withdrawal/create', params
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# @param params [Hash] See documentation below
|
33
|
+
# @return [Hashie::Mash]
|
34
|
+
# @docs [/withdrawal/modify](https://www.wepay.com/developer/reference/withdrawal#modify)
|
35
|
+
#
|
36
|
+
def modify(params)
|
37
|
+
post 'withdrawal/modify', params
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/wepay/client.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
require "faraday"
|
2
|
+
require "faraday_middleware"
|
3
|
+
|
4
|
+
module Wepay
|
5
|
+
class Client
|
6
|
+
DEFAULTS = {
|
7
|
+
open_timeout: 5,
|
8
|
+
timeout: 10
|
9
|
+
}
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@connection = Faraday.new(url, connection_options) do |builder|
|
13
|
+
# Request
|
14
|
+
builder.use Wepay::Middleware::CatchTimeout
|
15
|
+
|
16
|
+
yield builder if block_given?
|
17
|
+
|
18
|
+
# Response
|
19
|
+
builder.use FaradayMiddleware::Mashify
|
20
|
+
builder.use Wepay::Middleware::CheckStatus
|
21
|
+
builder.use FaradayMiddleware::ParseJson
|
22
|
+
|
23
|
+
builder.adapter :net_http
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def get(*args, &block)
|
28
|
+
make_request(:get, *args, &block)
|
29
|
+
end
|
30
|
+
|
31
|
+
def post(*args, &block)
|
32
|
+
make_request(:post, *args, &block)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def connection_options
|
38
|
+
{
|
39
|
+
request: {
|
40
|
+
open_timeout: open_timeout,
|
41
|
+
timeout: timeout,
|
42
|
+
}
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def url
|
47
|
+
raise NotImplementedError
|
48
|
+
end
|
49
|
+
|
50
|
+
def make_request(http_method, *args, &block)
|
51
|
+
response = @connection.send(http_method, *args, &block)
|
52
|
+
response.body
|
53
|
+
end
|
54
|
+
|
55
|
+
def open_timeout
|
56
|
+
Wepay.open_timeout || DEFAULTS[:open_timeout]
|
57
|
+
end
|
58
|
+
|
59
|
+
def timeout
|
60
|
+
Wepay.timeout || DEFAULTS[:timeout]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Wepay
|
2
|
+
##
|
3
|
+
# Client for query and manipulation of Wepay's data.
|
4
|
+
#
|
5
|
+
class Client::Data < Client
|
6
|
+
def initialize
|
7
|
+
super() do |builder|
|
8
|
+
# Request
|
9
|
+
builder.use FaradayMiddleware::EncodeJson
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def url
|
15
|
+
Wepay.api_endpoint
|
16
|
+
end
|
17
|
+
|
18
|
+
def make_request(http_method, *args, &block)
|
19
|
+
params = args[1]
|
20
|
+
access_token = params.delete(:access_token) if params.is_a?(Hash)
|
21
|
+
access_token ||= Wepay.access_token
|
22
|
+
|
23
|
+
response = @connection.send http_method, *args do |builder|
|
24
|
+
builder.headers['Authorization'] = "Bearer #{access_token}"
|
25
|
+
block.call(builder) if block_given?
|
26
|
+
end
|
27
|
+
|
28
|
+
response.body
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Wepay
|
2
|
+
##
|
3
|
+
# Client for getting access token from Wepay's oauth endpoint.
|
4
|
+
#
|
5
|
+
class Client::Token < Client
|
6
|
+
def get_access_token(code, redirect_uri)
|
7
|
+
params = {
|
8
|
+
client_id: client_id,
|
9
|
+
client_secret: client_secret,
|
10
|
+
code: code,
|
11
|
+
redirect_uri: redirect_uri
|
12
|
+
}
|
13
|
+
|
14
|
+
get '', params
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def url
|
19
|
+
Wepay.oauth_token_endpoint
|
20
|
+
end
|
21
|
+
|
22
|
+
def client_id
|
23
|
+
Wepay.client_id
|
24
|
+
end
|
25
|
+
|
26
|
+
def client_secret
|
27
|
+
Wepay.client_secret
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Wepay
|
2
|
+
module Configuration
|
3
|
+
attr_accessor :client_id, :client_secret, :access_token, :account_id, :scope, :using_stage
|
4
|
+
|
5
|
+
##
|
6
|
+
# Time to wait for the connection to Wepay to open. After that
|
7
|
+
# {Wepay::TimeoutError} is thrown.
|
8
|
+
#
|
9
|
+
attr_accessor :open_timeout
|
10
|
+
|
11
|
+
##
|
12
|
+
# Time to wait for the first block of response from Wepay. After that
|
13
|
+
# {Wepay::TimeoutError} is thrown.
|
14
|
+
#
|
15
|
+
attr_accessor :timeout
|
16
|
+
|
17
|
+
def configure
|
18
|
+
yield self
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def api_endpoint
|
23
|
+
using_stage ? "https://stage.wepayapi.com/v2/" : "https://wepayapi.com/v2/"
|
24
|
+
end
|
25
|
+
|
26
|
+
def oauth_authorization_endpoint
|
27
|
+
using_stage ? "https://stage.wepay.com/v2/oauth2/authorize" : "https://www.wepay.com/v2/oauth2/authorize"
|
28
|
+
end
|
29
|
+
|
30
|
+
def oauth_token_endpoint
|
31
|
+
using_stage ? "https://stage.wepayapi.com/v2/oauth2/token" : "https://wepayapi.com/v2/oauth2/token"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/wepay/error.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Wepay
|
2
|
+
class Error < StandardError
|
3
|
+
end
|
4
|
+
|
5
|
+
##
|
6
|
+
# This error is raised when there is an error in the request.
|
7
|
+
#
|
8
|
+
class ApiError < Error
|
9
|
+
attr_reader :type, :code
|
10
|
+
|
11
|
+
def initialize(type, message, code)
|
12
|
+
super(message)
|
13
|
+
@type = type
|
14
|
+
@code = code
|
15
|
+
end
|
16
|
+
|
17
|
+
def message
|
18
|
+
"#{type} (#{code}): #{super}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# @see Wepay::Configuration#open_timeout
|
24
|
+
# @see Wepay::Configuration#timeout
|
25
|
+
#
|
26
|
+
class TimeoutError < Error
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "faraday"
|
2
|
+
require "faraday_middleware/response_middleware"
|
3
|
+
|
4
|
+
module Wepay
|
5
|
+
module Middleware
|
6
|
+
##
|
7
|
+
# Translates `Faraday::Error::TimeoutError` into `Wepay::TimeoutError`.
|
8
|
+
#
|
9
|
+
# @raise Wepay::TimeoutError
|
10
|
+
#
|
11
|
+
class CatchTimeout
|
12
|
+
def initialize(app)
|
13
|
+
@app = app
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
begin
|
18
|
+
@app.call(env)
|
19
|
+
rescue Faraday::Error::TimeoutError
|
20
|
+
raise Wepay::TimeoutError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
##
|
26
|
+
# Checks for errors in responses from Wepay, in which case it raises a
|
27
|
+
# `Wepay::ApiError` which contains the code and the message found in the response.
|
28
|
+
#
|
29
|
+
# @raise Wepay::ApiError
|
30
|
+
#
|
31
|
+
class CheckStatus < Faraday::Response::Middleware
|
32
|
+
def on_complete(env)
|
33
|
+
response = env[:body]
|
34
|
+
if response.is_a?(Hash) && response["error"]
|
35
|
+
type = response["error"]
|
36
|
+
message = response["error_description"]
|
37
|
+
code = response["error_code"]
|
38
|
+
|
39
|
+
raise Wepay::ApiError.new(type, message, code)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/wepay/oauth.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Wepay
|
4
|
+
module OAuth
|
5
|
+
##
|
6
|
+
# @param redirect_uri [String] The uri the user will be redirected to after authorization. Must have the same domain as the application.
|
7
|
+
# @return [String] URL to redirect user to Wepay Authorization page
|
8
|
+
#
|
9
|
+
def authorization_url(redirect_uri)
|
10
|
+
url = URI.parse(Wepay.oauth_authorization_endpoint)
|
11
|
+
|
12
|
+
query = {
|
13
|
+
client_id: Wepay.client_id,
|
14
|
+
scope: Wepay.scope,
|
15
|
+
redirect_uri: redirect_uri
|
16
|
+
}
|
17
|
+
|
18
|
+
url.query = query.map { |k, v| "#{k}=#{v}" }.join("&")
|
19
|
+
url.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# @param code [String] The authorization code used to get the access token
|
24
|
+
# @param redirect_uri [String] The uri the user was redirected to after authorization. Must be the same as passed in /oauth2/authorize
|
25
|
+
# @return [Hashie::Mash]
|
26
|
+
#
|
27
|
+
def get_access_token(code, redirect_uri)
|
28
|
+
client = Wepay::Client::Token.new
|
29
|
+
client.get_access_token(code, redirect_uri)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://stage.wepayapi.com/v2/null
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.8.8
|
12
|
+
Authorization:
|
13
|
+
- Bearer access_token
|
14
|
+
response:
|
15
|
+
status:
|
16
|
+
code: 501
|
17
|
+
message:
|
18
|
+
headers:
|
19
|
+
server:
|
20
|
+
- nginx
|
21
|
+
date:
|
22
|
+
- Tue, 03 Dec 2013 09:34:30 GMT
|
23
|
+
content-type:
|
24
|
+
- application/json
|
25
|
+
transfer-encoding:
|
26
|
+
- chunked
|
27
|
+
connection:
|
28
|
+
- close
|
29
|
+
body:
|
30
|
+
encoding: UTF-8
|
31
|
+
string: '{"error":"invalid_request","error_description":"that is not a recognized
|
32
|
+
WePay API call","error_code":1001}'
|
33
|
+
http_version:
|
34
|
+
recorded_at: Tue, 03 Dec 2013 09:34:31 GMT
|
35
|
+
recorded_with: VCR 2.8.0
|