lib/portmone/client.rb in portmone-0.0.8 vs lib/portmone/client.rb in portmone-0.0.9
- old
+ new
@@ -1,10 +1,11 @@
module Portmone
class Error < StandardError; end
class Client
- BASE_URL = 'https://www.portmone.com.ua/gateway/'.freeze
+ API_URL = 'https://www.portmone.com.ua/gateway/'.freeze
+ MOBILE_API_URL = 'https://www.portmone.com.ua/r3/api/gateway/'.freeze
def initialize(payee_id:,
login:,
password:,
locale:,
@@ -58,12 +59,51 @@
shop_bill_id: order_id,
return_amount: format_amount(amount),
)
end
- private
+ def google_pay(token:, amount:, order_id:, currency:)
+ google_pay_params = {
+ gPayToken: token,
+ }
+ mobile_pay('GPay', google_pay_params, amount: amount, order_id: order_id, currency: currency)
+ end
+ def apple_pay(token:, amount:, order_id:, currency:, merchant_name:)
+ apple_pay_params = {
+ aPayMerchantName: merchant_name,
+ paymentData: token,
+ }
+ mobile_pay('APay', apple_pay_params, amount: amount, order_id: order_id, currency: currency)
+ end
+
+ private
+
+ def mobile_pay(payment_method, payment_system_params, amount:, order_id:, currency:)
+ order_params = {
+ billAmount: amount,
+ shopOrderNumber: order_id,
+ billCurrency: currency,
+ }
+
+ data = payment_system_params
+ .merge(order_params)
+ .merge(base_params)
+ .keep_if { |_, v| v.present? }
+ params = { params: { data: data }, method: payment_method, id: 1 }
+
+ make_json_request(MOBILE_API_URL, params, Portmone::Responses::MobilePayResponse)
+ end
+
+ def base_params
+ {
+ login: @login,
+ password: @password,
+ payeeId: @payee_id,
+ }
+ end
+
# может возвращать как отдельный заказ по id, так и все заказы с опр. статусом или в опр. временном диапазоне
def generic_report(shop_order_number: nil, status: nil, start_date: nil, end_date: nil)
send_signed_request(
response_class: Portmone::Responses::OrderStatus,
method: 'result',
@@ -102,17 +142,38 @@
))
end
def send_request(**data)
response_class = data.delete(:response_class)
- response = http_client.post(BASE_URL) do |req|
- req.body = data.merge(
- payee_id: @payee_id,
- lang: @locale,
- ).delete_if { |_, v| v.nil? }
+ payload = compact(data.merge(mandatory_params))
+
+ response = http_client.post(API_URL) do |req|
+ req.body = payload
end
response_class.new(response, currency: @currency, timezone: @timezone)
+ end
+
+ def make_json_request(url, params, response_class)
+ conn = Faraday.new(url: url) do |builder|
+ builder.response(:detailed_logger, @logger)
+ builder.adapter Faraday.default_adapter
+ end
+
+ response = conn.post do |request|
+ request.headers['Content-Type'] = 'application/json'
+ request.body = params.to_json
+ end
+
+ response_class.new(response, currency: @currency, timezone: @timezone)
+ end
+
+ def mandatory_params
+ { payee_id: @payee_id, lang: @locale }
+ end
+
+ def compact(**params)
+ params.delete_if { |_, v| v.nil? }
end
def http_client
@http_client ||= Faraday.new do |builder|
builder.request :url_encoded