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 +4 -4
- data/.gitignore +19 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +174 -0
- data/Rakefile +9 -0
- data/lib/paydunya.rb +14 -0
- data/lib/paydunya/checkout.rb +25 -0
- data/lib/paydunya/checkout/onsite_invoice.rb +46 -0
- data/lib/paydunya/checkout/redirect_invoice.rb +146 -0
- data/lib/paydunya/checkout/store.rb +31 -0
- data/lib/paydunya/direct_pay.rb +20 -0
- data/lib/paydunya/setup.rb +59 -0
- data/lib/paydunya/utilities.rb +44 -0
- data/lib/paydunya/version.rb +3 -0
- data/paydunya.gemspec +25 -0
- data/test/test_paydunya.rb +16 -0
- metadata +22 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce384f8e5089e5f7a94e82a79f795e841c414773
|
4
|
+
data.tar.gz: a767db469a8a66755400c48a6c1ad4122ee3481d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7268f15c9bfa4ae2e911999c0d4b76425a64f333ea37bb8bb193a2d7a2f605b5b728ab365464a96fa3dd413354b5c22f60713eedb2987b92c552ab5d9785a2ed
|
7
|
+
data.tar.gz: 128fa6a27e9e533cb3573f80652aeb173a3c2488919d8cfcdd5b5d98f08777e8538f0d462198e5ef64e4bdcd3c5c9364e199242760763f38054ec07d40b89fd5
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
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
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
|
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.
|
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-
|
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
|