fawry 0.1.0 → 1.2.1

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
  SHA256:
3
- metadata.gz: 35a9a9bd2b1674d4f6df24e1b7a8fb187585906fed608c41991613f25f459214
4
- data.tar.gz: f1c205a1f9d92c758df8fe13f0a4bcd0bc70ea22106ab380984db00bc1303f6a
3
+ metadata.gz: de7321464f0d145904cb1b356fc8b0659f7258e5693c4c3a32e6ae3276198a5e
4
+ data.tar.gz: c7bc36bbe23c12fbe7b7ea0b5397cfbf9a5bf696440806a1a7200e61fd10e4c1
5
5
  SHA512:
6
- metadata.gz: 7d3f2b4b9f111b8f967cbe2a67da12ed9c4683fd99a70e784d14963642b609594f4a2592782e5cfa0d92b8c16cbbe024d70fa99c150a74a0600656bab61057ed
7
- data.tar.gz: f65d775062f6a683b855b7d3deb10d8fa99b4f05a4f365bcb6b86312f2375d506f6e7e50f87f91ce517c5878e6b707a1dafc6b873ff0a729f6a101193709e4d1
6
+ metadata.gz: 9ff0c0665c07f5b0abd0b68ece79e6ab934c8c91e2387571986ad652af08e31cae9e8e0a3674aa180b9badbbb7833df24a6e64c8da5f9383ab97299454de4090
7
+ data.tar.gz: c1a8cdeef0c8fe57010ef68491e95ba88d99c5f990a123829afe03e78c7704a4184c101cd72ed145747d71972e085cf1ace26617feff0b42d781eb4af56d3ff6
@@ -0,0 +1,57 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ docker:
5
+ - image: circleci/ruby:2.6.0
6
+
7
+ working_directory: ~/repo
8
+
9
+ steps:
10
+ - checkout
11
+
12
+ # Download and cache dependencies
13
+ - restore_cache:
14
+ keys:
15
+ - v1-dependencies-{{ checksum "Gemfile.lock" }}
16
+ # fallback to using the latest cache if no exact match is found
17
+ - v1-dependencies-
18
+
19
+ - run:
20
+ name: install bundler
21
+ command: gem install bundler
22
+
23
+ - run:
24
+ name: install dependencies
25
+ command: |
26
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
27
+
28
+ - save_cache:
29
+ paths:
30
+ - ./vendor/bundle
31
+ key: v1-dependencies-{{ checksum "Gemfile.lock" }}
32
+
33
+ # run tests!
34
+ - run:
35
+ name: run tests
36
+ command: |
37
+ mkdir /tmp/test-results
38
+ TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
39
+ circleci tests split --split-by=timings)"
40
+
41
+ bundle exec rspec \
42
+ --format progress \
43
+ --format RspecJunitFormatter \
44
+ --out /tmp/test-results/rspec.xml \
45
+ --format progress \
46
+ $TEST_FILES
47
+
48
+ - run:
49
+ name: run rubocop
50
+ command: bundle exec rubocop
51
+
52
+ # collect reports
53
+ - store_test_results:
54
+ path: /tmp/test-results
55
+ - store_artifacts:
56
+ path: /tmp/test-results
57
+ destination: test-results
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ ruby-version: ['2.6', '2.7', '3.0']
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - name: Set up Ruby
27
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
+ # uses: ruby/setup-ruby@v1
30
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run tests
35
+ run: bundle exec rake
data/.rubocop.yml CHANGED
@@ -1,6 +1,9 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.6
1
4
  Metrics/LineLength:
2
5
  Max: 120
3
6
  Metrics/BlockLength:
4
- ExcludedMethods: ['describe', 'context']
7
+ IgnoredMethods: ['describe', 'context']
5
8
  Style/Documentation:
6
- Enabled: false
9
+ Enabled: false
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fawry (0.1.0)
4
+ fawry (1.2.1)
5
5
  dry-validation (~> 1.3, >= 1.3.1)
6
6
  faraday (~> 0.17.0)
7
7
 
@@ -10,54 +10,62 @@ GEM
10
10
  specs:
11
11
  addressable (2.7.0)
12
12
  public_suffix (>= 2.0.2, < 5.0)
13
+ ast (2.4.2)
13
14
  byebug (11.0.1)
