diff --git a/app/controllers/foodcourt/qrpay_controller.rb b/app/controllers/foodcourt/qrpay_controller.rb index f669f4e1..db10034f 100644 --- a/app/controllers/foodcourt/qrpay_controller.rb +++ b/app/controllers/foodcourt/qrpay_controller.rb @@ -241,6 +241,17 @@ class Foodcourt::QrpayController < BaseFoodcourtController PrintReceiptJob.perform_later(current_shop.shop_code, sale_id) + PaymentGatewayAuditJob.perform_later({ + receipt_no: Sale.find_by(sale_id: sale_id).receipt_no, + gateway_name: "MMQR", + endpoint_url: "", + event_type: "kbz.payment.success", + request_body: {}, + response_body: {}, + request_method: nil, + shop_code: Shop.current_shop.shop_code + }) + if result[:status] render json: result, status: :ok else diff --git a/app/jobs/payment_gateway_audit_job.rb b/app/jobs/payment_gateway_audit_job.rb new file mode 100644 index 00000000..3cf373b7 --- /dev/null +++ b/app/jobs/payment_gateway_audit_job.rb @@ -0,0 +1,17 @@ +class PaymentGatewayAuditJob < ApplicationJob + queue_as :high_priority + + def perform(data) + # byebug + PaymentGatewayAudit.record( + receipt_no: data[:receipt_no], + gateway_name: "MMQR", + endpoint_url: data[:endpoint_url], + event_type: data[:event_type], + request_body: data[:request_body], + response_body: data[:response_body], + request_method: "POST", + shop_code: data[:shop_code], + ) + end +end diff --git a/app/models/payment_gateway_audit.rb b/app/models/payment_gateway_audit.rb new file mode 100644 index 00000000..a53b79a0 --- /dev/null +++ b/app/models/payment_gateway_audit.rb @@ -0,0 +1,24 @@ +class PaymentGatewayAudit < ApplicationRecord + def self.record( + receipt_no:, + gateway_name:, + request_method: nil, + endpoint_url:, + event_type:, + request_body: {}, + response_body: {}, + shop_code: + ) + payment_gateway_audit = PaymentGatewayAudit.new + payment_gateway_audit.receipt_no = receipt_no + payment_gateway_audit.payment_gateway_name = gateway_name + payment_gateway_audit.event_type = event_type + payment_gateway_audit.request_method = request_method + payment_gateway_audit.endpoint_url = endpoint_url + payment_gateway_audit.request_body = request_body + payment_gateway_audit.response_body = response_body + payment_gateway_audit.shop_code = shop_code + + payment_gateway_audit.save! + end +end diff --git a/app/services/kbz_merchant.rb b/app/services/kbz_merchant.rb index 2e8fff2f..b5d51c6e 100644 --- a/app/services/kbz_merchant.rb +++ b/app/services/kbz_merchant.rb @@ -16,6 +16,19 @@ class KbzMerchant api_url = "#{@url}/precreate" payload = build_create_payload(amount, merch_order_id, timeout) response = send_request(payload, api_url) + + # audit + PaymentGatewayAuditJob.perform_later({ + receipt_no: merch_order_id, + gateway_name: "MMQR", + endpoint_url: api_url, + event_type: "kbz.payment.precreate", + request_body: payload, + response_body: response, + request_method: "POST", + shop_code: Shop.current_shop.shop_code + }) + handle_response(response) end @@ -23,6 +36,19 @@ class KbzMerchant api_url = "#{@url}/closeorder" payload = build_close_payload(merch_order_id) response = send_request(payload, api_url) + + # audit + PaymentGatewayAuditJob.perform_later({ + receipt_no: merch_order_id, + gateway_name: "MMQR", + endpoint_url: api_url, + event_type: "kbz.payment.closeorder", + request_body: payload, + response_body: response, + request_method: "POST", + shop_code: Shop.current_shop.shop_code + }) + handle_response(response) end diff --git a/db/migrate/20250609101022_payment_gateway_audits.rb b/db/migrate/20250609101022_payment_gateway_audits.rb new file mode 100644 index 00000000..b5412f1c --- /dev/null +++ b/db/migrate/20250609101022_payment_gateway_audits.rb @@ -0,0 +1,17 @@ +class PaymentGatewayAudits < ActiveRecord::Migration[5.1] + def change + create_table :payment_gateway_audits do |t| + t.string :receipt_no + t.string :payment_gateway_name + t.string :request_method + t.string :event_type + t.string :endpoint_url + t.json :request_body + t.json :response_body + + t.timestamps + + t.string :shop_code + end + end +end