paydunya 1.0.1 → 1.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e8260dc002aaba6ab50d66c3495d96b9fcd45f4
4
- data.tar.gz: f52bd608968f23321e50cb9f1c26c22f8907abc2
3
+ metadata.gz: ce384f8e5089e5f7a94e82a79f795e841c414773
4
+ data.tar.gz: a767db469a8a66755400c48a6c1ad4122ee3481d
5
5
  SHA512:
6
- metadata.gz: cf3251e219a95fa0e01d28b6e73a68ede6965065a200241bb3ff7c655aab20acbcb332e3d078c1327fc3ff8987079630b0c1b53fd034b6f046c1ecfcc70f6142
7
- data.tar.gz: 9655e57b17fb96283e62cc88c785ca2c62674d71173b02128da262804dac2c9f9ed9f6fa63ca52fda5216d709bc1d643192c8b61ce3cd4f2ae84ed3019d674a0
6
+ metadata.gz: 7268f15c9bfa4ae2e911999c0d4b76425a64f333ea37bb8bb193a2d7a2f605b5b728ab365464a96fa3dd413354b5c22f60713eedb2987b92c552ab5d9785a2ed
7
+ data.tar.gz: 128fa6a27e9e533cb3573f80652aeb173a3c2488919d8cfcdd5b5d98f08777e8538f0d462198e5ef64e4bdcd3c5c9364e199242760763f38054ec07d40b89fd5
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ *.DS_Store
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ api_test.rb
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - 1.9.2
6
+ - 1.8.7
7
+ - ree
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in paydunya_ruby.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 PAYDUNYA
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,174 @@
1
+ PAYDUNYA - Client Ruby API
2
+ ============================
3
+ PAYDUNYA Client Ruby
4
+
5
+ ## Documentation Officielle
6
+ https://paydunya.com/developers/ruby
7
+
8
+ ## Installation
9
+
10
+ Ajouter cette ligne au fichier Gemfile de votre application:
11
+
12
+ gem 'paydunya'
13
+
14
+ Et exécuter ensuite la commande:
15
+
16
+ $ bundle
17
+
18
+ Ou installer le directement en tapant:
19
+
20
+ $ gem install paydunya
21
+
22
+ ## Utilisation
23
+
24
+ ## Configuration de vos clés d'API
25
+
26
+ Si vous utilisez Ruby on Rails vous pouvez créer un fichier au niveau de `RAILS_ROOT/config/initializers` et y insérer les paramètres suivants:
27
+
28
+ Paydunya::Setup.master_key = "VOTRE_CLE_PRINCIPALE"
29
+ Paydunya::Setup.public_key = "VOTRE_CLE_PUBLIQUE"
30
+ Paydunya::Setup.private_key = "VOTRE_CLE_PRIVEE"
31
+ Paydunya::Setup.mode = "test|live"
32
+ Paydunya::Setup.token = "VOTRE_TOKEN"
33
+
34
+ ## Configuration des informations de votre service/activité/entreprise
35
+ Configurer ensuite les informations de votre service/activité/entreprise comme illustré ci-dessous.
36
+ La plupart des paramètres sont optionels mais il serait tout de meme intéressant de configurer le nom de l'entreprise et le slogan.
37
+
38
+ Paydunya::Checkout::Store.name = "NOM_DE_VOTRE_ENTREPRISE"
39
+ Paydunya::Checkout::Store.tagline = "SLOGAN_DE_VOTRE_ENTREPRISE"
40
+ Paydunya::Checkout::Store.postal_address = "ADRESSE_DE_VOTRE_ENTREPRISE"
41
+ Paydunya::Checkout::Store.phone_number = "NUMERO_DE_TELEPHONE_DE_VOTRE_ENTREPRISE"
42
+ Paydunya::Checkout::Store.website_url = "URL_DU_SITE_WEB_DE_VOTRE_ENTREPRISE"
43
+ Paydunya::Checkout::Store.logo_url = "URL_DU_LOGO_DE_VOTRE_ENTREPRISE"
44
+
45
+ ## Configuration d'une URL de redirection après annulation de paiement
46
+
47
+ Vous pouvez optionnellement définir une URL à laquelle seront redirigés vos clients après une annulation de commande.
48
+
49
+ # Configuration globale de l'URL de redirection après annulation de paiement.
50
+ Paydunya::Checkout::Store.cancel_url = "URL_DE_REDIRECTION_APRES_ANNULATION"
51
+
52
+
53
+ ## Configuration d'une URL de redirection après confirmation de paiement
54
+
55
+ PAYDUNYA redirigera automatiquement le client à cette adresse URL après un paiement fructueux.
56
+ Cette configuration est facultative et il fortement recommandé de ne pas s'en servir, à moins que vous voulez personnaliser l'expérience de paiement de vos clients.
57
+ Si cette URL de redirection n'est pas définie, PAYDUNYA redirigera le client vers une page affichant son reçu électronique.
58
+
59
+ # Configuration globale de l'URL de redirection après confirmation de paiement.
60
+ Paydunya::Checkout::Store.return_url = "URL_DE_REDIRECTION_APRES_SUCCES"
61
+
62
+
63
+ ## Initialisation d'un Paiement Avec Redirection (PAR)
64
+
65
+ co = Paydunya::Checkout::Invoice.new
66
+
67
+ ## Initialisation d'un Paiement Sans Redirection (PSR)
68
+
69
+ co = Paydunya::Onsite::Invoice.new
70
+
71
+ Les paramètres attendus sont nom du produit, la quantité, le prix unitaire,
72
+ le prix total et une description optionelle. `addItem(nom_du_produit, quantité, prix_unitaire, prix_total, description_optionelle)`
73
+
74
+ co.add_item("Clavier DELL", 2, 3000, 6000)
75
+ co.add_item("Ordinateur Lenovo L440", 1, 400000, 400000, "Réduction de 10%")
76
+ co.add_item("Casque Logitech", 1, 8000, 8000)
77
+
78
+ ## Configuration du montant total de la facture! Important
79
+
80
+ PAYDUNYA s'attend à ce que vous préciser un montant total de facture. Ce sera ce montant qui sera facturé à votre client. Nous considérons que vous auriez déjà fait tous les calculs au niveau de votre serveur avant de fixer ce montant.
81
+
82
+ NOTE: PAYDUNYA n'effectuera pas de calculs au niveau de ses serveurs. Le montant total de la facture fixé à partir de votre serveur sera celui que PAYDUNYA utilisera pour facturer votre client.
83
+
84
+ co.total_amount = 6500
85
+
86
+ ## Ajouter une description de facture (Optionnel)
87
+
88
+ Vous pouvez de manière optionelle définir une description générale de facture
89
+ qui sera utilisée dans les cas où la facture n'a pas besoin d'une liste
90
+ des éléments ou dans les cas où vous avez besoin d'inclure des informations
91
+ supplémentaires à votre facture
92
+
93
+ co.description = "Description Optionnelle"
94
+
95
+
96
+ ## Ajout de taxes (Optionnel)
97
+
98
+ Vous pouvez représenter l'ajout d'informations de taxes au niveau de la page de paiement. Ces informations seront ensuite affichées sur la facture, le reçu électronique, le reçu imprimé et les téléchargements PDF.
99
+
100
+ co.add_tax('TVA (18%)', 5000);
101
+ co.add_tax('Autre taxe', 700);
102
+
103
+ ## Ajout de données supplémentaires que vous pourrez récupérer par la suite
104
+
105
+ Si vous avez besoin d'ajouter des données supplémentaires à vos informations de requête de paiement à des fins d'utilisation ultérieure, nous vous offrons la possibilité de sauvegarder des données personnalisées sur nos serveurs et de les récupérer une fois le paiement réussi.
106
+
107
+ NOTE: Les données personnalisées ne sont affichées nulle part sur la page de paiement, les factures/reçus, les téléchargements et impressions.
108
+
109
+ co.add_custom_data("Prénom", "Badara")
110
+ co.add_custom_data("Nom", "Alioune")
111
+ co.add_custom_data("CartId", 97628)
112
+ co.add_custom_data("Coupon","NOEL")
113
+
114
+ ## Redirection vers la page de paiement PAYDUNYA (Cas PAR)
115
+
116
+ Après avoir rajouté des articles à votre facture et configurer le montant total de la facture, vous pouvez rediriger votre client vers la page de paiement en appelant la méthode create depuis votre objet facture ($co). Veuillez s'il vous plaît noter que la méthode "$co->create()" retourne un booléen (true ou false) selon le fait que la facture ait été créée avec succès ou non. Cela vous permet de mettre une instruction if - else et gérer le résultat comme bon vous semble.
117
+
118
+ # Le code suivant décrit comment créer une facture de paiement au niveau de nos serveurs,
119
+ # rediriger ensuite le client vers la page de paiement
120
+ # et afficher ensuite son reçu de paiement en cas de succès.
121
+ if co.create
122
+ redirect_to co.invoice_url
123
+ else
124
+ @message = co.response_text
125
+ end
126
+
127
+ ## Paiement de facture Sans Redirection (PSR)
128
+
129
+ La première étape consiste à récupérer l'adresse email ou le numéro de téléphone du client PAYDUNYA.
130
+ Passer le ensuite en paramètre la méthode `create` d'une instance de la classe `Paydunya::Onsite::Invoice`.
131
+ PAYDUNYA vous renverra un token PSR. Le client PAYDUNYA recevra également un code de confirmation par e-mail et SMS (uniquement pour les transactions réelles).
132
+
133
+ if co.create("EMAIL_OU_NUMERO_DU_CLIENT_PAYDUNYA")
134
+ @opr_token = co.token
135
+ else
136
+ @message = co.response_text
137
+ end
138
+
139
+ La seconde étape nécessite que vous récupérer le code de confirmation envoyé au client, y ajouter votre token PSR pour ensuite facturer réellement le client. En cas de succès de paiement, vous devriez être en mesure d'accéder à l'URL du reçu électronique et d'autres informations listées au niveau de la documentation officielle.
140
+
141
+ if co.charge("TOKEN_PSR", "CODE_DE_CONFIRMATION_DU_CLIENT")
142
+ @receipt = co.receipt_url
143
+ @customer_name = co.customer['name']
144
+ else
145
+ @message = co.response_text
146
+ end
147
+
148
+ ## Transfert d'argent via le service de Transfert Automatique (TFA)
149
+
150
+ Cette option s'avère très intéressante si vous souhaitez créer votre propre solution de paiement par dessus celle de PAYDUNYA ou si vous devez reverser un certain pourcentage à chaque vente. L'argent est reçu sur les comptes destinataires et le service n'est pas facturé.
151
+
152
+ Vous pouvez transférer des fonds vers d'autres comptes clients PAYDUNYA à partir de votre compte via l'API de Transfert Automatique (TFA). Pour des raisons de sécurité, vous devez explicitement activer l'option de Transfert Automatique (TFA) dans la configuration de votre intégration. Vous pouvez toujours activer ou désactiver le Transfert Automatique (TFA) en mettant à jour la configuration de votre intégration.
153
+
154
+ direct_pay = Paydunya::DirectPay.new
155
+ if (direct_pay.credit_account("EMAIL_OU_NUMERO_MOBILE_DU_CLIENT_PAYDUNYA", MONTANT_A_TRANSFERER))
156
+ puts direct_pay.description
157
+ puts direct_pay.response_text
158
+ puts direct_pay.transaction_id
159
+ else
160
+ puts direct_pay.description
161
+ puts direct_pay.response_text
162
+ end
163
+
164
+ ## Télécharger une application exemple Ruby on Rails
165
+ https://github.com/paydunya/paydunya-rails-demo-store
166
+
167
+ ## Contribuer
168
+
169
+ 1. Faire un Fork de ce dépôt
170
+ 2. Créer une nouvelle branche (`git checkout -b new-feature`)
171
+ 3. Faire un commit de vos modifications (`git commit -am "Ajout d'une nouvelle fonctionnalité"`)
172
+ 4. Faire un Push au niveau de la branche (`git push origin new-feature`)
173
+ 5. Créer un Pull Request
174
+
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ end
7
+
8
+ desc "Run tests"
9
+ task :default => :test
data/lib/paydunya.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'multi_json'
2
+ require 'faraday'
3
+ require 'faraday_middleware'
4
+ require "paydunya/version"
5
+ require "paydunya/setup"
6
+ require "paydunya/utilities"
7
+ require "paydunya/checkout"
8
+ require "paydunya/direct_pay"
9
+
10
+ module Paydunya
11
+ SUCCESS = "success"
12
+ FAIL = "fail"
13
+ PENDING = "pending"
14
+ end
@@ -0,0 +1,25 @@
1
+ module Paydunya
2
+ module Checkout
3
+ class Core
4
+ include Paydunya::Utilities
5
+ attr_accessor :status, :response_text, :response_code, :transaction_id, :description, :token, :result
6
+
7
+ def push_results(result={})
8
+ @result = result
9
+ @transaction_id = result["transaction_id"]
10
+ @description = result["description"]
11
+ @response_code = result["response_code"]
12
+ @response_text = result["response_text"]
13
+ @token = result["token"]
14
+ @response_code == "00" ? @status = Paydunya::SUCCESS : @status = Paydunya::FAIL
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ %w(checkout/redirect_invoice
21
+ checkout/onsite_invoice
22
+ checkout/store
23
+ ).each do |lib|
24
+ require File.join(File.dirname(__FILE__), lib)
25
+ end
@@ -0,0 +1,46 @@
1
+ module Paydunya
2
+ module Onsite
3
+ class Invoice < Paydunya::Checkout::Invoice
4
+
5
+ attr_accessor :invoice_token
6
+
7
+ def initialize
8
+ super
9
+ end
10
+
11
+ def charge(opr_token,confirm_token)
12
+ payload = {
13
+ :token => opr_token,
14
+ :confirm_token => confirm_token
15
+ }
16
+
17
+ result = http_json_request(Paydunya::Setup.opr_charge_base_url,payload)
18
+
19
+ if result["response_code"] == "00"
20
+ rebuild_invoice(result["invoice_data"])
21
+ @response_code = result["response_code"]
22
+ @response_text = result["response_text"]
23
+ true
24
+ else
25
+ @response_code = result["response_code"]
26
+ @response_text = result["response_text"]
27
+ false
28
+ end
29
+ end
30
+
31
+ def create(account_alias)
32
+
33
+ payload = {
34
+ :invoice_data => build_invoice_payload,
35
+ :opr_data => {
36
+ :account_alias => account_alias
37
+ }
38
+ }
39
+
40
+ result = http_json_request(Paydunya::Setup.opr_base_url,payload)
41
+ create_response(result)
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,146 @@
1
+ module Paydunya
2
+ module Checkout
3
+ class Invoice < Paydunya::Checkout::Core
4
+
5
+ attr_accessor :items, :total_amount, :taxes, :description, :currency, :store
6
+ attr_accessor :customer, :custom_data, :cancel_url, :return_url, :invoice_url, :receipt_url
7
+
8
+ def initialize
9
+ @items = {}
10
+ @taxes = {}
11
+ @custom_data = {}
12
+ @customer = {}
13
+ @total_amount = 0.0
14
+ @currency = "fcfa"
15
+ @store = Paydunya::Checkout::Store
16
+ @return_url = @store.return_url
17
+ @cancel_url = @store.cancel_url
18
+ end
19
+
20
+ # Adds invoice items to the @items hash, the idea is to allow this function to be used in a loop
21
+ def add_item(name,quantity,unit_price,total_price,description="")
22
+ @items.merge!({
23
+ :"item_#{@items.size}" => {
24
+ :name => name,
25
+ :quantity => quantity,
26
+ :unit_price => unit_price,
27
+ :total_price => total_price,
28
+ :description => description
29
+ }
30
+ })
31
+ end
32
+
33
+ # Adds invoice tax to the @taxes hash, the idea is to allow this function to be used in a loop
34
+ def add_tax(name,amount)
35
+ @taxes.merge!({
36
+ :"tax_#{@taxes.size}" => {
37
+ :name => name,
38
+ :amount => amount
39
+ }
40
+ })
41
+ end
42
+
43
+ def add_custom_data(key,value)
44
+ @custom_data["#{key}"] = value
45
+ end
46
+
47
+ def get_items
48
+ @items
49
+ end
50
+
51
+ def get_taxes
52
+ @taxes
53
+ end
54
+
55
+ def get_customer_info(key)
56
+ @customer["#{key}"]
57
+ end
58
+
59
+ def get_custom_data(key)
60
+ @custom_data["#{key}"]
61
+ end
62
+
63
+ def confirm(token)
64
+ result = http_get_request("#{Paydunya::Setup.checkout_confirm_base_url}#{token}")
65
+ unless result.size > 0
66
+ @response_text = "Invoice Not Found"
67
+ @response_code = 1002
68
+ @status = Paydunya::FAIL
69
+ return false
70
+ end
71
+
72
+ if result["status"] == "completed"
73
+ rebuild_invoice(result)
74
+ @response_text = result["response_text"]
75
+ true
76
+ else
77
+ @status = result["status"]
78
+ @items = result["invoice"]["items"]
79
+ @taxes = result["invoice"]["taxes"]
80
+ @description = result["invoice"]["description"]
81
+ @custom_data = result["custom_data"]
82
+ @total_amount = result["invoice"]["total_amount"]
83
+ @response_text = "Invoice status is #{result['status'].upcase}"
84
+ false
85
+ end
86
+ end
87
+
88
+ def create
89
+ result = http_json_request(Paydunya::Setup.checkout_base_url,build_invoice_payload)
90
+ create_response(result)
91
+ end
92
+
93
+ protected
94
+ def build_invoice_payload
95
+ { :invoice => {
96
+ :items => @items,
97
+ :taxes => @taxes,
98
+ :total_amount => @total_amount,
99
+ :description => description
100
+ },
101
+ :store => {
102
+ :name => @store.name,
103
+ :tagline => @store.tagline,
104
+ :postal_address => @store.postal_address,
105
+ :phone => @store.phone_number,
106
+ :logo_url => @store.logo_url,
107
+ :website_url => @store.website_url
108
+ },
109
+ :custom_data => @custom_data,
110
+ :actions => {
111
+ :cancel_url => @cancel_url,
112
+ :return_url => @return_url
113
+ }
114
+ }
115
+ end
116
+
117
+ def rebuild_invoice(result={})
118
+ @status = result["status"]
119
+ @customer = result["customer"]
120
+ @items = result["invoice"]["items"]
121
+ @taxes = result["invoice"]["taxes"]
122
+ @description = result["invoice"]["description"]
123
+ @custom_data = result["custom_data"]
124
+ @total_amount = result["invoice"]["total_amount"]
125
+ @receipt_url = result["receipt_url"]
126
+ end
127
+
128
+ def create_response(result={})
129
+ if result["response_code"] == "00"
130
+ @token = result["token"]
131
+ @response_text = result["response_text"]
132
+ @response_code = result["response_code"]
133
+ @invoice_url = result["invoice_token"] || result["response_text"]
134
+ @status = Paydunya::SUCCESS
135
+ true
136
+ else
137
+ @response_text = result["response_text"]
138
+ @response_code = result["response_code"]
139
+ @invoice_url = nil
140
+ @status = Paydunya::FAIL
141
+ false
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,31 @@
1
+ module Paydunya
2
+ module Checkout
3
+ module Store
4
+ @@name = "Untitled Store"
5
+ @@tagline = nil
6
+ @@postal_address = nil
7
+ @@phone_number = nil
8
+ @@website_url = nil
9
+ @@logo_url = nil
10
+ @@cancel_url = nil
11
+ @@return_url = nil
12
+
13
+ def self.name=(name); @@name = name; end
14
+ def self.name; @@name; end
15
+ def self.tagline=(tagline); @@tagline = tagline; end
16
+ def self.tagline; @@tagline; end
17
+ def self.postal_address=(postal_address); @@postal_address = postal_address; end
18
+ def self.postal_address; @@postal_address; end
19
+ def self.phone_number=(phone_number); @@phone_number = phone_number; end
20
+ def self.phone_number; @@phone_number; end
21
+ def self.website_url=(website_url); @@website_url = website_url; end
22
+ def self.website_url; @@website_url; end
23
+ def self.logo_url=(logo_url); @@logo_url = logo_url; end
24
+ def self.logo_url; @@logo_url; end
25
+ def self.cancel_url=(cancel_url); @@cancel_url = cancel_url; end
26
+ def self.cancel_url; @@cancel_url; end
27
+ def self.return_url=(return_url); @@return_url = return_url; end
28
+ def self.return_url; @@return_url; end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ module Paydunya
2
+ class DirectPay < Paydunya::Checkout::Core
3
+
4
+ def credit_account(payee_account,amount)
5
+ payload = {
6
+ :account_alias => payee_account,
7
+ :amount => amount
8
+ }
9
+
10
+ result = http_json_request(Paydunya::Setup.direct_pay_credit_base_url,payload)
11
+ if result["response_code"] == "00"
12
+ push_results(result)
13
+ true
14
+ else
15
+ push_results(result)
16
+ false
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,59 @@
1
+ module Paydunya
2
+ module Setup
3
+ @@master_key = nil
4
+ @@private_key = nil
5
+ @@public_key = nil
6
+ @@token = nil
7
+ @@mode = "test"
8
+
9
+ ROOT_URL_BASE = "https://app.paydunya.com"
10
+
11
+ LIVE_CHECKOUT_INVOICE_BASE_URL = "#{ROOT_URL_BASE}/api/v1/checkout-invoice/create"
12
+ TEST_CHECKOUT_INVOICE_BASE_URL = "#{ROOT_URL_BASE}/sandbox-api/v1/checkout-invoice/create"
13
+
14
+ LIVE_CHECKOUT_CONFIRM_BASE_URL = "#{ROOT_URL_BASE}/api/v1/checkout-invoice/confirm/"
15
+ TEST_CHECKOUT_CONFIRM_BASE_URL = "#{ROOT_URL_BASE}/sandbox-api/v1/checkout-invoice/confirm/"
16
+
17
+ LIVE_OPR_BASE_URL = "#{ROOT_URL_BASE}/api/v1/opr/create"
18
+ TEST_OPR_BASE_URL = "#{ROOT_URL_BASE}/sandbox-api/v1/opr/create"
19
+
20
+ LIVE_OPR_CHARGE_BASE_URL = "#{ROOT_URL_BASE}/api/v1/opr/charge"
21
+ TEST_OPR_CHARGE_BASE_URL = "#{ROOT_URL_BASE}/sandbox-api/v1/opr/charge"
22
+
23
+ LIVE_DIRECT_PAY_CREDIT_BASE_URL = "#{ROOT_URL_BASE}/api/v1/direct-pay/credit-account"
24
+ TEST_DIRECT_PAY_CREDIT_BASE_URL = "#{ROOT_URL_BASE}/sandbox-api/v1/direct-pay/credit-account"
25
+
26
+ def self.master_key=(master_key); @@master_key = master_key; end
27
+ def self.master_key; @@master_key; end
28
+ def self.private_key=(private_key); @@private_key = private_key; end
29
+ def self.private_key; @@private_key; end
30
+ def self.public_key=(public_key); @@public_key = public_key; end
31
+ def self.public_key; @@public_key; end
32
+ def self.token=(token); @@token = token; end
33
+ def self.token; @@token; end
34
+
35
+ def self.mode=(mode); @@mode = mode; end
36
+ def self.mode; @@mode; end
37
+
38
+ def self.checkout_base_url
39
+ @@mode == "live" ? LIVE_CHECKOUT_INVOICE_BASE_URL : TEST_CHECKOUT_INVOICE_BASE_URL
40
+ end
41
+
42
+ def self.checkout_confirm_base_url
43
+ @@mode == "live" ? LIVE_CHECKOUT_CONFIRM_BASE_URL : TEST_CHECKOUT_CONFIRM_BASE_URL
44
+ end
45
+
46
+ def self.opr_base_url
47
+ @@mode == "live" ? LIVE_OPR_BASE_URL : TEST_OPR_BASE_URL
48
+ end
49
+
50
+ def self.opr_charge_base_url
51
+ @@mode == "live" ? LIVE_OPR_CHARGE_BASE_URL : TEST_OPR_CHARGE_BASE_URL
52
+ end
53
+
54
+ def self.direct_pay_credit_base_url
55
+ @@mode == "live" ? LIVE_DIRECT_PAY_CREDIT_BASE_URL : TEST_DIRECT_PAY_CREDIT_BASE_URL
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,44 @@
1
+ module Paydunya
2
+ module Utilities
3
+ def http_json_request(baseurl,payload={})
4
+ conn = Faraday.new(:url => baseurl, :ssl => {:verify => false}) do |faraday|
5
+ faraday.request :json
6
+ faraday.adapter Faraday.default_adapter
7
+ end
8
+
9
+ result = conn.post do |req|
10
+ req.headers["User-Agent"] = "Paydunya Checkout API Ruby client v1 aka Neptune"
11
+ req.headers['PAYDUNYA-PUBLIC-KEY'] = Paydunya::Setup.public_key
12
+ req.headers['PAYDUNYA-PRIVATE-KEY'] = Paydunya::Setup.private_key
13
+ req.headers['PAYDUNYA-MASTER-KEY'] = Paydunya::Setup.master_key
14
+ req.headers['PAYDUNYA-TOKEN'] = Paydunya::Setup.token
15
+ req.headers['PAYDUNYA-MODE'] = Paydunya::Setup.mode
16
+ req.body = hash_to_json payload
17
+ end
18
+ json_to_hash(result.body)
19
+ end
20
+
21
+ def http_get_request(baseurl)
22
+ conn = Faraday.new(:url => baseurl, :ssl => {:verify => false})
23
+
24
+ result = conn.get do |req|
25
+ req.headers["User-Agent"] = "Paydunya Checkout API Ruby client v1 aka Neptune"
26
+ req.headers['PAYDUNYA-PUBLIC-KEY'] = Paydunya::Setup.public_key
27
+ req.headers['PAYDUNYA-PRIVATE-KEY'] = Paydunya::Setup.private_key
28
+ req.headers['PAYDUNYA-MASTER-KEY'] = Paydunya::Setup.master_key
29
+ req.headers['PAYDUNYA-TOKEN'] = Paydunya::Setup.token
30
+ req.headers['PAYDUNYA-MODE'] = Paydunya::Setup.mode
31
+ end
32
+
33
+ json_to_hash(result.body)
34
+ end
35
+
36
+ def hash_to_json(params={})
37
+ MultiJson.dump params
38
+ end
39
+
40
+ def json_to_hash(params={})
41
+ MultiJson.load params
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,3 @@
1
+ module Paydunya
2
+ VERSION = "1.0.2"
3
+ end
data/paydunya.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'paydunya/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "paydunya"
8
+ gem.version = Paydunya::VERSION
9
+ gem.author = "PAYDUNYA"
10
+ gem.email = ["paydunya@paydunya.com"]
11
+ gem.description = %q{Ruby library for integrating with the PAYDUNYA Gateway}
12
+ gem.summary = %q{Ruby client bindings for the PAYDUNYA API}
13
+ gem.homepage = "https://paydunya.com/developers/ruby"
14
+ gem.post_install_message = "Thanks for installing PAYDUNYA Ruby client.\nYou may read full API docs at https://paydunya.com/developers/ruby"
15
+
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.require_paths = ["lib"]
20
+ gem.add_dependency('rest-client', '~> 1.7', '>= 1.7.2')
21
+ gem.add_dependency('multi_json', '~> 1.10', '>= 1.10.1')
22
+ gem.add_dependency('faraday','~> 0.9.0')
23
+ gem.add_dependency('faraday_middleware','~> 0.9', '>= 0.9.1')
24
+ gem.add_development_dependency('rake', '~> 10.2', '>= 10.2.2')
25
+ end
@@ -0,0 +1,16 @@
1
+ require 'test/unit'
2
+ require 'paydunya'
3
+
4
+ class TestPaydunya < Test::Unit::TestCase
5
+ def test_checkout_invoice_items
6
+ invoice = Paydunya::Checkout::Invoice.new
7
+ invoice.add_item("Article 1", 1, 1000, 1000, "Description optionnelle")
8
+ invoice.add_item("Article 2", 5, 5000, 25000)
9
+ invoice.total_amount = 26000
10
+ invoice.description = "Unit::Test Invoice from Ruby lang"
11
+ assert_instance_of(Hash, invoice.get_items)
12
+ assert_equal(2, invoice.get_items.size)
13
+ assert_instance_of(Hash, invoice.get_items[:item_0])
14
+ assert_equal(5, invoice.get_items[:item_0].size)
15
+ end
16
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paydunya
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - PAYDUNYA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-27 00:00:00.000000000 Z
11
+ date: 2015-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -110,7 +110,24 @@ email:
110
110
  executables: []
111
111
  extensions: []
112
112
  extra_rdoc_files: []
113
- files: []
113
+ files:
114
+ - ".gitignore"
115
+ - ".travis.yml"
116
+ - Gemfile
117
+ - LICENSE.txt
118
+ - README.md
119
+ - Rakefile
120
+ - lib/paydunya.rb
121
+ - lib/paydunya/checkout.rb
122
+ - lib/paydunya/checkout/onsite_invoice.rb
123
+ - lib/paydunya/checkout/redirect_invoice.rb
124
+ - lib/paydunya/checkout/store.rb
125
+ - lib/paydunya/direct_pay.rb
126
+ - lib/paydunya/setup.rb
127
+ - lib/paydunya/utilities.rb
128
+ - lib/paydunya/version.rb
129
+ - paydunya.gemspec
130
+ - test/test_paydunya.rb
114
131
  homepage: https://paydunya.com/developers/ruby
115
132
  licenses: []
116
133
  metadata: {}
@@ -136,4 +153,5 @@ rubygems_version: 2.4.6
136
153
  signing_key:
137
154
  specification_version: 4
138
155
  summary: Ruby client bindings for the PAYDUNYA API
139
- test_files: []
156
+ test_files:
157
+ - test/test_paydunya.rb