mundipagg 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +59 -0
- data/lib/mundipagg.rb +8 -0
- data/lib/mundipagg/BoletoTransaction.rb +31 -0
- data/lib/mundipagg/Buyer.rb +82 -0
- data/lib/mundipagg/BuyerAddress.rb +69 -0
- data/lib/mundipagg/CreateOrderRequest.rb +62 -0
- data/lib/mundipagg/CreditCardTransaction.rb +78 -0
- data/lib/mundipagg/ManageOrderRequest.rb +52 -0
- data/lib/mundipagg/QueryOrderRequest.rb +27 -0
- data/lib/mundipagg/Recurrency.rb +37 -0
- data/lib/mundipagg/gateway.rb +309 -0
- data/lib/mundipagg/version.rb +9 -0
- data/mundipagg.gemspec +16 -0
- data/tests/features/boleto.feature +9 -0
- data/tests/features/credit_card.feature +16 -0
- data/tests/features/step_definitions/boleto_steps.rb +54 -0
- data/tests/features/step_definitions/credit_card_steps.rb +76 -0
- data/tests/features/support/env.rb +0 -0
- metadata +76 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bbf3d7205f733e00f3692647442de84ff6416f4a
|
4
|
+
data.tar.gz: 7d10653f59d31e4579d6d132082e5fb838e80d91
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a9dac6bc5d3b949c71aa863a46e59c582fa4adfddea857c4dc1bb3a9aa8a2b74e6346201644ac9497ea7becc71fe4aa4331db7752513e85f81c39d596f2d3cc5
|
7
|
+
data.tar.gz: afc809a2a9e9efa1a3cd226c72d550e031dad18d61d91c939830efa862add9c5ac69ab26ec78517aaa0ad8dc0827963177400b5e39e31adacb65e0a62d0a349c
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012-2013 MundiPagg Soluções em Pagamentos
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
MundiPagg Ruby Client Library
|
2
|
+
====================
|
3
|
+
|
4
|
+
[![Build Status](https://travis-ci.org/mundipagg/ruby-integration-api.png?branch=master)](https://travis-ci.org/mundipagg/ruby-integration-api)
|
5
|
+
|
6
|
+
|
7
|
+
Ruby API for integration with MundiPagg payment web services.
|
8
|
+
|
9
|
+
## Dependencies
|
10
|
+
* [Savon 2.3.0](http://savonrb.com/version2/)
|
11
|
+
* [Nori 2.3.0](https://github.com/savonrb/nori)
|
12
|
+
|
13
|
+
Unit tests made with [Cucumber](https://github.com/cucumber/cucumber) and [RSpec](https://github.com/rspec/rspec)
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
Below a simple exemple of an order with one credit card transaction.
|
17
|
+
|
18
|
+
|
19
|
+
````Ruby
|
20
|
+
require 'mundipagg'
|
21
|
+
|
22
|
+
#Create the client instance
|
23
|
+
client = MundiPaggClient.new :test #API test environment
|
24
|
+
|
25
|
+
#Create the order
|
26
|
+
order = CreateOrderRequest.new
|
27
|
+
|
28
|
+
#Fill order information
|
29
|
+
order.amountInCents = 1000 # R$ 10,00
|
30
|
+
order.amountInCentsToConsiderPaid = 1000
|
31
|
+
order.merchantKey = '00000000-0000-0000-0000-000000000000'
|
32
|
+
order.orderReference = 'Custom Order 42'
|
33
|
+
credit = CreditCardTransaction.new
|
34
|
+
|
35
|
+
#Credit card transaction information
|
36
|
+
credit.amountInCents = 1000; # R$ 10,00
|
37
|
+
credit.creditCardBrandEnum = CreditCardTransaction.BrandEnum[:Visa]
|
38
|
+
credit.creditCardOperationEnum = CreditCardTransaction.OperationEnum[:AuthAndCapture]
|
39
|
+
credit.creditCardNumber = '4111111111111111'
|
40
|
+
credit.holderName = 'Anthony Edward Stark'
|
41
|
+
credit.installmentCount = 1
|
42
|
+
credit.paymentMethodCode = 1 #Simulator
|
43
|
+
credit.securityCode = 123
|
44
|
+
credit.transactionReference = 'Custom Transaction Identifier'
|
45
|
+
credit.expirationMonth = 5
|
46
|
+
credit.expirationYear = 2020
|
47
|
+
|
48
|
+
#Add transaction to order
|
49
|
+
order.creditCardTransactionCollection << credit
|
50
|
+
|
51
|
+
response = client.CreateOrder(order)
|
52
|
+
````
|
53
|
+
|
54
|
+
## More information
|
55
|
+
|
56
|
+
[RubyDoc](http://rubydoc.info/github/mundipagg/mundipagg-ruby-api/)
|
57
|
+
|
58
|
+
## LICENSE
|
59
|
+
See the LICENSE file.
|
data/lib/mundipagg.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'mundipagg/gateway'
|
3
|
+
require 'mundipagg/CreateOrderRequest'
|
4
|
+
require 'mundipagg/BoletoTransaction'
|
5
|
+
require 'mundipagg/CreditCardTransaction'
|
6
|
+
require 'mundipagg/Buyer'
|
7
|
+
require 'mundipagg/QueryOrderRequest'
|
8
|
+
require 'mundipagg/ManageOrderRequest'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
class BoletoTransaction
|
3
|
+
|
4
|
+
# @return [Long] Transaction amount in cents
|
5
|
+
attr_accessor :amountInCents
|
6
|
+
|
7
|
+
# @return [Integer] Bank code
|
8
|
+
attr_accessor :bankNumber
|
9
|
+
|
10
|
+
# @return [Integer] How many days after the creation the boleto will be valid.
|
11
|
+
# @param Default: 7
|
12
|
+
attr_accessor :daysToAddInBoletoExpirationDate
|
13
|
+
|
14
|
+
# @return [Integer] Number used to identify the boleto
|
15
|
+
attr_accessor :nossoNumero
|
16
|
+
|
17
|
+
# @return [Long] Text with payment instructions. Limit: 120 characters.
|
18
|
+
attr_accessor :instructions
|
19
|
+
|
20
|
+
# @return [Long] Custom transaction identifier.
|
21
|
+
attr_accessor :transactionReference
|
22
|
+
|
23
|
+
# Initialize class with default values
|
24
|
+
def initialize
|
25
|
+
@amountInCents = 0
|
26
|
+
@daysToAddInBoletoExpirationDate = 7
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
class Buyer
|
3
|
+
|
4
|
+
# @return [Guid] Buyer unique idenfitication. Generated by MundiPagg.
|
5
|
+
# param Default: 00000000-0000-0000-0000-000000000000 (Guid empty)
|
6
|
+
attr_accessor :buyerKey
|
7
|
+
# @return [String] Buyer custom idenfitication.
|
8
|
+
attr_accessor :buyerReference
|
9
|
+
# @return [String] Email address.
|
10
|
+
attr_accessor :email
|
11
|
+
# @return [String] Facebook ID.
|
12
|
+
attr_accessor :facebookId
|
13
|
+
# @return [String] Gender.
|
14
|
+
attr_accessor :genderEnum
|
15
|
+
# @return [String] Home phone.
|
16
|
+
attr_accessor :homePhone
|
17
|
+
# @return [String] IP Address.
|
18
|
+
attr_accessor :ipAddress
|
19
|
+
# @return [String] Mobile phone.
|
20
|
+
attr_accessor :mobilePhone
|
21
|
+
# @return [String] Work phone.
|
22
|
+
attr_accessor :workPhone
|
23
|
+
# @return [String] Buyer full name.
|
24
|
+
attr_accessor :name
|
25
|
+
# <i>Person</i> for individual people information and <i>Company</i> for enterprise information
|
26
|
+
# @return [String] Type.
|
27
|
+
# @param Default: Person
|
28
|
+
attr_accessor :personTypeEnum
|
29
|
+
# @return [String] Document number.
|
30
|
+
attr_accessor :taxDocumentNumber
|
31
|
+
#<i>CPF<i> for person document number or <i>CNPJ</i> for company document number.
|
32
|
+
# @return [String] Document type.
|
33
|
+
# @param Default: CPF
|
34
|
+
attr_accessor :taxDocumentTypeEnum
|
35
|
+
# @return [String] Twitter ID.
|
36
|
+
attr_accessor :twitterId
|
37
|
+
# @return [Array] Array of addresses.
|
38
|
+
# @see BuyerAddress
|
39
|
+
attr_accessor :addressCollection
|
40
|
+
|
41
|
+
# Gender
|
42
|
+
@@Gender = {
|
43
|
+
:Male => 'M',
|
44
|
+
:Female => 'F'
|
45
|
+
}
|
46
|
+
|
47
|
+
# Person Type
|
48
|
+
@@PersonType = {
|
49
|
+
:Person => 'Person',
|
50
|
+
:Company => 'Company'
|
51
|
+
}
|
52
|
+
|
53
|
+
# Document Type
|
54
|
+
@@DocumentType = {
|
55
|
+
:CPF => 'CPF',
|
56
|
+
:CNPJ => 'CNPJ'
|
57
|
+
}
|
58
|
+
|
59
|
+
# Initialize class with properties
|
60
|
+
def initialize
|
61
|
+
@addressCollection = Array.new
|
62
|
+
@buyerKey = '00000000-0000-0000-0000-000000000000'
|
63
|
+
@personTypeEnum = Buyer.PersonTypeEnum[:Person]
|
64
|
+
@taxDocumentTypeEnum = Buyer.DocumentTypeEnum[:CPF]
|
65
|
+
end
|
66
|
+
|
67
|
+
# Gender enum
|
68
|
+
def self.GenderEnum
|
69
|
+
@@Gender
|
70
|
+
end
|
71
|
+
|
72
|
+
# Person type enum
|
73
|
+
def self.PersonTypeEnum
|
74
|
+
@@PersonType
|
75
|
+
end
|
76
|
+
|
77
|
+
# Document type enum
|
78
|
+
def self.DocumentTypeEnum
|
79
|
+
@@DocumentType
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
class BuyerAddress
|
3
|
+
|
4
|
+
# @return [String] Address Type.
|
5
|
+
# @see AddressTypeEnum
|
6
|
+
# @param Default: Residential
|
7
|
+
attr_accessor :addressTypeEnum
|
8
|
+
# @return [String] City.
|
9
|
+
attr_accessor :city
|
10
|
+
# @return [String] Address complement.
|
11
|
+
attr_accessor :complement
|
12
|
+
# @return [String] Address country.
|
13
|
+
# @param Default: Brazil
|
14
|
+
# @see CountryEnum
|
15
|
+
attr_accessor :countryEnum
|
16
|
+
# @return [String] District.
|
17
|
+
attr_accessor :district
|
18
|
+
# @return [String] Address number.
|
19
|
+
attr_accessor :number
|
20
|
+
# @return [String] Address state.
|
21
|
+
attr_accessor :state
|
22
|
+
# @return [String] Street.
|
23
|
+
attr_accessor :street
|
24
|
+
# @return [String] Zip Code.
|
25
|
+
attr_accessor :zipCode
|
26
|
+
|
27
|
+
|
28
|
+
#Address Type Enum
|
29
|
+
@@ADDRESS_TYPE={
|
30
|
+
:Billing => 'Billing',
|
31
|
+
:Shipping => 'Shipping',
|
32
|
+
:Work => 'Comercial',
|
33
|
+
:Home => 'Residential'
|
34
|
+
}
|
35
|
+
|
36
|
+
|
37
|
+
# Country Enum
|
38
|
+
@@COUNTRY = {
|
39
|
+
:Brazil => 'Brazil',
|
40
|
+
:UnitedStates => 'USA',
|
41
|
+
:Argentina => 'Argentina',
|
42
|
+
:Bolivia => 'Bolivia',
|
43
|
+
:Chile => 'Chile',
|
44
|
+
:Colombia => 'Colombia',
|
45
|
+
:Uruguay => 'Uruguay',
|
46
|
+
:Mexico => 'Mexico',
|
47
|
+
:Paraguay => 'Paraguay'
|
48
|
+
}
|
49
|
+
|
50
|
+
#Initialize class with properties
|
51
|
+
def initialize
|
52
|
+
@addressTypeEnum = BuyerAddress.AddressTypeEnum[:Home]
|
53
|
+
@countryEnum = BuyerAddress.CountryEnum[:Brazil]
|
54
|
+
end
|
55
|
+
|
56
|
+
#Address Type Enum
|
57
|
+
# @see @@ADDRESS_TYPE
|
58
|
+
def self.AddressTypeEnum
|
59
|
+
@@ADDRESS_TYPE
|
60
|
+
end
|
61
|
+
|
62
|
+
# Country Enum
|
63
|
+
# @see @@COUNTRY
|
64
|
+
def self.CountryEnum
|
65
|
+
@@COUNTRY
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
class CreateOrderRequest
|
3
|
+
# @return [Long] Order amount in cents
|
4
|
+
attr_accessor :amountInCents
|
5
|
+
|
6
|
+
# @return [Long] Amount (in cents) to consider the order is paid
|
7
|
+
attr_accessor :amountInCentsToConsiderPaid
|
8
|
+
|
9
|
+
# @return [String] Order amount currency.
|
10
|
+
# @param Default: BRL
|
11
|
+
# @see CurrencyIsoEnum
|
12
|
+
attr_accessor :currencyIsoEnum
|
13
|
+
|
14
|
+
# @return [Buyer] Buyer instance
|
15
|
+
# @see Buyer
|
16
|
+
attr_accessor :buyer
|
17
|
+
|
18
|
+
# @return [Guid] MundiPagg merchant identification
|
19
|
+
attr_accessor :merchantKey
|
20
|
+
|
21
|
+
# If merchant not send OrderReference, Mundipagg will generate and return in the response.
|
22
|
+
# @return [String] Custom order identification.
|
23
|
+
attr_accessor :orderReference
|
24
|
+
|
25
|
+
# @return [Array] Array with all credit card transactions
|
26
|
+
attr_accessor :creditCardTransactionCollection
|
27
|
+
|
28
|
+
# @return [Array] Array with all boleto transactions
|
29
|
+
attr_accessor :boletoTransactionCollection
|
30
|
+
|
31
|
+
# If not send, it will be generate automatically in the webservice and returned in response.
|
32
|
+
# Web service request identification, it is used for investigate problems with webservice requests.
|
33
|
+
# @return [Guid] Globally Unique Identifier.
|
34
|
+
# @param Optional
|
35
|
+
# @param Default: 00000000-0000-0000-0000-000000000000
|
36
|
+
attr_accessor :requestKey
|
37
|
+
|
38
|
+
# Currency Enum
|
39
|
+
# @returns [Hash<Symbol, String>]
|
40
|
+
@@CURRENCY_ISO ={
|
41
|
+
:BrazillianReal => 'BRL',
|
42
|
+
:AmericanDollar => 'USD'
|
43
|
+
}
|
44
|
+
|
45
|
+
# Initialize class and properties
|
46
|
+
def initialize
|
47
|
+
@creditCardTransactionCollection = Array.new;
|
48
|
+
@boletoTransactionCollection = Array.new;
|
49
|
+
@currencyIsoEnum = CreateOrderRequest.CurrencyIsoEnum[:BrazillianReal]
|
50
|
+
@requestKey = '00000000-0000-0000-0000-000000000000'
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
# Currency Enum
|
55
|
+
# @returns [Hash<Symbol, String>]
|
56
|
+
# @see @@CURRENCY_ISO
|
57
|
+
def self.CurrencyIsoEnum
|
58
|
+
@@CURRENCY_ISO
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
class CreditCardTransaction
|
3
|
+
|
4
|
+
# @return [Long] Transaction amount in cents
|
5
|
+
attr_accessor :amountInCents
|
6
|
+
|
7
|
+
# @return [String] Card brand. Use the static property <i>BrandEnum</i>.
|
8
|
+
# @see BrandEnum
|
9
|
+
attr_accessor :creditCardBrandEnum
|
10
|
+
|
11
|
+
# @return [String] Credit Card Number.
|
12
|
+
attr_accessor :creditCardNumber
|
13
|
+
|
14
|
+
# @return [String] Type of operation. Use the static property <i>OperationEnum</i>.
|
15
|
+
# @see OperationEnum
|
16
|
+
attr_accessor :creditCardOperationEnum
|
17
|
+
|
18
|
+
# @return [Integer] Credit card expiration month
|
19
|
+
attr_accessor :expirationMonth
|
20
|
+
|
21
|
+
# @return [Integer] Credit card expiration year
|
22
|
+
attr_accessor :expirationYear
|
23
|
+
|
24
|
+
# @return [Integer] Name in the credit card
|
25
|
+
attr_accessor :holderName
|
26
|
+
|
27
|
+
# @return [Integer] Transaction installments count.
|
28
|
+
attr_accessor :installmentCount
|
29
|
+
|
30
|
+
# @return [Integer] Card security code.
|
31
|
+
attr_accessor :securityCode
|
32
|
+
|
33
|
+
# @return [Integer] Code to select the payment method. Can be <i>Cielo<i>, <i>Redecard<i> and others.
|
34
|
+
attr_accessor :paymentMethodCode
|
35
|
+
|
36
|
+
# @return [String] Custom transaction identifier.
|
37
|
+
attr_accessor :transactionReference
|
38
|
+
|
39
|
+
# Fill this property when creating a recurrency transaction.
|
40
|
+
# @return [Recurrency] Transaction recurrency information.
|
41
|
+
attr_accessor :recurrency
|
42
|
+
|
43
|
+
# Allowed card brands
|
44
|
+
# @returns [Hash<Symbol, String>]
|
45
|
+
@@CARD_BRAND = {
|
46
|
+
:Visa => 'Visa',
|
47
|
+
:Mastercard => 'Mastercard',
|
48
|
+
:AmericanExpress => 'Amex',
|
49
|
+
:Hipercard => 'Hipercard',
|
50
|
+
:Diners => 'Diners',
|
51
|
+
:Elo => 'Elo',
|
52
|
+
:Aura => 'Aura',
|
53
|
+
:Discover => 'Discover'
|
54
|
+
}
|
55
|
+
|
56
|
+
# Types of operation.
|
57
|
+
# @returns [Hash<Symbol, String>]
|
58
|
+
@@OPERATION = {
|
59
|
+
:AuthOnly => 'AuthOnly',
|
60
|
+
:AuthAndCapture => 'AuthAndCapture',
|
61
|
+
:AuthAndCaptureWithDelay => 'AuthAndCaptureWithDelay'
|
62
|
+
}
|
63
|
+
|
64
|
+
# Allowed card brands
|
65
|
+
# @returns [Hash<Symbol, String>]
|
66
|
+
# @see @@CARD_BRAND
|
67
|
+
def self.BrandEnum
|
68
|
+
@@CARD_BRAND
|
69
|
+
end
|
70
|
+
|
71
|
+
# Allowed operations.
|
72
|
+
# @returns [Hash<Symbol, String>]
|
73
|
+
# @see @@OPERATION
|
74
|
+
def self.OperationEnum
|
75
|
+
@@OPERATION
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
class ManageOrderRequest
|
3
|
+
|
4
|
+
# @return [Array] Credit card transaction collection
|
5
|
+
attr_accessor :transactionCollection
|
6
|
+
|
7
|
+
# @return [String] Operation enum
|
8
|
+
attr_accessor :manageOrderOperationEnum
|
9
|
+
|
10
|
+
# @return [Guid] MundiPagg merchant identification
|
11
|
+
attr_accessor :merchantKey
|
12
|
+
|
13
|
+
# @return [Guid] Unique order identification. Generated by MundiPagg.
|
14
|
+
attr_accessor :orderKey
|
15
|
+
|
16
|
+
# @return [String] Order identification.
|
17
|
+
attr_accessor :orderReference
|
18
|
+
|
19
|
+
# If not send, it will be generate automatically in the webservice and returned in response.
|
20
|
+
# Web service request identification, it is used for investigate problems with webservice requests.
|
21
|
+
# @return [Guid] Globally Unique Identifier.
|
22
|
+
# @param Optional
|
23
|
+
# @param Default: 00000000-0000-0000-0000-000000000000
|
24
|
+
attr_accessor :requestKey
|
25
|
+
|
26
|
+
# Initialize class and properties
|
27
|
+
def initialize
|
28
|
+
@transactionCollection = Array.new
|
29
|
+
@requestKey = '00000000-0000-0000-0000-000000000000'
|
30
|
+
end
|
31
|
+
|
32
|
+
# Operations allowed
|
33
|
+
@@Operation = {
|
34
|
+
:Capture => 'Capture',
|
35
|
+
:Void => 'Void'
|
36
|
+
}
|
37
|
+
|
38
|
+
# Hash collection with operations allowed
|
39
|
+
def self.OperationEnum
|
40
|
+
@@Operation
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class ManageTransactionRequest
|
45
|
+
# @return [Long] Order amount in cents.
|
46
|
+
attr_accessor :amountInCents
|
47
|
+
# @return [Guid] Unique transacion identifier generated by MundiPagg.
|
48
|
+
attr_accessor :transactionKey
|
49
|
+
# @return [String] Custom transaction identifier.
|
50
|
+
attr_accessor :transactionReference
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
class QueryOrderRequest
|
3
|
+
|
4
|
+
# @return [Guid] MundiPagg merchant identification
|
5
|
+
attr_accessor :merchantKey
|
6
|
+
|
7
|
+
# @return [Guid] Unique order identification. Generated by MundiPagg.
|
8
|
+
attr_accessor :orderKey
|
9
|
+
|
10
|
+
# @return [Guid] Custom order identification.
|
11
|
+
attr_accessor :orderReference
|
12
|
+
|
13
|
+
# If not send, it will be generate automatically in the webservice and returned in response.
|
14
|
+
# Web service request identification, it is used for investigate problems with webservice requests.
|
15
|
+
# @return [Guid] Globally Unique Identifier.
|
16
|
+
# @param Optional
|
17
|
+
# @param Default: 00000000-0000-0000-0000-000000000000
|
18
|
+
attr_accessor :requestKey
|
19
|
+
|
20
|
+
# Initialize class and properties
|
21
|
+
def initialize()
|
22
|
+
@requestKey = '00000000-0000-0000-0000-000000000000'
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
# Class that hold recurrency transaction information
|
3
|
+
class Recurrency
|
4
|
+
|
5
|
+
# @return [Date] Date the first recurrency will be charged.
|
6
|
+
attr_accessor :dateToStartBilling
|
7
|
+
|
8
|
+
# @return [String] Indicating the recurrency frequency.
|
9
|
+
# @see FrequencyEnum
|
10
|
+
attr_accessor :frequencyEnum
|
11
|
+
|
12
|
+
# @return [Integer] Recurrency interval.
|
13
|
+
attr_accessor :interval
|
14
|
+
|
15
|
+
# @return [Boolean] Indicates whether the One webservice will run an OneDollarAuth
|
16
|
+
# to validate the credit card.
|
17
|
+
attr_accessor :oneDollarAuth
|
18
|
+
|
19
|
+
# @return [Integer] Number of recurrencies.
|
20
|
+
attr_accessor :recurrences
|
21
|
+
|
22
|
+
# Allowed recurrency frequency
|
23
|
+
@@FREQUENCY = {
|
24
|
+
:Monthly => 'Monthly',
|
25
|
+
:Yearly => 'Yearly',
|
26
|
+
:Daily => 'Daily'
|
27
|
+
}
|
28
|
+
|
29
|
+
# Initialize class and properties
|
30
|
+
def initialize
|
31
|
+
end
|
32
|
+
|
33
|
+
# Allowed recurrency frequency
|
34
|
+
def self.FrequencyEnum
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,309 @@
|
|
1
|
+
module Mundipagg
|
2
|
+
# Class that handles all webservice calls
|
3
|
+
class Gateway
|
4
|
+
|
5
|
+
# @return [Nori] Nori class who handle the conversion of base XML to a hash collection
|
6
|
+
# @see https://github.com/savonrb/nori
|
7
|
+
attr_reader :parser
|
8
|
+
|
9
|
+
# <i>:test</i> = Simulator enviroment, fake transaction approval;
|
10
|
+
# <i>:production</i> = Real transaction, needs real credit card.
|
11
|
+
# @return [Symbol] Webservice environment.
|
12
|
+
attr_accessor :environment
|
13
|
+
|
14
|
+
# @return [String] URL that points to the simulator WSDL
|
15
|
+
@@WEBSERVICE_TEST_URL = 'http://simulator.mundipaggone.com/One/MundiPaggService.svc?wsdl'
|
16
|
+
|
17
|
+
# @return [String] URL that points to the production WSDL
|
18
|
+
@@WEBSERVICE_PRODUCTION_URL = ''
|
19
|
+
|
20
|
+
# Initialize a class with an environment
|
21
|
+
#
|
22
|
+
# @param environment [Symbol] Sets the MundiPagg environment will be used by the client.
|
23
|
+
def initialize(environment=:test)
|
24
|
+
@parser = Nori.new(:convert_tags_to => lambda { |tag| tag })
|
25
|
+
@environment = environment
|
26
|
+
end
|
27
|
+
|
28
|
+
# This method makes requests to the webservice method ManageOrder.
|
29
|
+
#
|
30
|
+
# @param request [CreateOrderRequest] A ManagerOrderRequest instance containing information to capture or void a transaction or order.
|
31
|
+
# @return [Hash<Symbol, Object>] A hash collection containing the response data
|
32
|
+
def ManageOrder(request)
|
33
|
+
|
34
|
+
hash = @parser.parse('<tns:manageOrderRequest>
|
35
|
+
<mun:ManageCreditCardTransactionCollection>
|
36
|
+
</mun:ManageCreditCardTransactionCollection>
|
37
|
+
<mun:ManageOrderOperationEnum>?</mun:ManageOrderOperationEnum>
|
38
|
+
<mun:MerchantKey>?</mun:MerchantKey>
|
39
|
+
<mun:OrderKey>?</mun:OrderKey>
|
40
|
+
<mun:OrderReference>?</mun:OrderReference>
|
41
|
+
<mun:RequestKey>?</mun:RequestKey>
|
42
|
+
</tns:manageOrderRequest>')
|
43
|
+
|
44
|
+
xml_hash = hash['tns:manageOrderRequest'];
|
45
|
+
|
46
|
+
xml_hash['mun:ManageCreditCardTransactionCollection'] = {'mun:ManageCreditCardTransactionRequest'=>Array.new}
|
47
|
+
|
48
|
+
if request.transactionCollection.nil? == false and request.transactionCollection.count > 0
|
49
|
+
|
50
|
+
request.transactionCollection.each do |transaction|
|
51
|
+
|
52
|
+
xml_hash['mun:ManageCreditCardTransactionCollection']['mun:ManageCreditCardTransactionRequest'] << {
|
53
|
+
'mun:AmountInCents' => transaction.amountInCents,
|
54
|
+
'mun:TransactionKey' => transaction.transactionKey,
|
55
|
+
'mun:TransactionReference' => transaction.transactionReference
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
xml_hash['mun:ManageOrderOperationEnum'] = request.manageOrderOperationEnum
|
61
|
+
xml_hash['mun:MerchantKey'] = request.merchantKey
|
62
|
+
xml_hash['mun:OrderKey'] = request.orderKey
|
63
|
+
xml_hash['mun:OrderReference'] = request.orderReference
|
64
|
+
xml_hash['mun:RequestKey'] = request.requestKey
|
65
|
+
|
66
|
+
response = SendToService(hash, :manage_order)
|
67
|
+
|
68
|
+
return response
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
# This method makes requests to the webservice method QueryOrder.
|
73
|
+
#
|
74
|
+
# @param request [QueryOrderRequest] A QueryOrderRequest instance containing information to request more information about an order or transaction.
|
75
|
+
# @return [Hash<Symbol, Object>]
|
76
|
+
def QueryOrder(request)
|
77
|
+
|
78
|
+
hash = @parser.parse('<tns:queryOrderRequest>
|
79
|
+
<mun:MerchantKey>?</mun:MerchantKey>
|
80
|
+
<mun:OrderKey>?</mun:OrderKey>
|
81
|
+
<mun:OrderReference>?</mun:OrderReference>
|
82
|
+
<mun:RequestKey>?</mun:RequestKey>
|
83
|
+
</tns:queryOrderRequest>')
|
84
|
+
|
85
|
+
xml_hash = hash['tns:queryOrderRequest'];
|
86
|
+
|
87
|
+
xml_hash['mun:MerchantKey'] = request.merchantKey
|
88
|
+
xml_hash['mun:OrderKey'] = request.orderKey
|
89
|
+
xml_hash['mun:OrderReference'] = request.orderReference
|
90
|
+
xml_hash['mun:RequestKey'] = request.requestKey
|
91
|
+
|
92
|
+
response = SendToService(hash, :query_order)
|
93
|
+
|
94
|
+
return response
|
95
|
+
end
|
96
|
+
|
97
|
+
# This method makes requests to the webservice method CreateOrder.
|
98
|
+
#
|
99
|
+
# @param request [CreateOrderRequest] A CreateOrderRequest instance containing information to create a order.
|
100
|
+
# @return [Hash<Symbol, Object>] A hash collection containing the response data
|
101
|
+
def CreateOrder(request)
|
102
|
+
|
103
|
+
hash = @parser.parse('
|
104
|
+
<tns:createOrderRequest>
|
105
|
+
<mun:AmountInCents>?</mun:AmountInCents>
|
106
|
+
<mun:AmountInCentsToConsiderPaid>?</mun:AmountInCentsToConsiderPaid>
|
107
|
+
<mun:CurrencyIsoEnum>?</mun:CurrencyIsoEnum>
|
108
|
+
<mun:MerchantKey>?</mun:MerchantKey>
|
109
|
+
<mun:OrderReference>?</mun:OrderReference>
|
110
|
+
<mun:RequestKey>?</mun:RequestKey>
|
111
|
+
<mun:Buyer>
|
112
|
+
</mun:Buyer>
|
113
|
+
<mun:CreditCardTransactionCollection>
|
114
|
+
</mun:CreditCardTransactionCollection>
|
115
|
+
<mun:BoletoTransactionCollection>
|
116
|
+
</mun:BoletoTransactionCollection>
|
117
|
+
</tns:createOrderRequest>')
|
118
|
+
|
119
|
+
xml_hash = hash['tns:createOrderRequest'];
|
120
|
+
|
121
|
+
xml_hash['mun:AmountInCents'] = request.amountInCents
|
122
|
+
xml_hash['mun:AmountInCentsToConsiderPaid'] = request.amountInCentsToConsiderPaid
|
123
|
+
xml_hash['mun:CurrencyIsoEnum'] = request.currencyIsoEnum
|
124
|
+
xml_hash['mun:MerchantKey'] = request.merchantKey
|
125
|
+
xml_hash['mun:OrderReference'] = request.orderReference
|
126
|
+
xml_hash['mun:RequestKey'] = request.requestKey
|
127
|
+
|
128
|
+
if request.buyer.nil? == false
|
129
|
+
xml_hash['mun:Buyer'] = CreateBuyer(request)
|
130
|
+
end
|
131
|
+
|
132
|
+
if not request.creditCardTransactionCollection.nil? and request.creditCardTransactionCollection.count > 0
|
133
|
+
#Create credit card transaction array and assing to the contract hash
|
134
|
+
creditCardTransactionCollection = CreateCreditCardTransaction(request)
|
135
|
+
xml_hash['mun:CreditCardTransactionCollection'] = creditCardTransactionCollection
|
136
|
+
else
|
137
|
+
xml_hash['mun:CreditCardTransactionCollection'] = nil
|
138
|
+
end
|
139
|
+
|
140
|
+
if request.boletoTransactionCollection.nil? == false and request.boletoTransactionCollection.count > 0
|
141
|
+
#Create boleto transaction array and assing to the contract hash
|
142
|
+
boletoTransactionCollection = CreateBoletoTransactionRequest(request);
|
143
|
+
xml_hash['mun:BoletoTransactionCollection'] = boletoTransactionCollection
|
144
|
+
end
|
145
|
+
|
146
|
+
response = SendToService(hash, :create_order)
|
147
|
+
|
148
|
+
|
149
|
+
return response
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
# This method create a hash collection with all buyer information.
|
155
|
+
# The hash collection is a part of the data send to the webservice.
|
156
|
+
#
|
157
|
+
# @param request [CreateOrderRequest]
|
158
|
+
# @return [Hash<Symbol, Object>] Hash collection with buyer information.
|
159
|
+
# @!visibility private
|
160
|
+
def CreateBuyer(request)
|
161
|
+
|
162
|
+
buyer = {
|
163
|
+
'mun:BuyerKey' => request.buyer.buyerKey,
|
164
|
+
'mun:BuyerReference' => request.buyer.buyerReference,
|
165
|
+
'mun:Email' => request.buyer.email,
|
166
|
+
'mun:GenderEnum' => request.buyer.genderEnum,
|
167
|
+
'mun:FacebookId' => request.buyer.facebookId,
|
168
|
+
'mun:GenderEnum' => request.buyer.genderEnum,
|
169
|
+
'mun:HomePhone' => request.buyer.homePhone,
|
170
|
+
'mun:IpAddress' => request.buyer.ipAddress,
|
171
|
+
'mun:MobilePhone' => request.buyer.mobilePhone,
|
172
|
+
'mun:Name' => request.buyer.name,
|
173
|
+
'mun:PersonTypeEnum' => request.buyer.personTypeEnum,
|
174
|
+
'mun:TaxDocumentNumber' => request.buyer.taxDocumentNumber,
|
175
|
+
'mun:TaxDocumentNumberTypeEnum' => request.buyer.taxDocumentTypeEnum,
|
176
|
+
'mun:TwitterId' => request.buyer.twitterId,
|
177
|
+
'mun:WorkPhone' => request.buyer.workPhone,
|
178
|
+
'mun:BuyerAddressCollection' => nil
|
179
|
+
|
180
|
+
}
|
181
|
+
|
182
|
+
if request.buyer.addressCollection.count > 0
|
183
|
+
|
184
|
+
buyer['mun:BuyerAddressCollection'] = {'mun:BuyerAddress'=>Array.new}
|
185
|
+
|
186
|
+
request.buyer.addressCollection.each do |address|
|
187
|
+
|
188
|
+
buyer['mun:BuyerAddressCollection']['mun:BuyerAddress'] << {
|
189
|
+
'mun:AddressTypeEnum' => address.addressTypeEnum,
|
190
|
+
'mun:City' => address.city,
|
191
|
+
'mun:Complement' => address.complement,
|
192
|
+
'mun:CountryEnum' => address.countryEnum,
|
193
|
+
'mun:District' => address.district,
|
194
|
+
'mun:Number' => address.number,
|
195
|
+
'mun:State' => address.state,
|
196
|
+
'mun:Street' => address.street,
|
197
|
+
'mun:ZipCode' => address.zipCode
|
198
|
+
}
|
199
|
+
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
return buyer
|
204
|
+
end
|
205
|
+
|
206
|
+
# This method create a hash collection with all boleto transactions information.
|
207
|
+
# The hash collection is a part of the data send to the webservice.
|
208
|
+
#
|
209
|
+
# @param boletoRequest [Array<BoletoTransaction>] CreateOrderRequest instance
|
210
|
+
# @return [Hash<Symbol, Object>] Hash collection with one or more boleto transactions.
|
211
|
+
# @!visibility private
|
212
|
+
def CreateBoletoTransactionRequest(boletoRequest)
|
213
|
+
|
214
|
+
transactionCollection = {'mun:BoletoTransaction' => Array.new}
|
215
|
+
|
216
|
+
boletoRequest.boletoTransactionCollection.each do |boleto|
|
217
|
+
|
218
|
+
transactionCollection['mun:BoletoTransaction'] << {
|
219
|
+
'mun:AmountInCents' => boleto.amountInCents,
|
220
|
+
'mun:BankNumber' => boleto.bankNumber,
|
221
|
+
'mun:DaysToAddInBoletoExpirationDate' => boleto.daysToAddInBoletoExpirationDate,
|
222
|
+
'mun:Instructions' => boleto.instructions,
|
223
|
+
'mun:NossoNumero' => boleto.nossoNumero,
|
224
|
+
'mun:TransactionReference' => boleto.transactionReference,
|
225
|
+
|
226
|
+
}
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
return transactionCollection
|
231
|
+
end
|
232
|
+
|
233
|
+
# This method create a hash collection with all credit card transactions information.
|
234
|
+
# The hash collection is a part of the data send to the webservice.
|
235
|
+
#
|
236
|
+
# @param creditCardRequest [Array<CreditCardTransaction>] CreateOrderRequest instance
|
237
|
+
# @return [Hash<Symbol, Object>] Hash collection with one or more credit card transactions.
|
238
|
+
# @!visibility private
|
239
|
+
def CreateCreditCardTransaction(creditCardRequest)
|
240
|
+
|
241
|
+
transactionCollection = {'mun:CreditCardTransaction' => Array.new}
|
242
|
+
|
243
|
+
creditCardRequest.creditCardTransactionCollection.each do |transaction|
|
244
|
+
|
245
|
+
transaction_hash = {
|
246
|
+
'mun:AmountInCents' => transaction.amountInCents,
|
247
|
+
'mun:CreditCardBrandEnum' => transaction.creditCardBrandEnum.to_s,
|
248
|
+
'mun:CreditCardNumber' => transaction.creditCardNumber,
|
249
|
+
'mun:CreditCardOperationEnum' => transaction.creditCardOperationEnum.to_s,
|
250
|
+
'mun:ExpMonth' => transaction.expirationMonth,
|
251
|
+
'mun:ExpYear' => transaction.expirationYear,
|
252
|
+
'mun:HolderName' => transaction.holderName,
|
253
|
+
'mun:InstallmentCount' => transaction.installmentCount,
|
254
|
+
'mun:PaymentMethodCode' => transaction.paymentMethodCode,
|
255
|
+
'mun:SecurityCode' => transaction.securityCode,
|
256
|
+
'mun:TransactionReference' => transaction.transactionReference
|
257
|
+
}
|
258
|
+
|
259
|
+
if transaction.recurrency.nil? == false
|
260
|
+
|
261
|
+
transaction_hash['mun:Recurrency'] = {
|
262
|
+
'mun:DateToStartBilling' => transaction.recurrency.dateToStartBilling,
|
263
|
+
'mun:FrequencyEnum' => transaction.recurrency.frequencyEnum,
|
264
|
+
'mun:Interval' => transaction.recurrency.interval,
|
265
|
+
'mun:OneDollarAuth' => transaction.recurrency.oneDollarAuth,
|
266
|
+
'mun:Recurrences' => transaction.recurrency.recurrences
|
267
|
+
}
|
268
|
+
end
|
269
|
+
|
270
|
+
transactionCollection['mun:CreditCardTransaction'] << transaction_hash
|
271
|
+
end
|
272
|
+
|
273
|
+
return transactionCollection
|
274
|
+
end
|
275
|
+
|
276
|
+
|
277
|
+
# This method send the hash collectin created in this client and send it to the webservice.
|
278
|
+
#
|
279
|
+
# == Parameters:
|
280
|
+
# @param hash [Hash<Symbol, Object] Hash collection generated by Nori using the base SOAP XML.
|
281
|
+
# @param service_method [Symbol] A Symbol declaring the method that will be called. Can be <i>:create_order</i>, <i>:manage_order<i/> or <i>:query_order</i>.
|
282
|
+
# @return [Hash<Symbol, Object>] A hash collection with the service method response.
|
283
|
+
# @!visibility private
|
284
|
+
def SendToService(hash, service_method)
|
285
|
+
|
286
|
+
url = nil
|
287
|
+
|
288
|
+
if @environment == :production
|
289
|
+
url = @@WEBSERVICE_PRODUCTION_URL
|
290
|
+
else
|
291
|
+
url = @@WEBSERVICE_TEST_URL
|
292
|
+
end
|
293
|
+
|
294
|
+
client = Savon.client do
|
295
|
+
wsdl url
|
296
|
+
log_level :error
|
297
|
+
namespaces 'xmlns:mun' => 'http://schemas.datacontract.org/2004/07/MundiPagg.One.Service.DataContracts'
|
298
|
+
end
|
299
|
+
|
300
|
+
response = client.call(service_method) do
|
301
|
+
message hash
|
302
|
+
end
|
303
|
+
|
304
|
+
return response.to_hash
|
305
|
+
end
|
306
|
+
|
307
|
+
private :CreateBoletoTransactionRequest, :CreateCreditCardTransaction, :CreateBuyer, :SendToService
|
308
|
+
end
|
309
|
+
end
|
data/mundipagg.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "mundipagg/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "mundipagg"
|
6
|
+
s.summary = "MundiPagg Ruby Client Library"
|
7
|
+
s.description = "Ruby library for integrating with the MundiPagg payment web services"
|
8
|
+
s.version = Mundipagg::Version::String
|
9
|
+
s.author = "MundiPagg"
|
10
|
+
s.email = "github@mundipagg.com"
|
11
|
+
s.homepage = "http://www.mundipagg.com/"
|
12
|
+
s.files = Dir.glob ["README.md", "LICENSE", "lib/**/*.{rb}", "tests/**/*", "*.gemspec"]
|
13
|
+
s.add_dependency "savon", "2.3.0"
|
14
|
+
s.required_ruby_version = '>= 1.9.2'
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Boleto transaction
|
2
|
+
I want to create a order with one boleto transaction.
|
3
|
+
|
4
|
+
Scenario: Send a Boleto Transaction to One
|
5
|
+
Given I have purchase two products with a total cost of BRL 50.00
|
6
|
+
And I will pay using Boleto with 15 days to expire
|
7
|
+
And I will send to Mundipagg
|
8
|
+
Then The order amount in cents should be 5000
|
9
|
+
And The boleto status should be Generated
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Credit Card Transaction
|
2
|
+
I want to create a order with one credit card transaction.
|
3
|
+
|
4
|
+
Scenario: Pay a order using credit card and installment
|
5
|
+
Given I have purchase three products with a total cost of BRL 250
|
6
|
+
And I will pay using a Visa credit card in 3 installments
|
7
|
+
And I will send to Mundipagg
|
8
|
+
Then the order amount in cents should be 25000
|
9
|
+
And the transaction status should be Captured
|
10
|
+
|
11
|
+
Scenario: Pay a order using credit card without installment
|
12
|
+
Given I have purchase three products with a total cost of BRL 100,29
|
13
|
+
And I will pay using a Visa credit card without installment
|
14
|
+
And I will send to Mundipagg
|
15
|
+
Then the order amount in cents should be 10029
|
16
|
+
And the transaction status should be Captured
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; end
|
3
|
+
$:.unshift(File.dirname(__FILE__) + '/../../../lib')
|
4
|
+
require 'bigdecimal'
|
5
|
+
require 'mundipagg'
|
6
|
+
|
7
|
+
Before do
|
8
|
+
@client = Mundipagg::Gateway.new :test
|
9
|
+
@order = Mundipagg::CreateOrderRequest.new
|
10
|
+
@boleto = Mundipagg::BoletoTransaction.new
|
11
|
+
@response = Hash.new
|
12
|
+
@order.merchantKey = '73611285-C8F7-45A4-8F50-579182627242'
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
Given(/^I have purchase two products with a total cost of (\w+) (\d+)\.(\d+)$/) do |currency,amount,cents|
|
17
|
+
amount = amount+'.'+cents
|
18
|
+
amount = BigDecimal.new(amount.gsub(',', '.'))
|
19
|
+
@order.amountInCents = (amount * 100).to_i
|
20
|
+
@order.amountInCentsToConsiderPaid = (amount * 100).to_i
|
21
|
+
@order.currencyIsoEnum = 'BRL'
|
22
|
+
end
|
23
|
+
|
24
|
+
Given(/^I will pay using (\w+) with (\d+) days to expire$/) do |type,daysToExpire|
|
25
|
+
if type.downcase == 'boleto'
|
26
|
+
|
27
|
+
@boleto.amountInCents = @order.amountInCents
|
28
|
+
@boleto.bankNumber = 1
|
29
|
+
@boleto.nossoNumero = 989790
|
30
|
+
@boleto.transactionReference = rand(389546232)
|
31
|
+
@boleto.daysToAddInBoletoExpirationDate = daysToExpire
|
32
|
+
@boleto.instructions = 'Não receber após o vencimento'
|
33
|
+
|
34
|
+
@order.boletoTransactionCollection << @boleto
|
35
|
+
@order.creditCardTransactionCollection = nil
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
Given(/^I send to Mundipagg$/) do
|
41
|
+
@response = @client.CreateOrder(@order)
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
Then(/^The order amount in cents should be (\d+)$/) do |amountInCents|
|
46
|
+
transaction = @response[:create_order_response][:create_order_result][:boleto_transaction_result_collection][:boleto_transaction_result]
|
47
|
+
transaction[:amount_in_cents].to_s.should == amountInCents
|
48
|
+
end
|
49
|
+
|
50
|
+
Then(/^The boleto status should be (\w+)$/) do |status|
|
51
|
+
transaction = @response[:create_order_response][:create_order_result][:boleto_transaction_result_collection][:boleto_transaction_result]
|
52
|
+
transaction[:boleto_transaction_status_enum].to_s == status
|
53
|
+
end
|
54
|
+
|
@@ -0,0 +1,76 @@
|
|
1
|
+
begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; end
|
2
|
+
$:.unshift(File.dirname(__FILE__) + '/../../../lib')
|
3
|
+
require 'bigdecimal'
|
4
|
+
require 'mundipagg'
|
5
|
+
|
6
|
+
#Scenario 1:
|
7
|
+
Before do
|
8
|
+
@client = Mundipagg::Gateway.new :test
|
9
|
+
@order = Mundipagg::CreateOrderRequest.new
|
10
|
+
@order.merchantKey = '73611285-C8F7-45A4-8F50-579182627242'
|
11
|
+
@transaction = Mundipagg::CreditCardTransaction.new
|
12
|
+
@order.creditCardTransactionCollection << @transaction
|
13
|
+
@response = Hash.new
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
Given(/^I have purchase three products with a total cost of (\w+) (\d+)$/) do |currency,amount|
|
18
|
+
amount = BigDecimal.new(amount.gsub(',', '.'))
|
19
|
+
@order.amountInCents = (amount * 100).to_i
|
20
|
+
@order.amountInCentsToConsiderPaid = (amount * 100).to_i
|
21
|
+
@order.currencyIsoEnum = 'BRL'
|
22
|
+
end
|
23
|
+
|
24
|
+
Given(/^I will pay using a (\w+) credit card in (\d+) installments$/) do |brand,installments|
|
25
|
+
@transaction.creditCardBrandEnum = brand
|
26
|
+
@transaction.installmentCount = installments
|
27
|
+
@transaction.paymentMethodCode = 1
|
28
|
+
@transaction.amountInCents = @order.amountInCents
|
29
|
+
@transaction.holderName = 'Ruby Unit Test'
|
30
|
+
@transaction.creditCardNumber = '41111111111111111'
|
31
|
+
@transaction.securityCode = '123'
|
32
|
+
@transaction.expirationMonth = 5
|
33
|
+
@transaction.expirationYear = 2018
|
34
|
+
@transaction.creditCardOperationEnum = Mundipagg::CreditCardTransaction.OperationEnum[:AuthAndCapture]
|
35
|
+
end
|
36
|
+
|
37
|
+
Given(/^I will send to Mundipagg$/) do
|
38
|
+
@response = @client.CreateOrder(@order)
|
39
|
+
end
|
40
|
+
|
41
|
+
Then(/^the order amount in cents should be (\d+)$/) do |amountInCents|
|
42
|
+
transaction = @response[:create_order_response][:create_order_result][:credit_card_transaction_result_collection][:credit_card_transaction_result]
|
43
|
+
transaction[:amount_in_cents].to_s.should == amountInCents
|
44
|
+
end
|
45
|
+
|
46
|
+
Then(/^the transaction status should be (\w+)$/) do |status|
|
47
|
+
transaction = @response[:create_order_response][:create_order_result][:credit_card_transaction_result_collection][:credit_card_transaction_result]
|
48
|
+
transaction[:credit_card_transaction_status_enum].to_s.downcase.should == status.downcase
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
#Scenario 2:
|
53
|
+
|
54
|
+
Given(/^I have purchase three products with a total cost of (\w+) (\d+),(\d+)$/) do |currency, amount, cents|
|
55
|
+
amount = amount+'.'+cents
|
56
|
+
amount = BigDecimal.new(amount.gsub(',', '.'))
|
57
|
+
@order.amountInCents = (amount * 100).to_i
|
58
|
+
@order.amountInCentsToConsiderPaid = (amount * 100).to_i
|
59
|
+
@order.currencyIsoEnum = currency
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
Given(/^I will pay using a (\w+) credit card without installment$/) do |brand|
|
64
|
+
@transaction.creditCardBrandEnum = brand
|
65
|
+
@transaction.installmentCount = 1
|
66
|
+
@transaction.paymentMethodCode = 1
|
67
|
+
@transaction.amountInCents = @order.amountInCents
|
68
|
+
@transaction.holderName = 'Ruby Unit Test'
|
69
|
+
@transaction.creditCardNumber = '41111111111111111'
|
70
|
+
@transaction.securityCode = '123'
|
71
|
+
@transaction.expirationMonth = 5
|
72
|
+
@transaction.expirationYear = 2018
|
73
|
+
@transaction.creditCardOperationEnum = Mundipagg::CreditCardTransaction.OperationEnum[:AuthAndCapture]
|
74
|
+
|
75
|
+
end
|
76
|
+
|
File without changes
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mundipagg
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- MundiPagg
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: savon
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.3.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.3.0
|
27
|
+
description: Ruby library for integrating with the MundiPagg payment web services
|
28
|
+
email: github@mundipagg.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- README.md
|
34
|
+
- LICENSE
|
35
|
+
- lib/mundipagg/BoletoTransaction.rb
|
36
|
+
- lib/mundipagg/Buyer.rb
|
37
|
+
- lib/mundipagg/BuyerAddress.rb
|
38
|
+
- lib/mundipagg/CreateOrderRequest.rb
|
39
|
+
- lib/mundipagg/CreditCardTransaction.rb
|
40
|
+
- lib/mundipagg/gateway.rb
|
41
|
+
- lib/mundipagg/ManageOrderRequest.rb
|
42
|
+
- lib/mundipagg/QueryOrderRequest.rb
|
43
|
+
- lib/mundipagg/Recurrency.rb
|
44
|
+
- lib/mundipagg/version.rb
|
45
|
+
- lib/mundipagg.rb
|
46
|
+
- tests/features/boleto.feature
|
47
|
+
- tests/features/credit_card.feature
|
48
|
+
- tests/features/step_definitions/boleto_steps.rb
|
49
|
+
- tests/features/step_definitions/credit_card_steps.rb
|
50
|
+
- tests/features/support/env.rb
|
51
|
+
- mundipagg.gemspec
|
52
|
+
homepage: http://www.mundipagg.com/
|
53
|
+
licenses: []
|
54
|
+
metadata: {}
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 1.9.2
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 2.0.6
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
74
|
+
summary: MundiPagg Ruby Client Library
|
75
|
+
test_files: []
|
76
|
+
has_rdoc:
|