14
- concurrent-ruby (1.1.5)
15
- crack (0.4.3)
16
- safe_yaml (~> 1.0.0)
15
+ concurrent-ruby (1.1.7)
16
+ crack (0.4.5)
17
+ rexml
17
18
  diff-lcs (1.3)
18
- dry-configurable (0.8.3)
19
+ dry-configurable (0.11.6)
19
20
  concurrent-ruby (~> 1.0)
20
21
  dry-core (~> 0.4, >= 0.4.7)
22
+ dry-equalizer (~> 0.2)
21
23
  dry-container (0.7.2)
22
24
  concurrent-ruby (~> 1.0)
23
25
  dry-configurable (~> 0.1, >= 0.1.3)
24
26
  dry-core (0.4.9)
25
27
  concurrent-ruby (~> 1.0)
26
- dry-equalizer (0.2.2)
28
+ dry-equalizer (0.3.0)
27
29
  dry-inflector (0.2.0)
28
- dry-initializer (3.0.1)
29
- dry-logic (1.0.3)
30
+ dry-initializer (3.0.4)
31
+ dry-logic (1.0.8)
30
32
  concurrent-ruby (~> 1.0)
31
33
  dry-core (~> 0.2)
32
34
  dry-equalizer (~> 0.2)
33
- dry-schema (1.4.1)
35
+ dry-schema (1.5.5)
34
36
  concurrent-ruby (~> 1.0)
35
37
  dry-configurable (~> 0.8, >= 0.8.3)
36
38
  dry-core (~> 0.4)
37
39
  dry-equalizer (~> 0.2)
38
40
  dry-initializer (~> 3.0)
39
41
  dry-logic (~> 1.0)
40
- dry-types (~> 1.2)
41
- dry-types (1.2.0)
42
+ dry-types (~> 1.4)
43
+ dry-types (1.4.0)
42
44
  concurrent-ruby (~> 1.0)
43
45
  dry-container (~> 0.3)
44
46
  dry-core (~> 0.4, >= 0.4.4)
45
- dry-equalizer (~> 0.2, >= 0.2.2)
47
+ dry-equalizer (~> 0.3)
46
48
  dry-inflector (~> 0.1, >= 0.1.2)
47
49
  dry-logic (~> 1.0, >= 1.0.2)
48
- dry-validation (1.3.1)
50
+ dry-validation (1.5.6)
49
51
  concurrent-ruby (~> 1.0)
50
52
  dry-container (~> 0.7, >= 0.7.1)
51
53
  dry-core (~> 0.4)
52
54
  dry-equalizer (~> 0.2)
53
55
  dry-initializer (~> 3.0)
54
- dry-schema (~> 1.0, >= 1.3.1)
55
- faraday (0.17.0)
56
+ dry-schema (~> 1.5, >= 1.5.2)
57
+ faraday (0.17.4)
56
58
  multipart-post (>= 1.2, < 3)
57
- hashdiff (1.0.0)
59
+ hashdiff (1.0.1)
58
60
  multipart-post (2.1.1)
59
- public_suffix (4.0.1)
60
- rake (10.5.0)
61
+ parallel (1.20.1)
62
+ parser (3.0.0.0)
63
+ ast (~> 2.4.1)
64
+ public_suffix (4.0.6)
65
+ rainbow (3.0.0)
66
+ rake (13.0.1)
67
+ regexp_parser (2.1.1)
68
+ rexml (3.2.4)
61
69
  rspec (3.9.0)
62
70
  rspec-core (~> 3.9.0)
63
71
  rspec-expectations (~> 3.9.0)
@@ -71,8 +79,22 @@ GEM
71
79
  diff-lcs (>= 1.2.0, < 2.0)
72
80
  rspec-support (~> 3.9.0)
73
81
  rspec-support (3.9.0)
74
- safe_yaml (1.0.5)
75
- webmock (3.7.6)
82
+ rspec_junit_formatter (0.4.1)
83
+ rspec-core (>= 2, < 4, != 2.12.0)
84
+ rubocop (1.11.0)
85
+ parallel (~> 1.10)
86
+ parser (>= 3.0.0.0)
87
+ rainbow (>= 2.2.2, < 4.0)
88
+ regexp_parser (>= 1.8, < 3.0)
89
+ rexml
90
+ rubocop-ast (>= 1.2.0, < 2.0)
91
+ ruby-progressbar (~> 1.7)
92
+ unicode-display_width (>= 1.4.0, < 3.0)
93
+ rubocop-ast (1.4.1)
94
+ parser (>= 2.7.1.5)
95
+ ruby-progressbar (1.11.0)
96
+ unicode-display_width (2.0.0)
97
+ webmock (3.12.1)
76
98
  addressable (>= 2.3.6)
