fawry 0.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 801fa2ec9cada4bf14b44b1733ff0010eae8c26ccc72ed23c500ae0b55ff6e30
4
- data.tar.gz: c48087c1e6f133664be53c2e2d28d6a6b228379367eb4817a88e9d2ef9b5a669
3
+ metadata.gz: 5015952a24c3ab03377aae7d4d17abccbb7800c00c5ed6a02b4becabe5aa42a6
4
+ data.tar.gz: 337289fe3666ac8fd7f7ff9886d5a6d5e33ebc542000c624771f338278160634
5
5
  SHA512:
6
- metadata.gz: b721a5d9d20bf0a7c4faccc2d6db668b9c3aae73fbffec5c3a917b9463ac6753b3e28189674d749239f6065f659e938b44c9bd3cb8588d57af83d8cfd114808a
7
- data.tar.gz: 97a8f8acf8eb6c41531a8b1ef8d72a26f650d95b0cb9ad5a41deb306f152b0d8d70ece22f4c6284e218de04311d2ba187d434fe3ba07844948428cded4a7feda
6
+ metadata.gz: 53a9057c10dda83db87042cce4dae0d7d76155c3bcffaeb5369403517d33613b10fb3d7a057db7cd39f368a2f4b3988ca06277db9de1e6ac9ab5c7d636ae026c
7
+ data.tar.gz: 8fb2747e2050270ea3514b6c7967e60d41268f2469bf6060188c532d4a2688387edcbaea741d567321b107ebb876adac7f7c79ec3375eeca91c9c007e6c6127a
@@ -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
- Metrics/LineLength:
1
+ AllCops:
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.6
4
+ Layout/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/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ # Fawry Changelog
2
+
3
+ ## [v1.2.1](https://github.com/fawry-api/fawry/releases/tag/v1.2.1) (14.03.2021)
4
+ - Update gem and dependencies to support Ruby 3.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fawry (0.2.0)
4
+ fawry (1.3.0)
5
5
  dry-validation (~> 1.3, >= 1.3.1)
6
6
  faraday (~> 0.17.0)
7
7
 
@@ -10,69 +10,87 @@ GEM
10
10
  specs:
11
11
  addressable (2.7.0)
12
12
  public_suffix (>= 2.0.2, < 5.0)
13
- byebug (11.0.1)
14
- concurrent-ruby (1.1.5)
15
- crack (0.4.3)
16
- safe_yaml (~> 1.0.0)
17
- diff-lcs (1.3)
18
- dry-configurable (0.8.3)
13
+ ast (2.4.2)
14
+ byebug (11.1.3)
15
+ concurrent-ruby (1.1.8)
16
+ crack (0.4.5)
17
+ rexml
18
+ diff-lcs (1.4.4)
19
+ dry-configurable (0.12.1)
19
20
  concurrent-ruby (~> 1.0)
20
- dry-core (~> 0.4, >= 0.4.7)
21
+ dry-core (~> 0.5, >= 0.5.0)
21
22
  dry-container (0.7.2)
22
23
  concurrent-ruby (~> 1.0)
23
24
  dry-configurable (~> 0.1, >= 0.1.3)
24
- dry-core (0.4.9)
25
+ dry-core (0.5.0)
25
26
  concurrent-ruby (~> 1.0)
26
- dry-equalizer (0.2.2)
27
+ dry-equalizer (0.3.0)
27
28
  dry-inflector (0.2.0)
28
- dry-initializer (3.0.1)
29
- dry-logic (1.0.3)
29
+ dry-initializer (3.0.4)
30
+ dry-logic (1.2.0)
30
31
  concurrent-ruby (~> 1.0)
31
- dry-core (~> 0.2)
32
- dry-equalizer (~> 0.2)
33
- dry-schema (1.4.1)
32
+ dry-core (~> 0.5, >= 0.5)
33
+ dry-schema (1.6.2)
34
34
  concurrent-ruby (~> 1.0)
35
35
  dry-configurable (~> 0.8, >= 0.8.3)
