webpay 2.4.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -2
  3. data/Rakefile +0 -6
  4. data/lib/webpay/account.rb +19 -24
  5. data/lib/webpay/api_resource.rb +5 -0
  6. data/lib/webpay/charge.rb +48 -27
  7. data/lib/webpay/customer.rb +56 -91
  8. data/lib/webpay/data_types.rb +2069 -0
  9. data/lib/webpay/error.rb +68 -0
  10. data/lib/webpay/event.rb +19 -16
  11. data/lib/webpay/recursion.rb +47 -46
  12. data/lib/webpay/shop.rb +37 -68
  13. data/lib/webpay/token.rb +19 -10
  14. data/lib/webpay.rb +114 -77
  15. data/webpay.gemspec +6 -13
  16. metadata +16 -179
  17. data/.rspec +0 -2
  18. data/.travis.yml +0 -12
  19. data/LICENSE.txt +0 -22
  20. data/README.md +0 -52
  21. data/gemfiles/no_doc_gems +0 -14
  22. data/lib/data/ca-certificates.crt +0 -3829
  23. data/lib/webpay/card.rb +0 -13
  24. data/lib/webpay/client.rb +0 -81
  25. data/lib/webpay/deleted_entity.rb +0 -8
  26. data/lib/webpay/entity.rb +0 -71
  27. data/lib/webpay/entity_list.rb +0 -25
  28. data/lib/webpay/fee.rb +0 -13
  29. data/lib/webpay/operations.rb +0 -49
  30. data/lib/webpay/response_converter.rb +0 -57
  31. data/lib/webpay/version.rb +0 -5
  32. data/lib/webpay/webpay_error.rb +0 -126
  33. data/spec/resources/account/delete.txt +0 -15
  34. data/spec/resources/account/retrieve.txt +0 -23
  35. data/spec/resources/charges/all.txt +0 -139
  36. data/spec/resources/charges/capture.txt +0 -49
  37. data/spec/resources/charges/create_with_card.txt +0 -49
  38. data/spec/resources/charges/create_with_customer.txt +0 -49
  39. data/spec/resources/charges/refund.txt +0 -57
  40. data/spec/resources/charges/retrieve.txt +0 -49
  41. data/spec/resources/charges/retrieve_not_captured.txt +0 -42
  42. data/spec/resources/customers/all.txt +0 -76
  43. data/spec/resources/customers/create.txt +0 -31
  44. data/spec/resources/customers/delete.txt +0 -16
  45. data/spec/resources/customers/retrieve.txt +0 -63
  46. data/spec/resources/customers/retrieve_deleted.txt +0 -16
  47. data/spec/resources/customers/update.txt +0 -31
  48. data/spec/resources/errors/bad_request.txt +0 -18
  49. data/spec/resources/errors/broken_json.txt +0 -16
  50. data/spec/resources/errors/card_error.txt +0 -19
  51. data/spec/resources/errors/not_found.txt +0 -18
  52. data/spec/resources/errors/not_found_ja.txt +0 -20
  53. data/spec/resources/errors/unauthorized.txt +0 -16
  54. data/spec/resources/errors/unknown_api_error.txt +0 -17
  55. data/spec/resources/events/all_with_type.txt +0 -164
  56. data/spec/resources/events/retrieve.txt +0 -41
  57. data/spec/resources/recursions/all.txt +0 -61
  58. data/spec/resources/recursions/create.txt +0 -26
  59. data/spec/resources/recursions/delete.txt +0 -16
  60. data/spec/resources/recursions/resume.txt +0 -26
  61. data/spec/resources/recursions/retrieve.txt +0 -26
  62. data/spec/resources/recursions/retrieve_deleted.txt +0 -16
  63. data/spec/resources/recursions/retrieve_suspended.txt +0 -26
  64. data/spec/resources/shops/all.txt +0 -122
  65. data/spec/resources/shops/create.txt +0 -54
  66. data/spec/resources/shops/retrieve.txt +0 -54
  67. data/spec/resources/shops/update.txt +0 -55
  68. data/spec/resources/tokens/create.txt +0 -30
  69. data/spec/resources/tokens/retrieve.txt +0 -30
  70. data/spec/spec_helper.rb +0 -37
  71. data/spec/webpay/account_spec.rb +0 -24
  72. data/spec/webpay/charge_spec.rb +0 -143
  73. data/spec/webpay/customer_spec.rb +0 -109
  74. data/spec/webpay/event_spec.rb +0 -30
  75. data/spec/webpay/recursion_spec.rb +0 -93
  76. data/spec/webpay/shop_spec.rb +0 -121
  77. data/spec/webpay/token_spec.rb +0 -33
  78. data/spec/webpay/webpay_error_spec.rb +0 -64
  79. data/spec/webpay_spec.rb +0 -40