77
99
  crack (>= 0.3.2)
78
100
  hashdiff (>= 0.4.0, < 2.0.0)
@@ -82,11 +104,13 @@ PLATFORMS
82
104
 
83
105
  DEPENDENCIES
84
106
  bundler (~> 2.0)
85
- byebug (~> 11.0, >= 11.0.1)
107
+ byebug (~> 11.0)
86
108
  fawry!
87
- rake (~> 10.0)
109
+ rake (~> 13.0)
88
110
  rspec (~> 3.0)
89
- webmock (~> 3.7, >= 3.7.6)
111
+ rspec_junit_formatter
112
+ rubocop (~> 1.11)
113
+ webmock (~> 3.12)
90
114
 
91
115
  BUNDLED WITH
92
- 2.0.2
116
+ 2.2.3
data/README-ar.md ADDED
@@ -0,0 +1,186 @@
1
+ [![CircleCI](https://circleci.com/gh/fawry-api/fawry.svg?style=svg)](https://circleci.com/gh/fawry-api/fawry)
2
+
3
+ # Fawry
4
+
5
+ **تنويه:** نحن لسنا تابعين رسميًا لشركة فوري.
6
+
7
+ مكتبة لتسهيل التعامل مع خدمات الدفع الخاصة بشبكة الدفع الإلكتروني فوري:
8
+
9
+ - [لإجراء عملية دفع](https://github.com/fawry-api/fawry#charge-customers)
10
+ - [لإجراء عملية استرداد](https://github.com/fawry-api/fawry#refund-customers)
11
+ - [حالة الدفع](https://github.com/fawry-api/fawry#get-payment-status)
12
+ - [عرض رموز الكروت](https://github.com/fawry-api/fawry#list-card-tokens)
13
+ - [إضافة رمز كارت](https://github.com/fawry-api/fawry#create-card-token)
14
+ - [حذف رمز كارت](https://github.com/fawry-api/fawry#delete-card-token)
15
+ - [تحليل رد خدمة فوري V2](https://github.com/fawry-api/fawry#parse-fawry-service-callback-v2)
16
+ - [طلب البيانات الخاصة بإعدادات الإستخدام](https://github.com/fawry-api/fawry#configuration-keys-as-environment-variables)
17
+
18
+ _المكتبة تدعم النظام التجريبي لفوري ايضا_
19
+
20
+ ## لإضافة وتشغيل المكتبة
21
+
22
+ أضف هذا السطر إلى ملف Gemfile الخاص بتطبيقك:
23
+
24
+ ```ruby
25
+ gem 'fawry'
26
+ ```
27
+
28
+ ثم نفذ:
29
+
30
+ $ bundle
31
+
32
+ أو قم بتثبيته بنفسك على النحو التالي:
33
+
34
+ $ gem install fawry
35
+
36
+ ## طريقة الإستعمال
37
+
38
+ ### لإجراء عملية دفع
39
+
40
+ ```ruby
41
+ params = { "merchant_code": 'merchant_code',
42
+ "merchant_ref_num": 'io5jxf3jp27kfh8m719arcqgw7izo7db',
43
+ "customer_profile_id": 'ocvsydvbu2gcp528wvl64i9z5srdalg5',
44
+ "customer_mobile": '012345678901',
45
+ "payment_method": 'PAYATFAWRY',
46
+ "currency_code": 'EGP',
47
+ "amount": 20,
48
+ "fawry_secure_key": 'fawry_secure_key',
49
+ "description": 'the charge request description',
50
+ "charge_items": [{ "item_id": 'fk3fn9flk8et9a5t9w3c5h3oc684ivho',
51
+ "description": 'desc', "price": 20, "quantity": 1 }] }
52
+
53
+ # استخدم خيار النظام التجريبي للاتصال بالنظام التجريبي الخاص بفوري
54
+ # sandbox: true
55
+ res = Fawry.charge(params, sandbox: true)
56
+ # => #<Fawry::FawryResponse:0x0000564257d0ea90 @type="ChargeResponse", @reference_number="931600239",
57
+ # @merchant_ref_number="io5jxf3jp27kfh8m719arcqgw7izo7db",
58
+ # @expiration_time=1573153206979, @status_code=200,
59
+ # @status_description="Operation done successfully">
60
+
61
+ res.success? # => true
62
+ res.reference_number # => 931600239
63
+ ```
64
+
65
+ ### لإجراء عملية استرداد
66
+
67
+ ```ruby
68
+ params = { "merchant_code": 'merchant_code',
69
+ "reference_number": '931337410',
70
+ "refund_amount": 20,
71
+ "fawry_secure_key": 'fawry_secure_key' }
72
+
73
+ res = Fawry.refund(params, sandbox: true)
74
+ # => #<Fawry::FawryResponse:0x0000564257d0ea90 @type="ResponseDataModel", @status_code=200,
75
+ # @status_description="Operation done successfully">
76
+
77
+ res.success? # => true
78
+ ```
79
+
80
+ ### حالة الدفع
81
+
82
+ ```ruby
83
+ params = { "merchant_code": 'merchant_code',
84
+ "merchant_ref_number": 'ssshxb98phmyvm434es62kage3nsm2cj',
85
+ "fawry_secure_key": 'fawry_secure_key' }
86
+
87
+ res = Fawry.payment_status(params, sandbox: true)
88
+ # => #<Fawry::FawryResponse:0x0000559974056898 @type="PaymentStatusResponse", @reference_number="931922417",
89
+ # @merchant_ref_number="ssshxb98phmyvm434es62kage3nsm2cj",
90
+ # @expiration_time=1573297736167, @status_code=200,
91
+ # @status_description="Operation done successfully", @payment_amount=20,
92
+ # @payment_method="PAYATFAWRY", @payment_status="UNPAID">
93
+
94
+ res.success? # => true
95
+ res.payment_status # => UNPAID
96
+ ```
97
+
98
+ ### عرض رموز الكروت
99
+
100
+ ```ruby
101
+ params = { "merchant_code": 'merchant_code',
102
+ "customer_profile_id": 'customer_profile_id',
103
+ "fawry_secure_key": 'fawry_secure_key' }
104
+
105
+ res = Fawry.list_tokens(params, sandbox: true)
106
+
107
+ #<Fawry::FawryResponse:0x0000556cb3a31798 @fawry_api_response={"type"=>"CustomerTokensResponse", "cards"=>[{"token"=>"b5sshhdsl98df96200f254c19b2718bfc825a0678888216c28962b3e66a393084ee9aed6", "creationDate"=>1599487402318, "lastFourDigits"=>"4242", "brand"=>"Visa Card"}, {"token"=>"fb98dslsksmkdds7857ed7042ce30a2a5b777e1f1ac6ac58da1c8c0199f61df7a8bc098e96", "creationDate"=>1599489158457, "lastFourDigits"=>"0001", "brand"=>"Visa Card"}, {"token"=>"cc03fwqaacbd94e468a1b756ac1cbb285a41a2428df9f1a727457b41f9447d0058c7c", "creationDate"=>1599584834346, "lastFourDigits"=>"2346", "brand"=>"MasterCard"}, {"token"=>"f04a8bc9c973f900515f4b58e52c9ff03070baf3f534bdfdad0e97679534f60ddkjk13", "creationDate"=>1600260415739, "lastFourDigits"=>"8769", "brand"=>"Visa Card"}], "statusCode"=>200, "statusDescription"=>"Operation done successfully"}, @type="CustomerTokensResponse", @cards=[{"token"=>"b5sshhdsl98df96200f254c19b2718bfc825a0678888216c28962b3e66a393084ee9aed6", "creationDate"=>1599487402318, "lastFourDigits"=>"4242", "brand"=>"Visa Card"}, {"token"=>"fb98dslsksmkdds7857ed7042ce30a2a5b777e1f1ac6ac58da1c8c0199f61df7a8bc098e96", "creationDate"=>1599489158457, "lastFourDigits"=>"0001", "brand"=>"Visa Card"}, {"token"=>"cc03fwqaacbd94e468a1b756ac1cbb285a41a2428df9f1a727457b41f9447d0058c7c", "creationDate"=>1599584834346, "lastFourDigits"=>"2346", "brand"=>"MasterCard"}, {"token"=>"f04a8bc9c973f900515f4b58e52c9ff03070baf3f534bdfdad0e97679534f60ddkjk13", "creationDate"=>1600260415739, "lastFourDigits"=>"8769", "brand"=>"Visa Card"}], @status_code=200, @status_description="Operation done successfully">
108
+
109
+ res.success? # => true
110
+ res.cards # => cards
111
+ ```
112
+
113
+ ### إضافة رمز كارت
114
+
115
+ ```ruby
116
+ params = { "merchant_code" : "merchant_code",
117
+ "customer_profile_id" : "customer_profile_id",
118
+ "customer_mobile" : "customer_mobile",
119
+ "customer_email" : "customer_email",
120
+ "card_number" : "card_number",
121
+ "expiry_year" : "expiry_year",
122
+ "expiry_month" : "expiry_month",
123
+ "cvv" : "cvv" }
124
+ res = Fawry.create_card_token(params, sandbox: true)
125
+ #<Fawry::FawryResponse:0x0000556cb3eb0080 @fawry_api_response={"type"=>"CardTokenResponse", "card"=>{"token"=>"b598f96200f254c19b2718bfc825a063278888216c28962b3e66a393084ee9aed6", "creationDate"=>1607011562353, "lastFourDigits"=>"4242"}, "statusCode"=>200, "statusDescription"=>"Operation done successfully"}, @type="CardTokenResponse", @status_code=200, @status_description="Operation done successfully", @card={"token"=>"b598f96200f254c19b2718bfc825a063278888216c28962b3e66a393084ee9aed6", "creationDate"=>1607011562353, "lastFourDigits"=>"4242"}>
126
+
127
+ res.success?
128
+ res.card
129
+ ```
130
+
131
+ ### حذف رمز كارت
132
+
133
+ ```ruby
134
+ params = { "merchant_code": 'merchant_code',
135
+ "customer_profile_id": 'customer_profile_id',
136
+ "card_token": 'card_token' }
137
+
138
+ res = Fawry.delete_token(params, sandbox: true)
139
+ #<Fawry::FawryResponse:0x0000556cb57c2460 @fawry_api_response={"type"=>"CardTokenResponse", "statusCode"=>200, "statusDescription"=>"Operation done successfully"}, @type="CardTokenResponse", @status_code=200, @status_description="Operation done successfully">
140
+ res.success?
141
+
142
+ ```
143
+
144
+ ### رد اتصال خدمة تحليل فوري v2
145
+
146
+ ```ruby
147
+ # تم إرسال المعلمات من خادم فوري
148
+ callback_params = { "requestId": 'c72827d084ea4b88949d91dd2db4996e', "fawryRefNumber": '970177',
149
+ "merchantRefNumber": '9708f1cea8b5426cb57922df51b7f790',
150
+ "customerMobile": '01004545545', "customerMail": 'fawry@fawry.com',
151
+ "paymentAmount": 152.00, "orderAmount": 150.00, "fawryFees": 2.00,
152
+ "shippingFees": '', "orderStatus": 'NEW', "paymentMethod": 'PAYATFAWRY',
153
+ "messageSignature": 'b0175565323e464b01dc9407160368af5568196997fb6e379374a4f4fbbcf587',
154
+ "orderExpiryDate": 1_533_554_719_314,
155
+ "orderItems": [{ "itemCode": 'e6aacbd5a498487ab1a10ae71061535d', "price": 150.0, "quantity": 1 }] }
156
+
157
+ # FAWRY_SECURE_KEY يجب تعيين متغير البيئة
158
+ fawry_callback = Fawry.parse_callback(callback_params, {})
159
+ # <Fawry::FawryCallback:0x000056339ac43730 @request_id="c72827d084ea4b88949d91dd2db4996e", @fawry_ref_number="970177",
160
+ # @merchant_ref_number="9708f1cea8b5426cb57922df51b7f790", @customer_mobile="01004545545",
161
+ # @customer_mail="fawry@fawry.com", @order_status="NEW", @order_amount=150.0, @fawry_fees=2.0, ...>
162
+
163
+ fawry_callback.fawry_ref_number # => 970177
164
+ fawry_callback.order_status # => NEW
165
+ ```
166
+
167
+ ### طلب البيانات الخاصة بإعدادات الإستخدام
168
+
169
+ يمكن إرسال بيانات تهيئة فوري مثل رمز التاجر ومفتاح الأمان خلال البيانات المعطاه (`merchant_code`, `fawry_secure_key` ) الى **charge**, **refund**, **payment_status** طرق, _أو_ يمكن تعيينها كمتغيرات لنظام التشغيل: (`FAWRY_MERCHANT_CODE`, `FAWRY_SECURE_KEY`).
170
+
171
+ لتحليل fawry معاودة الاتصال ، يجب عليك ضبط متغير البيئة `FAWRY_SECURE_KEY`.
172
+
173
+ ## الخطوات القادمة المطلوب تنفيذها:
174
+
175
+ - إضافة خيار لرفع الاستثناء عند فشل الطلب
176
+
177
+ ## تطوير المكتبة
178
+
179
+ بعد التحقق من الريبو ، قم بتشغيل `bin/setup` لتثبيت التبعيات.
180
+ ثم نفذ الأمر `rake spec` لإجراء الاختبارات. يمكنك أيضا الجري `bin/console` للمطالبة التفاعلية التي تسمح لك بالتجربة.
181
+
182
+ لتثبيت هذه المكتبة على جهازك ، قم بتشغيل `bundle exec rake install`. لإصدار إصدار جديد ، قم بتحديث رقم الإصدار بتنسيق `version.rb`, ثم نفذ الأمر `bundle exec rake release`, الذي سينشئ علامة git للإصدار ، ويدفع التزامات git والعلامات ، ويدفع ملف `.gem` يا صديق [rubygems.org](https://rubygems.org).
183
+
184
+ ## المساهمة
185
+
186
+ يتم الترحيب بتقارير الأخطاء وطلبات السحب على GitHub في https://github.com/amrrbakry/fawry. يهدف هذا المشروع إلى أن يكون مساحة آمنة ومرحبة للتعاون ، ومن المتوقع أن يلتزم المساهمون بـ [Contributor Covenant](http://contributor-covenant.org) القواعد السلوكية.
data/README.md CHANGED
@@ -1,9 +1,21 @@
1
+ [![CircleCI](https://circleci.com/gh/fawry-api/fawry.svg?style=svg)](https://circleci.com/gh/fawry-api/fawry)
2
+
1
3
  # Fawry
4
+
5
+ [README - متوفر باللغة العربية](https://github.com/fawry-api/fawry/blob/master/README-ar.md)
6
+
7
+ **Disclaimer:** we are _not officially affilated_ with the _Fawry_ company.
8
+
2
9
  A plug-and-play library that makes interfacing with Fawry's payment gateway API a breeze:
3
- - [Charge customers](https://github.com/amrrbakry/fawry#charge-customers)
4
- - [Refund customers](https://github.com/amrrbakry/fawry#refund-customers)
5
- - Get payment status _(Not yet implemented)_
6
- - Parse Fawry's service callback V2 _(Not yet implemented)_
10
+
11
+ - [Charge customers](https://github.com/fawry-api/fawry#charge-customers)
12
+ - [Refund customers](https://github.com/fawry-api/fawry#refund-customers)
13
+ - [Get payment status](https://github.com/fawry-api/fawry#get-payment-status)
14
+ - [List card tokens](https://github.com/fawry-api/fawry#list-card-tokens)
15
+ - [Create card token](https://github.com/fawry-api/fawry#create-card-token)
16
+ - [Delete card token](https://github.com/fawry-api/fawry#delete-card-token)
17
+ - [Parse Fawry's service callback V2](https://github.com/fawry-api/fawry#parse-fawry-service-callback-v2)
18
+ - [Configuration keys as environment variables](https://github.com/fawry-api/fawry#configuration-keys-as-environment-variables)
7
19
 
8
20
  _Fawry's production and sandbox environments are supported._
9
21
 
@@ -24,7 +36,9 @@ Or install it yourself as:
24
36
  $ gem install fawry
25
37
 
26
38
  ## Usage
39
+
27
40
  ### Charge customers
41
+
28
42
  ```ruby
29
43
  params = { "merchant_code": 'merchant_code',
30
44
  "merchant_ref_num": 'io5jxf3jp27kfh8m719arcqgw7izo7db',
@@ -48,7 +62,9 @@ res = Fawry.charge(params, sandbox: true)
48
62
  res.success? # => true
49
63
  res.reference_number # => 931600239
50
64
  ```
51
- ### Refund Customers
65
+
66
+ ### Refund Customers
67
+
52
68
  ```ruby
53
69
  params = { "merchant_code": 'merchant_code',
54
70
  "reference_number": '931337410',
@@ -61,6 +77,106 @@ res = Fawry.refund(params, sandbox: true)
61
77
 
62
78
  res.success? # => true
63
79
  ```
80
+
81
+ ### Get Payment Status
82
+
83
+ ```ruby
84
+ params = { "merchant_code": 'merchant_code',
85
+ "merchant_ref_number": 'ssshxb98phmyvm434es62kage3nsm2cj',
86
+ "fawry_secure_key": 'fawry_secure_key' }
87
+
88
+ res = Fawry.payment_status(params, sandbox: true)
89
+ # => #<Fawry::FawryResponse:0x0000559974056898 @type="PaymentStatusResponse", @reference_number="931922417",
90
+ # @merchant_ref_number="ssshxb98phmyvm434es62kage3nsm2cj",
91
+ # @expiration_time=1573297736167, @status_code=200,
92
+ # @status_description="Operation done successfully", @payment_amount=20,
93
+ # @payment_method="PAYATFAWRY", @payment_status="UNPAID">
94
+
95
+ res.success? # => true
96
+ res.payment_status # => UNPAID
97
+ ```
98
+
99
+ ### List Card Tokens
100
+
101
+ ```ruby
102
+ params = { "merchant_code": 'merchant_code',
103
+ "customer_profile_id": 'customer_profile_id',
104
+ "fawry_secure_key": 'fawry_secure_key' }
105
+
106
+ res = Fawry.list_tokens(params, sandbox: true)
107
+ #<Fawry::FawryResponse:0x0000556cb3a31798 @fawry_api_response={"type"=>"CustomerTokensResponse", "cards"=>[{"token"=>"b5sshhdsl98df96200f254c19b2718bfc825a0678888216c28962b3e66a393084ee9aed6", "creationDate"=>1599487402318, "lastFourDigits"=>"4242", "brand"=>"Visa Card"}, {"token"=>"fb98dslsksmkdds7857ed7042ce30a2a5b777e1f1ac6ac58da1c8c0199f61df7a8bc098e96", "creationDate"=>1599489158457, "lastFourDigits"=>"0001", "brand"=>"Visa Card"}, {"token"=>"cc03fwqaacbd94e468a1b756ac1cbb285a41a2428df9f1a727457b41f9447d0058c7c", "creationDate"=>1599584834346, "lastFourDigits"=>"2346", "brand"=>"MasterCard"}, {"token"=>"f04a8bc9c973f900515f4b58e52c9ff03070baf3f534bdfdad0e97679534f60ddkjk13", "creationDate"=>1600260415739, "lastFourDigits"=>"8769", "brand"=>"Visa Card"}], "statusCode"=>200, "statusDescription"=>"Operation done successfully"}, @type="CustomerTokensResponse", @cards=[{"token"=>"b5sshhdsl98df96200f254c19b2718bfc825a0678888216c28962b3e66a393084ee9aed6", "creationDate"=>1599487402318, "lastFourDigits"=>"4242", "brand"=>"Visa Card"}, {"token"=>"fb98dslsksmkdds7857ed7042ce30a2a5b777e1f1ac6ac58da1c8c0199f61df7a8bc098e96", "creationDate"=>1599489158457, "lastFourDigits"=>"0001", "brand"=>"Visa Card"}, {"token"=>"cc03fwqaacbd94e468a1b756ac1cbb285a41a2428df9f1a727457b41f9447d0058c7c", "creationDate"=>1599584834346, "lastFourDigits"=>"2346", "brand"=>"MasterCard"}, {"token"=>"f04a8bc9c973f900515f4b58e52c9ff03070baf3f534bdfdad0e97679534f60ddkjk13", "creationDate"=>1600260415739, "lastFourDigits"=>"8769", "brand"=>"Visa Card"}], @status_code=200, @status_description="Operation done successfully">
108
+
109
+ res.success? # => true
110
+ res.cards # => cards
111
+ ```
112
+
113
+ ### Create Card Token
114
+
115
+ ```ruby
116
+ params = { "merchant_code" : "merchant_code",
117
+ "customer_profile_id" : "customer_profile_id",
118
+ "customer_mobile" : "customer_mobile",
119
+ "customer_email" : "customer_email",
120
+ "card_number" : "card_number",
121
+ "expiry_year" : "expiry_year",
122
+ "expiry_month" : "expiry_month",
123
+ "cvv" : "cvv" }
124
+ res = Fawry.create_card_token(params, sandbox: true)
125
+ #<Fawry::FawryResponse:0x0000556cb3eb0080 @fawry_api_response={"type"=>"CardTokenResponse", "card"=>{"token"=>"b598f96200f254c19b2718bfc825a063278888216c28962b3e66a393084ee9aed6", "creationDate"=>1607011562353, "lastFourDigits"=>"4242"}, "statusCode"=>200, "statusDescription"=>"Operation done successfully"}, @type="CardTokenResponse", @status_code=200, @status_description="Operation done successfully", @card={"token"=>"b598f96200f254c19b2718bfc825a063278888216c28962b3e66a393084ee9aed6", "creationDate"=>1607011562353, "lastFourDigits"=>"4242"}>
126
+
127
+ res.success?
128
+ res.card
129
+ ```
130
+
131
+ ### Delete Card Token
132
+
133
+ ```ruby
134
+ params = { "merchant_code": "merchant_code",
135
+ "customer_profile_id": "customer_profile_id",
136
+ "card_token": "card_token",
137
+ "fawry_secure_key": "fawry_secure_key" }
138
+
139
+ res = Fawry.delete_token(params, sandbox: true)
140
+ #<Fawry::FawryResponse:0x0000556cb57c2460 @fawry_api_response={"type"=>"CardTokenResponse", "statusCode"=>200, "statusDescription"=>"Operation done successfully"}, @type="CardTokenResponse", @status_code=200, @status_description="Operation done successfully">
141
+
142
+ res.success?
143
+
144
+ ```
145
+
146
+ ### Parse Fawry service callback v2
147
+
148
+ ```ruby
149
+ # params sent from fawry server
150
+ callback_params = { "requestId": 'c72827d084ea4b88949d91dd2db4996e', "fawryRefNumber": '970177',
151
+ "merchantRefNumber": '9708f1cea8b5426cb57922df51b7f790',
152
+ "customerMobile": '01004545545', "customerMail": 'fawry@fawry.com',
153
+ "paymentAmount": 152.00, "orderAmount": 150.00, "fawryFees": 2.00,
154
+ "shippingFees": '', "orderStatus": 'NEW', "paymentMethod": 'PAYATFAWRY',
155
+ "messageSignature": 'b0175565323e464b01dc9407160368af5568196997fb6e379374a4f4fbbcf587',
156
+ "orderExpiryDate": 1_533_554_719_314,
157
+ "orderItems": [{ "itemCode": 'e6aacbd5a498487ab1a10ae71061535d', "price": 150.0, "quantity": 1 }] }
158
+
159
+ # FAWRY_SECURE_KEY env var must be set
160
+ fawry_callback = Fawry.parse_callback(callback_params)
161
+ # <Fawry::FawryCallback:0x000056339ac43730 @request_id="c72827d084ea4b88949d91dd2db4996e", @fawry_ref_number="970177",
162
+ # @merchant_ref_number="9708f1cea8b5426cb57922df51b7f790", @customer_mobile="01004545545",
163
+ # @customer_mail="fawry@fawry.com", @order_status="NEW", @order_amount=150.0, @fawry_fees=2.0, ...>
164
+
165
+ fawry_callback.fawry_ref_number # => 970177
166
+ fawry_callback.order_status # => NEW
167
+ ```
168
+
169
+ ### Configuration keys as environment variables
170
+
171
+ Fawry configuration keys such as merchant code and secure key can be sent with the params (`merchant_code`, `fawry_secure_key` ) to the **charge**, **refund**, **payment_status** methods, _or_ they can be set as environment variables: (`FAWRY_MERCHANT_CODE`, `FAWRY_SECURE_KEY`).
172
+
173
+ To **parse** fawry callback, you _must_ set the env var `FAWRY_SECURE_KEY`.
174
+
175
+ ## TODO:
176
+
177
+ - Add public API documentation to README
178
+ - Add option to raise exception on request failure
179
+
64
180
  ## Development
65
181
 
66
182
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -70,11 +186,3 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
70
186
  ## Contributing
71
187
 
72
188
  Bug reports and pull requests are welcome on GitHub at https://github.com/amrrbakry/fawry. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
73
-
74
- ## License
75
-
76
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
77
-
78
- ## Code of Conduct
79
-
80
- Everyone interacting in the Fawry project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/amrrbakry/fawry/blob/master/CODE_OF_CONDUCT.md).