36
- dry-core (~> 0.4)
37
- dry-equalizer (~> 0.2)
36
+ dry-core (~> 0.5, >= 0.5)
38
37
  dry-initializer (~> 3.0)
39
38
  dry-logic (~> 1.0)
40
- dry-types (~> 1.2)
41
- dry-types (1.2.0)
39
+ dry-types (~> 1.5)
40
+ dry-types (1.5.1)
42
41
  concurrent-ruby (~> 1.0)
43
42
  dry-container (~> 0.3)
44
- dry-core (~> 0.4, >= 0.4.4)
45
- dry-equalizer (~> 0.2, >= 0.2.2)
43
+ dry-core (~> 0.5, >= 0.5)
46
44
  dry-inflector (~> 0.1, >= 0.1.2)
47
45
  dry-logic (~> 1.0, >= 1.0.2)
48
- dry-validation (1.3.1)
46
+ dry-validation (1.6.0)
49
47
  concurrent-ruby (~> 1.0)
50
48
  dry-container (~> 0.7, >= 0.7.1)
51
49
  dry-core (~> 0.4)
52
50
  dry-equalizer (~> 0.2)
53
51
  dry-initializer (~> 3.0)
54
- dry-schema (~> 1.0, >= 1.3.1)
55
- faraday (0.17.0)
52
+ dry-schema (~> 1.5, >= 1.5.2)
53
+ faraday (0.17.4)
56
54
  multipart-post (>= 1.2, < 3)
57
- hashdiff (1.0.0)
55
+ hashdiff (1.0.1)
58
56
  multipart-post (2.1.1)
59
- public_suffix (4.0.1)
60
- rake (10.5.0)
61
- rspec (3.9.0)
62
- rspec-core (~> 3.9.0)
63
- rspec-expectations (~> 3.9.0)
64
- rspec-mocks (~> 3.9.0)
65
- rspec-core (3.9.0)
66
- rspec-support (~> 3.9.0)
67
- rspec-expectations (3.9.0)
57
+ parallel (1.20.1)
58
+ parser (3.0.1.1)
59
+ ast (~> 2.4.1)
60
+ public_suffix (4.0.6)
61
+ rainbow (3.0.0)
62
+ rake (13.0.3)
63
+ regexp_parser (2.1.1)
64
+ rexml (3.2.5)
65
+ rspec (3.10.0)
66
+ rspec-core (~> 3.10.0)
67
+ rspec-expectations (~> 3.10.0)
68
+ rspec-mocks (~> 3.10.0)
69
+ rspec-core (3.10.1)
70
+ rspec-support (~> 3.10.0)
71
+ rspec-expectations (3.10.1)
68
72
  diff-lcs (>= 1.2.0, < 2.0)
69
- rspec-support (~> 3.9.0)
70
- rspec-mocks (3.9.0)
73
+ rspec-support (~> 3.10.0)
74
+ rspec-mocks (3.10.2)
71
75
  diff-lcs (>= 1.2.0, < 2.0)
72
- rspec-support (~> 3.9.0)
73
- rspec-support (3.9.0)
74
- safe_yaml (1.0.5)
75
- webmock (3.7.6)
76
+ rspec-support (~> 3.10.0)
77
+ rspec-support (3.10.2)
78
+ rspec_junit_formatter (0.4.1)
79
+ rspec-core (>= 2, < 4, != 2.12.0)
80
+ rubocop (1.13.0)
81
+ parallel (~> 1.10)
82
+ parser (>= 3.0.0.0)
83
+ rainbow (>= 2.2.2, < 4.0)
84
+ regexp_parser (>= 1.8, < 3.0)
85
+ rexml
86
+ rubocop-ast (>= 1.2.0, < 2.0)
87
+ ruby-progressbar (~> 1.7)
88
+ unicode-display_width (>= 1.4.0, < 3.0)
89
+ rubocop-ast (1.5.0)
90
+ parser (>= 3.0.1.1)
91
+ ruby-progressbar (1.11.0)
92
+ unicode-display_width (2.0.0)
93
+ webmock (3.12.2)
76
94
  addressable (>= 2.3.6)