data/lib/webpay/card.rb DELETED
@@ -1,13 +0,0 @@
1
- module WebPay
2
-
3
- # Object for API response hash object with <code>hash['object'] = card</code>.
4
- # Card is not accessible as an API endpoint
5
- class Card < Entity
6
-
7
- # Check equality with rhs
8
- # @return [Boolean] true if rhs is the same object, or it is a Card with the same fingerprint value
9
- def ==(other)
10
- other.equals?(self) || (other.instance_of?(self.class) && other.fingerprint == self.fingerprint)
11
- end
12
- end
13
- end
data/lib/webpay/client.rb DELETED
@@ -1,81 +0,0 @@
1
- require 'faraday'
2
- require 'json'
3
-
4
- module WebPay
5
-
6
- # API client wrapping of Faraday.
7
- # Not intended to use directly.
8
- class Client
9
-
10
- # Initialize client
11
- #
12
- # @param api_key [String] User's secret API key
13
- # @param api_base [String] the URL without trailing '/'.
14
- # @param api_version [String] the path indicating API version. `/v1`.
15
- #
16
- # @example Client for the default endpoint
17
- # Client.new('test_secret_XXXX', 'https://api.webpay.jp', '/v1')
18
- def initialize(api_key, api_base, api_version, api_proxy = nil, lang = :en)
19
- ssl_options = {ca_file: WebPay.ssl_ca_file}
20
- default_headers = {
21
- 'Authorization' => "Bearer #{api_key}",
22
- 'User-Agent' => "WebPay#{api_version} RubyBinding/#{WebPay::VERSION}",
23
- 'Accept-Language' => lang.to_s
24
- }
25
- @conn = Faraday.new(api_base, ssl: ssl_options, headers: default_headers, proxy: api_proxy) do |builder|
26
- builder.request :url_encoded
27
- builder.adapter Faraday.default_adapter
28
- end
29
- @api_version = api_version
30
- end
31
-
32
- # Convert faraday response to a hash by decoding JSON.
33
- # This raises error if the response indicates error status.
34
- #
35
- # @api private
36
- # @param response [Faraday::Response]
37
- # @return [Hash] Raw object
38
- # @raise [WebPay::WebPayError] For invalid requests (4xx) or internal server error (5xx)
39
- def handle_response(response)
40
- case response.status
41
- when 200..299
42
- begin
43
- JSON.parse(response.body.force_encoding(infer_encoding(response)))
44
- rescue JSON::ParserError => e
45
- raise WebPay::APIConnectionError.new("Response JSON is broken. #{e.message}: #{response.body}", e)
46
- end
47
- else
48
- raise WebPay::WebPayError.from_response(response.status, response.body)
49
- end
50
- end
51
-
52
- Faraday::Connection::METHODS.each do |method|
53
- define_method(method) do |url, *args|
54
- begin
55
- response = @conn.__send__(method, @api_version + url, *args)
56
- rescue Faraday::Error::ClientError, URI::InvalidURIError => e
57
- raise WebPay::APIConnectionError.faraday_error(e)
58
- end
59
- handle_response(response)
60
- end
61
- end
62
-
63
- private
64
-
65
- # Infer encoding from response
66
- #
67
- # @param response [Faraday::Response]
68
- # @return [Encoding]
69
- def infer_encoding(response)
70
- unless (type = response.headers['content-type']) &&
71
- (charset = type.split(';').find { |field| field.include?('charset=') })
72
- return Encoding.default_external
73
- end
74
-
75
- encoding_string = charset.split('=', 2).last.strip
76
- Encoding.find(encoding_string)
77
- rescue
78
- Encoding.default_external
79
- end
80
- end
81
- end
@@ -1,8 +0,0 @@
1
- module WebPay
2
- class DeletedEntity < Entity
3
- # @return [Boolean] true
4
- def deleted?
5
- true
6
- end
7
- end
8
- end
data/lib/webpay/entity.rb DELETED
@@ -1,71 +0,0 @@
1
- module WebPay
2
-
3
- # The base class for entity objects
4
- # @abstract
5
- class Entity
6
- class << self
7
- include Operations
8
-
9
- # Convert hash API response into an entity object
10
- # @param [Hash] hash Raw API response
11
- # @return [Entity] An entity object corresponds to hash
12
- def convert(hash)
13
- converter = ResponseConverter.new
14
- converter.convert(hash)
15
- end
16
- end
17
-
18
- # Attributes of this object.
19
- # <code>method_missing</code> and <code>#[]</code> are provided to access attributes
20
- attr_reader :attributes
21
-
22
- # Initialized by ResponseConverter
23
- # @api private
24
- def initialize(attributes)
25
- @attributes = attributes
26
- end
27
-
28
- # @return [Boolean] true if rhs is the same object or has the same id
29
- def ==(other)
30
- other.equal?(self) || (other.instance_of?(self.class) && other.id == self.id)
31
- end
32
-
33
- # Access attribute.
34
- # Using the attribute name as a method is recommended.
35
- # @return [Object] The attribute's value
36
- def [](key)
37
- send(key)
38
- end
39
-
40
- # Return a hash similar to the response from API.
41
- # @return [Hash] a hash similar to the response from API
42
- def to_hash
43
- Hash[@attributes.map { |k, v| [k, v.is_a?(Entity) ? v.to_hash : v] }]
44
- end
45
-
46
- alias_method :to_h, :to_hash
47
-
48
- # Provide access to attributes
49
- # @return [Object] The attribute's value
50
- def method_missing(method_name, *args, &block)
51
- key = method_name.to_s
52
- if @attributes.has_key?(key)
53
- @attributes[key]
54
- else
55
- super
56
- end
57
- end
58
-
59
- def respond_to_missing?(method_name, include_private = false)
60
- @attributes.has_key?(method_name.to_s) || super
61
- end
62
-
63
- private
64
- def update_attributes(attributes)
65
- raise "unexpected object" if attributes['object'] != @attributes['object']
66
- new_object = ResponseConverter.new.convert(attributes)
67
- @attributes = new_object.attributes
68
- self
69
- end
70
- end
71
- end
@@ -1,25 +0,0 @@
1
- module WebPay
2
-
3
- # Object for API response hash object with <code>hash['object'] = list</code>.
4
- # This enumerates containing data.
5
- class EntityList < Entity
6
- include Enumerable
7
-
8
- # @return [Boolean] true if rhs is the same object or id lists of containing data are the same
9
- def ==(other)
10
- other.equal?(self) ||
11
- (other.instance_of?(self.class) && other.data.map(&:id) == self.data.map(&:id))
12
- end
13
-
14
- # Return the all entry count, not limited by <code>limit</code>.
15
- # This overrides <code>Enumerable#count</code>. Not necessarily equal to the data size.
16
- def count
17
- @attributes['count']
18
- end
19
-
20
- # Enumerate containing data.
21
- def each(&block)
22
- self.data.each(&block)
23
- end
24
- end
25
- end
data/lib/webpay/fee.rb DELETED
@@ -1,13 +0,0 @@
1
- module WebPay
2
-
3
- # Object for API response hash object with <code>hash['object'] = fee</code>.
4
- # Fee is not accessible as an API endpoint
5
- class Fee < Entity
6
-
7
- # Check equality with rhs
8
- # @return [Boolean] true only if rhs is the same object
9
- def ==(other)
10
- self.equal?(other)
11
- end
12
- end
13
- end
@@ -1,49 +0,0 @@
1
- module WebPay
2
-
3
- # This module installs collection operations to entities.
4
- # Some of <code>create</code>, <code>retrieve</code>, and <code>all</code> are defined as class methods.
5
- module Operations
6
-
7
- # Install selected operations
8
- # @api private
9
- def install_class_operations(*operations)
10
- define_create if operations.include?(:create)
11
- define_retrieve if operations.include?(:retrieve)
12
- define_all if operations.include?(:all)
13
- end
14
-
15
- # Define <code>create</code> method
16
- # @api private
17
- def define_create
18
- instance_eval do
19
- def create(params = {})
20
- convert(WebPay.client.post(path, params))
21
- end
22
- end
23
- end
24
-
25
- # Define <code>retrieve(id)</code> method
26
- # @api private
27
- def define_retrieve
28
- instance_eval do
29
- def retrieve(id)
30
- id = id.to_s
31
- if id.strip == ''
32
- raise InvalidRequestError.invalid_id(id)
33
- end
34
- convert(WebPay.client.get([path, id].join('/')))
35
- end
36
- end
37
- end
38
-
39
- # Define <code>all</code> method
40
- # @api private
41
- def define_all
42
- instance_eval do
43
- def all(params = {})
44
- convert(WebPay.client.get(path, params))
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,57 +0,0 @@
1
- module WebPay
2
-
3
- # Converts raw Hash response to an entity
4
- class ResponseConverter
5
-
6
- # Converts raw Hash response to an entity.
7
- # This recursively changes internal objects.
8
- # @param [Hash] attributes Raw API response
9
- # @return [Entity] Corresponding entity
10
- def convert(attributes)
11
- case attributes['object']
12
- when 'card'
13
- Card.new(attributes)
14
- when 'fee'
15
- Fee.new(attributes)
16
- when 'charge'
17
- if attributes['card']
18
- attributes['card'] = convert(attributes['card'])
19
- end
20
- if attributes['fees']
21
- attributes['fees'] = attributes['fees'].map { |fee| convert(fee) }
22
- end
23
- Charge.new(attributes)
24
- when 'customer'
25
- if attributes['active_card']
26
- attributes['active_card'] = convert(attributes['active_card'])
27
- end
28
- if attributes['recursions']
29
- attributes['recursions'] = attributes['recursions'].map { |recursion| convert(recursion) }
30
- end
31
- Customer.new(attributes)
32
- when 'token'
33
- if attributes['card']
34
- attributes['card'] = convert(attributes['card'])
35
- end
36
- Token.new(attributes)
37
- when 'event'
38
- if attributes['data']
39
- attributes['data']['object'] = convert(attributes['data']['object'])
40
- attributes['data'] = Event::Data.new(attributes['data'])
41
- end
42
- Event.new(attributes)
43
- when 'shop'
44
- Shop.new(attributes)
45
- when 'recursion'
46
- Recursion.new(attributes)
47
- when 'account'
48
- Account.new(attributes)
49
-
50
- when 'list'
51
- attributes['data'] ||= []
52
- attributes['data'].map! { |line| convert(line) }
53
- EntityList.new(attributes)
54
- end
55
- end
56
- end
57
- end
@@ -1,5 +0,0 @@
1
- module WebPay
2
-
3
- # Version of WebPay gem
4
- VERSION = "2.4.1"
5
- end
@@ -1,126 +0,0 @@
1
- require 'json'
2
- module WebPay
3
-
4
- # Abstract error class for WebPay errors.
5
- # All WebPay error classes inherit this.
6
- # This error itself is not raised.
7
- class WebPayError < StandardError
8
- # @api private
9
- # @return [WebPayError]
10
- def self.from_response(status, body)
11
- hash =
12
- begin
13
- JSON.load(body)
14
- rescue JSON::ParserError => e
15
- return WebPay::APIConnectionError.new("Response JSON is broken. #{e.message}: #{body}", e)
16
- end
17
- unless hash['error']
18
- return APIConnectionError.new("Invalid response #{body}")
19
- end
20
- error_hash = hash['error']
21
- case status
22
- when 400, 404
23
- InvalidRequestError.new(status, error_hash)
24
- when 401
25
- AuthenticationError.new(status, error_hash)
26
- when 402
27
- CardError.new(status, error_hash)
28
- else
29
- APIError.new(status, error_hash)
30
- end
31
- end
32
-
33
- # @return [Integer, nil] HTTP status code
34
- attr_reader :status
35
-
36
- # @return [Hash, nil] Responded error object
37
- attr_reader :error_response
38
-
39
- def initialize(message, status = nil, error_response = nil)
40
- @status, @error_response = status, error_response
41
- super(message)
42
- end
43
- end
44
-
45
- # This error is raised when API request fails.
46
- class APIConnectionError < WebPayError
47
- # @api private
48
- # @return [APIConnectionError]
49
- def self.faraday_error(e)
50
- new("Connection with WebPay API server failed. #{e.message}", e)
51
- end
52
-
53
- # @return [Error] The original error raised in request
54
- attr_reader :original_error
55
-
56
- def initialize(message, original_error = nil)
57
- @original_error = original_error
58
- super(message)
59
- end
60
- end
61
-
62
- # This error means WebPay service reported internal server error.
63
- class APIError < WebPayError
64
-
65
- # @return [String] 'api_error' or 'processing_error'
66
- attr_reader :type
67
-
68
- def initialize(status, error_response)
69
- @type = error_response['type']
70
- super(error_response['message'], status, error_response)
71
- end
72
- end
73
-
74
- # Occurs when api_key is invalid.
75
- # Check again that a correct api_key is set
76
- class AuthenticationError < WebPayError
77
- def initialize(status, error_response)
78
- super(error_response['message'], status, error_response)
79
- end
80
- end
81
-
82
- # Occurs when card information is invalid
83
- class CardError < WebPayError
84
-
85
- # @return [String] 'card_error'
86
- attr_reader :type
87
-
88
- # @return [String] Error code
89
- attr_reader :code
90
-
91
- # @return [String] The field where an error is detected
92
- attr_reader :param
93
-
94
- def initialize(status, error_response)
95
- @type = error_response['type']
96
- @code = error_response['code']
97
- @param = error_response['param']
98
- super(error_response['message'], status, error_response)
99
- end
100
- end
101
-
102
- # Occurs when the specified entity is not found, or request parameters are
103
- # invalid
104
- class InvalidRequestError < WebPayError
105
-
106
- # @return [String] 'invalid_request_error'
107
- attr_reader :type
108
-
109
- # @return [String] The field where an error is detected
110
- attr_reader :param
111
-
112
- def initialize(status, error_response)
113
- @type = error_response['type']
114
- @param = error_response['param']
115
- super(error_response['message'], status, error_response)
116
- end
117
-
118
- # Internal
119
- def self.invalid_id(id)
120
- InvalidRequestError.new(nil, {
121
- 'type' => 'invalid_request_error',
122
- 'message' => "ID must not be empty",
123
- 'param' => 'id' })
124
- end
125
- end
126
- end
@@ -1,15 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Content-Type: application/json; charset=utf-8
3
- X-Ua-Compatible: IE=Edge
4
- Etag: "ffc2622aa8286367b501554d9625bc7e"
5
- Cache-Control: max-age=0, private, must-revalidate
6
- X-Request-Id: b90a98ba6c730796bb4651b30eefcf3d
7
- X-Runtime: 0.030542
8
- Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
- Date: Wed, 11 Sep 2013 12:50:01 GMT
10
- Content-Length: 22
11
- Connection: Keep-Alive
12
-
13
- {
14
- "deleted": true
15
- }
@@ -1,23 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Content-Type: application/json; charset=utf-8
3
- X-Ua-Compatible: IE=Edge
4
- Etag: "bfda5f4ce8f4baff2dc95b81d3eeddc8"
5
- Cache-Control: max-age=0, private, must-revalidate
6
- X-Request-Id: ac424d922fefdd1625e41bda0e13f4b8
7
- X-Runtime: 0.057802
8
- Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
- Date: Wed, 11 Sep 2013 12:48:50 GMT
10
- Content-Length: 234
11
- Connection: Keep-Alive
12
-
13
- {
14
- "object": "account",
15
- "id": "acct_2Cmdexb7J2r78rz",
16
- "email": "test-me@example.com",
17
- "statement_descriptor": null,
18
- "details_submitted": false,
19
- "charge_enabled": false,
20
- "currencies_supported": [
21
- "jpy"
22
- ]
23
- }
@@ -1,139 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Content-Type: application/json; charset=utf-8
3
- X-Ua-Compatible: IE=Edge
4
- Etag: "d62affbd4db0c10ce2244cc7d5a05249"
5
- Cache-Control: max-age=0, private, must-revalidate
6
- X-Request-Id: c53aade07e31b8c4cc03c18bfe5ee086
7
- X-Runtime: 0.013481
8
- Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
- Date: Mon, 14 Apr 2014 02:43:46 GMT
10
- Content-Length: 3067
11
- Connection: Keep-Alive
12
-
13
- {
14
- "object": "list",
15
- "url": "/v1/charges",
16
- "count": 4,
17
- "data": [
18
- {
19
- "id": "ch_511apkasx749bfE",
20
- "object": "charge",
21
- "livemode": false,
22
- "currency": "jpy",
23
- "description": "Test Charge",
24
- "amount": 1000,
25
- "amount_refunded": 0,
26
- "customer": "cus_5119ShaAgbLyfwS",
27
- "created": 1397443228,
28
- "paid": false,
29
- "refunded": false,
30
- "failure_message": null,
31
- "card": {
32
- "object": "card",
33
- "exp_year": 2016,
34
- "exp_month": 9,
35
- "fingerprint": "215b5b2fe460809b8bb90bae6eeac0e0e0987bd7",
36
- "name": "KEI KUBO",
37
- "country": "JP",
38
- "type": "Visa",
39
- "cvc_check": "pass",
40
- "last4": "4242"
41
- },
42
- "captured": false,
43
- "expire_time": 1398048028,
44
- "fees": [
45
-
46
- ]
47
- },
48
- {
49
- "id": "ch_5119xE4mH4zA9p9",
50
- "object": "charge",
51
- "livemode": false,
52
- "currency": "jpy",
53
- "description": "Test Charge",
54
- "amount": 1000,
55
- "amount_refunded": 0,
56
- "customer": "cus_5119ShaAgbLyfwS",
57
- "created": 1397443215,
58
- "paid": true,
59
- "refunded": false,
60
- "failure_message": null,
61
- "card": {
62
- "object": "card",
63
- "exp_year": 2016,
64
- "exp_month": 9,
65
- "fingerprint": "215b5b2fe460809b8bb90bae6eeac0e0e0987bd7",
66
- "name": "KEI KUBO",
67
- "country": "JP",
68
- "type": "Visa",
69
- "cvc_check": "pass",
70
- "last4": "4242"
71
- },
72
- "captured": true,
73
- "expire_time": null,
74
- "fees": [
75
- {
76
- "object": "fee",
77
- "transaction_type": "payment",
78
- "transaction_fee": 0,
79
- "rate": 35.0,
80
- "amount": 350,
81
- "created": 1397443216
82
- }
83
- ]
84
- },
85
- {
86
- "id": "ch_5112dr0Mu5Kyd2I",
87
- "object": "charge",
88
- "livemode": false,
89
- "currency": "jpy",
90
- "description": "Test Charge",
91
- "amount": 1000,
92
- "amount_refunded": 400,
93
- "customer": null,
94
- "created": 1397442849,
95
- "paid": true,
96
- "refunded": false,
97
- "failure_message": null,
98
- "card": {
99
- "object": "card",
100
- "exp_year": 2015,
101
- "exp_month": 12,
102
- "fingerprint": "215b5b2fe460809b8bb90bae6eeac0e0e0987bd7",
103
- "name": "YUUKO SHIONJI",
104
- "country": "JP",
105
- "type": "Visa",
106
- "cvc_check": "pass",
107
- "last4": "4242"
108
- },
109
- "captured": true,
110
- "expire_time": null,
111
- "fees": [
112
- {
113
- "object": "fee",
114
- "transaction_type": "payment",
115
- "transaction_fee": 0,
116
- "rate": 35.0,
117
- "amount": 350,
118
- "created": 1397442849
119
- },
120
- {
121
- "object": "fee",
122
- "transaction_type": "refund",
123
- "transaction_fee": 0,
124
- "rate": 35.0,
125
- "amount": -350,
126
- "created": 1397443154
127
- },
128
- {
129
- "object": "fee",
130
- "transaction_type": "payment",
131
- "transaction_fee": 0,
132
- "rate": 35.0,
133
- "amount": 210,
134
- "created": 1397443154
135
- }
136
- ]
137
- }
138
- ]
139
- }
@@ -1,49 +0,0 @@
1
- HTTP/1.1 200 OK
2
- Content-Type: application/json; charset=utf-8
3
- X-Ua-Compatible: IE=Edge
4
- Etag: "55751ab0623ce3649f648ce9161a340e"
5
- Cache-Control: max-age=0, private, must-revalidate
6
- X-Request-Id: e57b763f56b9212d2aac3d5204303b59
7
- X-Runtime: 0.471463
8
- Server: WEBrick/1.3.1 (Ruby/1.9.3/2013-02-22)
9
- Date: Mon, 14 Apr 2014 02:58:16 GMT
10
- Content-Length: 785
11
- Connection: Keep-Alive
12
-
13
- {
14
- "id": "ch_5113hA4L51yj8TF",
15
- "object": "charge",
16
- "livemode": false,
17
- "currency": "jpy",
18
- "description": "Test Charge",
19
- "amount": 1000,
20
- "amount_refunded": 0,
21
- "customer": "cus_5119ShaAgbLyfwS",
22
- "created": 1397444145,
23
- "paid": true,
24
- "refunded": false,
25
- "failure_message": null,
26
- "card": {
27
- "object": "card",
28
- "exp_year": 2016,
29
- "exp_month": 9,
30
- "fingerprint": "215b5b2fe460809b8bb90bae6eeac0e0e0987bd7",
31
- "name": "KEI KUBO",
32
- "country": "JP",
33
- "type": "Visa",
34
- "cvc_check": "pass",
35
- "last4": "4242"
36
- },
37
- "captured": true,
38
- "expire_time": 1398048945,
39
- "fees": [
40
- {
41
- "object": "fee",
42
- "transaction_type": "payment",
43
- "transaction_fee": 0,
44
- "rate": 3.25,
45
- "amount": 33,
46
- "created": 1397444296
47
- }
48
- ]
49
- }