Class: Vpago::PaymentRedirectHandler
- Inherits:
-
Object
- Object
- Vpago::PaymentRedirectHandler
- Includes:
- ActiveModel::Serialization
- Defined in:
- app/services/vpago/payment_redirect_handler.rb
Instance Attribute Summary collapse
-
#action_url ⇒ Object
readonly
Returns the value of attribute action_url.
-
#error_message ⇒ Object
Returns the value of attribute error_message.
-
#gateway_params ⇒ Object
readonly
Returns the value of attribute gateway_params.
-
#override_return_deeplink_url ⇒ Object
readonly
Returns the value of attribute override_return_deeplink_url.
-
#payment ⇒ Object
readonly
Returns the value of attribute payment.
-
#redirect_options ⇒ Object
Returns the value of attribute redirect_options.
-
#vapgo_checkout_service ⇒ Object
readonly
Returns the value of attribute vapgo_checkout_service.
Instance Method Summary collapse
- #check_and_process_payment ⇒ Object
-
#initialize(payment:, override_return_deeplink_url: nil) ⇒ PaymentRedirectHandler
constructor
A new instance of PaymentRedirectHandler.
- #payment_method ⇒ Object
- #payment_method_type ⇒ Object
- #payment_valid ⇒ Object
- #process ⇒ Object
- #process_aba_gateway ⇒ Object
- #process_aba_v2_gateway ⇒ Object
- #process_abapay_deeplink ⇒ Object
- #process_abapay_v2_deeplink ⇒ Object
- #process_acleda_gateway ⇒ Object
- #process_acleda_mobile ⇒ Object
- #process_payway_card ⇒ Object
- #process_payway_v2_card ⇒ Object
- #process_wing_gateway ⇒ Object
- #send_process_payment ⇒ Object
- #send_process_payway_v2_payment ⇒ Object
- #validate_payment ⇒ Object
Constructor Details
#initialize(payment:, override_return_deeplink_url: nil) ⇒ PaymentRedirectHandler
Returns a new instance of PaymentRedirectHandler.
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 15 def initialize(payment:, override_return_deeplink_url: nil) @payment = payment @override_return_deeplink_url = override_return_deeplink_url @vapgo_checkout_service = payment.payment_method.vapgo_checkout_service.presence&.new( payment, { override_return_deeplink_url: override_return_deeplink_url } ) @gateway_params = vapgo_checkout_service&.gateway_params @action_url = vapgo_checkout_service&.action_url end |
Instance Attribute Details
#action_url ⇒ Object (readonly)
Returns the value of attribute action_url.
8 9 10 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 8 def action_url @action_url end |
#error_message ⇒ Object
Returns the value of attribute error_message.
7 8 9 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 7 def @error_message end |
#gateway_params ⇒ Object (readonly)
Returns the value of attribute gateway_params.
8 9 10 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 8 def gateway_params @gateway_params end |
#override_return_deeplink_url ⇒ Object (readonly)
Returns the value of attribute override_return_deeplink_url.
8 9 10 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 8 def override_return_deeplink_url @override_return_deeplink_url end |
#payment ⇒ Object (readonly)
Returns the value of attribute payment.
8 9 10 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 8 def payment @payment end |
#redirect_options ⇒ Object
Returns the value of attribute redirect_options.
7 8 9 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 7 def @redirect_options end |
#vapgo_checkout_service ⇒ Object (readonly)
Returns the value of attribute vapgo_checkout_service.
8 9 10 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 8 def vapgo_checkout_service @vapgo_checkout_service end |
Instance Method Details
#check_and_process_payment ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 35 def check_and_process_payment @payment.process! if payment_method.type_payway_v2? process_aba_v2_gateway elsif payment_method.type_payway? process_aba_gateway elsif payment_method.type_wingsdk? process_wing_gateway elsif payment_method.type_acleda? process_acleda_gateway elsif payment_method.type_acleda_mobile? process_acleda_mobile end end |
#payment_method ⇒ Object
182 183 184 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 182 def payment_method @payment.payment_method end |
#payment_method_type ⇒ Object
186 187 188 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 186 def payment_method_type payment_method.type end |
#payment_valid ⇒ Object
190 191 192 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 190 def payment_valid !::Spree::Payment::INVALID_STATES.include?(@payment.state) end |
#process ⇒ Object
28 29 30 31 32 33 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 28 def process validate_payment check_and_process_payment self end |
#process_aba_gateway ⇒ Object
122 123 124 125 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 122 def process_aba_gateway payment_option = @payment.payment_method.preferences[:payment_option] payment_option == 'abapay' ? process_abapay_deeplink : process_payway_card end |
#process_aba_v2_gateway ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 66 def process_aba_v2_gateway payment_option = @payment.payment_method.preferences[:payment_option] if %w[abapay abapay_khqr_deeplink].include?(payment_option) process_abapay_v2_deeplink else # construct web url for render web view. # same implementation for alipay, wechat, cards, abapay_khqr. # - for abapay_khqr: in web view, it renders QR then request to open intent://ababank.com?... for app to open ABA app. # - for others: it only renders QR process_payway_v2_card end end |
#process_abapay_deeplink ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 144 def process_abapay_deeplink send_process_payment return unless @response.status == 200 json_response = JSON.parse(@response.body) if json_response['status'] == '0' @redirect_options = json_response else @error_message = json_response['description'] end end |
#process_abapay_v2_deeplink ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 90 def process_abapay_v2_deeplink response = send_process_payway_v2_payment return unless response.status == 200 json_response = JSON.parse(response.body) if json_response['status']['code'] == '00' @redirect_options = json_response else @error_message = json_response['description'] end end |
#process_acleda_gateway ⇒ Object
51 52 53 54 55 56 57 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 51 def process_acleda_gateway data = { href: "#{ENV.fetch('DEFAULT_URL_HOST', nil)}/acleda_redirects?payment_number=#{@payment.number}" } @redirect_options = data end |
#process_acleda_mobile ⇒ Object
59 60 61 62 63 64 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 59 def process_acleda_mobile service = Vpago::AcledaMobile::Checkout.new(@payment) service.call @redirect_options = service.results end |
#process_payway_card ⇒ Object
127 128 129 130 131 132 133 134 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 127 def process_payway_card ## TO DO: generate redirect url data = { href: "#{ENV.fetch('DEFAULT_URL_HOST', nil)}/payway_card_popups?payment_number=#{@payment.number}" } @redirect_options = data end |
#process_payway_v2_card ⇒ Object
81 82 83 84 85 86 87 88 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 81 def process_payway_v2_card ## TO DO: generate redirect url data = { href: "#{ENV.fetch('DEFAULT_URL_HOST', nil)}/payway_v2_card_popups?payment_number=#{@payment.number}" } @redirect_options = data end |
#process_wing_gateway ⇒ Object
136 137 138 139 140 141 142 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 136 def process_wing_gateway data = { href: "#{ENV.fetch('DEFAULT_URL_HOST', nil)}/wing_redirects?payment_number=#{@payment.number}" } @redirect_options = data end |
#send_process_payment ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 158 def send_process_payment = { app_checkout: true } abapay_payment = ::Vpago::Payway::Checkout.new(@payment, ) gateway_params = abapay_payment.gateway_params gateway_params[:payment_option] = 'abapay_deeplink' conn = Faraday::Connection.new do |faraday| faraday.request :url_encoded end @response = conn.post(abapay_payment.action_url, gateway_params) do |request| request.headers['Referer'] = ENV.fetch('DEFAULT_URL_HOST', nil) end end |
#send_process_payway_v2_payment ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 104 def send_process_payway_v2_payment = { app_checkout: true, override_return_deeplink_url: } abapay_payment = ::Vpago::PaywayV2::Checkout.new(@payment, ) gateway_params = abapay_payment.gateway_params conn = Faraday::Connection.new do |faraday| faraday.request :url_encoded end conn.post(abapay_payment.checkout_url, gateway_params) do |request| request.headers['Referer'] = ENV.fetch('DEFAULT_URL_HOST', nil) end end |
#validate_payment ⇒ Object
176 177 178 179 180 |
# File 'app/services/vpago/payment_redirect_handler.rb', line 176 def validate_payment raise ActiveRecord::RecordNotFound if !payment_valid || !payment_method.vpago_payment? true end |