77
95
  crack (>= 0.3.2)
78
96
  hashdiff (>= 0.4.0, < 2.0.0)
@@ -82,11 +100,13 @@ PLATFORMS
82
100
 
83
101
  DEPENDENCIES
84
102
  bundler (~> 2.0)
85
- byebug (~> 11.0, >= 11.0.1)
103
+ byebug (~> 11.0)
86
104
  fawry!
87
- rake (~> 10.0)
105
+ rake (~> 13.0)
88
106
  rspec (~> 3.0)
89
- webmock (~> 3.7, >= 3.7.6)
107
+ rspec_junit_formatter
108
+ rubocop (~> 1.11)
109
+ webmock (~> 3.12)
90
110
 
91
111
  BUNDLED WITH
92
- 2.0.2
112
+ 2.2.3
data/README-ar.md ADDED
@@ -0,0 +1,181 @@
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
+ _المكتبة تدعم النظام التجريبي لفوري ايضا_
10
+
11
+ ## لإضافة وتشغيل المكتبة
12
+
13
+ أضف هذا السطر إلى ملف Gemfile الخاص بتطبيقك:
14
+
15
+ ```ruby
16
+ gem 'fawry'
17
+ ```
18
+
19
+ ثم نفذ:
20
+
21
+ $ bundle
22
+
23
+ أو قم بتثبيته بنفسك على النحو التالي:
24
+
25
+ $ gem install fawry
26
+
27
+ ## تهيئة فوري للاستخدام
28
+
29
+ لبرنامجك لتهيئة المكتبة `fawry.rb` أضف مهيئ
30
+ ```ruby
31
+ Fawry.configure do |config|
32
+ config.sandbox = Rails.env.staging? ? true : false
33
+ config.fawry_secure_key = 'fawry_secure_key'
34
+ config.fawry_merchant_code = 'fawry_merchant_code'
35
+ end
36
+ ```
37
+ `FAWRY_SANDBOX`, `FAWRY_SECURE_KEY`, `FAWRY_MERCHANT_CODE` _(environment variables)_ او يمكنك بدلا من ذلك، استخدام المتغيرات البيئية
38
+
39
+ ## طريقة الإستعمال
40
+
41
+ ### لإجراء عملية دفع
42
+
43
+ ```ruby
44
+ params = { "merchant_code": 'merchant_code',
45
+ "merchant_ref_num": 'io5jxf3jp27kfh8m719arcqgw7izo7db',
46
+ "customer_profile_id": 'ocvsydvbu2gcp528wvl64i9z5srdalg5',
47
+ "customer_mobile": '012345678901',
48
+ "payment_method": 'PAYATFAWRY',
49
+ "currency_code": 'EGP',
50
+ "amount": 20,
51
+ "fawry_secure_key": 'fawry_secure_key',
52
+ "description": 'the charge request description',
53
+ "charge_items": [{ "item_id": 'fk3fn9flk8et9a5t9w3c5h3oc684ivho',
54
+ "description": 'desc', "price": 20, "quantity": 1 }] }
55
+
56
+ res = Fawry.charge(params)
57
+ # => #<Fawry::FawryResponse:0x0000564257d0ea90 @type="ChargeResponse", @reference_number="931600239",
58
+ # @merchant_ref_number="io5jxf3jp27kfh8m719arcqgw7izo7db",
59
+ # @expiration_time=1573153206979, @status_code=200,
60
+ # @status_description="Operation done successfully">
61
+
62
+ res.success? # => true
63
+ res.reference_number # => 931600239
64
+ ```
65
+
66
+ ### لإجراء عملية استرداد
67
+
68
+ ```ruby
69
+ params = { "merchant_code": 'merchant_code',
70
+ "reference_number": '931337410',
71
+ "refund_amount": 20,
72
+ "fawry_secure_key": 'fawry_secure_key' }
73
+
74
+ res = Fawry.refund(params)
75
+ # => #<Fawry::FawryResponse:0x0000564257d0ea90 @type="ResponseDataModel", @status_code=200,
76
+ # @status_description="Operation done successfully">
77
+
78
+ res.success? # => true
79
+ ```
80
+
81
+ ### حالة الدفع
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)
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
+ ### عرض رموز الكروت
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)
107
+
108
+ #<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">
109
+
110
+ res.success? # => true
111
+ res.cards # => cards
112
+ ```
113
+
114
+ ### إضافة رمز كارت
115
+
116
+ ```ruby
117
+ params = { "merchant_code" : "merchant_code",
118
+ "customer_profile_id" : "customer_profile_id",
119
+ "customer_mobile" : "customer_mobile",
120
+ "customer_email" : "customer_email",
121
+ "card_number" : "card_number",
122
+ "expiry_year" : "expiry_year",
123
+ "expiry_month" : "expiry_month",
124
+ "cvv" : "cvv" }
125
+
126
+ res = Fawry.create_card_token(params)
127
+ #<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"}>
128
+
129
+ res.success?
130
+ res.card
131
+ ```
132
+
133
+ ### حذف رمز كارت
134
+
135
+ ```ruby
136
+ params = { "merchant_code": 'merchant_code',
137
+ "customer_profile_id": 'customer_profile_id',
138
+ "card_token": 'card_token' }
139
+
140
+ res = Fawry.delete_token(params)
141
+ #<Fawry::FawryResponse:0x0000556cb57c2460 @fawry_api_response={"type"=>"CardTokenResponse", "statusCode"=>200, "statusDescription"=>"Operation done successfully"}, @type="CardTokenResponse", @status_code=200, @status_description="Operation done successfully">
142
+ res.success?
143
+
144
+ ```
145
+
146
+ ### رد اتصال خدمة تحليل فوري v2
147
+
148
+ ```ruby
149
+ # تم إرسال المعلمات من خادم فوري
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_callback = Fawry.parse_callback(callback_params)
160
+ # <Fawry::FawryCallback:0x000056339ac43730 @request_id="c72827d084ea4b88949d91dd2db4996e", @fawry_ref_number="970177",
161
+ # @merchant_ref_number="9708f1cea8b5426cb57922df51b7f790", @customer_mobile="01004545545",
162
+ # @customer_mail="fawry@fawry.com", @order_status="NEW", @order_amount=150.0, @fawry_fees=2.0, ...>
163
+
164
+ fawry_callback.fawry_ref_number # => 970177
165
+ fawry_callback.order_status # => NEW
166
+ ```
167
+
168
+ ## الخطوات القادمة المطلوب تنفيذها:
169
+
170
+ - إضافة خيار لرفع الاستثناء عند فشل الطلب
171
+
172
+ ## تطوير المكتبة
173
+
174
+ بعد التحقق من الريبو ، قم بتشغيل `bin/setup` لتثبيت التبعيات.
175
+ ثم نفذ الأمر `rake spec` لإجراء الاختبارات. يمكنك أيضا الجري `bin/console` للمطالبة التفاعلية التي تسمح لك بالتجربة.
176
+
177
+ لتثبيت هذه المكتبة على جهازك ، قم بتشغيل `bundle exec rake install`. لإصدار إصدار جديد ، قم بتحديث رقم الإصدار بتنسيق `version.rb`, ثم نفذ الأمر `bundle exec rake release`, الذي سينشئ علامة git للإصدار ، ويدفع التزامات git والعلامات ، ويدفع ملف `.gem` يا صديق [rubygems.org](https://rubygems.org).
178
+
179
+ ## المساهمة
180
+
181
+ يتم الترحيب بتقارير الأخطاء وطلبات السحب على GitHub في https://github.com/amrrbakry/fawry. يهدف هذا المشروع إلى أن يكون مساحة آمنة ومرحبة للتعاون ، ومن المتوقع أن يلتزم المساهمون بـ [Contributor Covenant](http://contributor-covenant.org) القواعد السلوكية.