mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-07 18:54:30 -04:00
update instant payment refs (#80)
This commit is contained in:
parent
dc401a4da6
commit
0b01bacb78
@ -8,6 +8,8 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessAlipay {
|
||||
constructor(key, stripeConnect) {
|
||||
this.key = key;
|
||||
@ -70,7 +72,7 @@ class ProcessAlipay {
|
||||
}
|
||||
}
|
||||
|
||||
wait('#stripe-alipay-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey =
|
||||
document.querySelector('meta[name="stripe-publishable-key"]')
|
||||
?.content ?? '';
|
||||
@ -79,4 +81,6 @@ wait('#stripe-alipay-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessAlipay(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-alipay-payment').then(() => boot());
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { instant, wait } from '../wait';
|
||||
|
||||
/**
|
||||
* @typedef {Object} ApplePayOptions
|
||||
@ -21,7 +21,7 @@ import { wait } from '../wait';
|
||||
* @property {string} client_secret
|
||||
*/
|
||||
|
||||
wait('#stripe-applepay-payment', () => {
|
||||
function boot() {
|
||||
applePay({
|
||||
publishable_key: document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
@ -40,7 +40,9 @@ wait('#stripe-applepay-payment', () => {
|
||||
'meta[name="stripe-client-secret"]'
|
||||
)?.content,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-applepay-payment').then(() => boot());
|
||||
|
||||
/**
|
||||
* @param {ApplePayOptions} options
|
||||
|
8
resources/js/clients/payments/stripe-bacs.js
vendored
8
resources/js/clients/payments/stripe-bacs.js
vendored
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { instant, wait } from '../wait';
|
||||
|
||||
class ProcessBACS {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -77,7 +77,7 @@ class ProcessBACS {
|
||||
}
|
||||
}
|
||||
|
||||
wait('#stripe-bacs-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -88,4 +88,6 @@ wait('#stripe-bacs-payment').then(() => {
|
||||
document.querySelector('meta[name="only-authorization"]')?.content ?? '';
|
||||
|
||||
new ProcessBACS(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-bacs-payment').then(() => boot());
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessBANCONTACTPay {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -65,8 +65,7 @@ class ProcessBANCONTACTPay {
|
||||
};
|
||||
}
|
||||
|
||||
wait('#stripe-bancontact-payment').then(() => {
|
||||
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -75,4 +74,6 @@ wait('#stripe-bancontact-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessBANCONTACTPay(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-bancontact-payment').then(() => boot());
|
||||
|
@ -8,9 +8,9 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
wait('#stripe-bank-transfer-payment').then(() => bankTransfer());
|
||||
instant() ? bankTransfer() : wait('#stripe-bank-transfer-payment').then(() => bankTransfer());
|
||||
|
||||
function bankTransfer() {
|
||||
const secret = document.querySelector('meta[name="stripe-client-secret"]')?.content;
|
||||
|
8
resources/js/clients/payments/stripe-becs.js
vendored
8
resources/js/clients/payments/stripe-becs.js
vendored
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessBECS {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -137,7 +137,7 @@ class ProcessBECS {
|
||||
}
|
||||
}
|
||||
|
||||
wait('#stripe-becs-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -146,4 +146,6 @@ wait('#stripe-becs-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessBECS(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-becs-payment').then(() => boot());
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class StripeBrowserPay {
|
||||
constructor() {
|
||||
@ -144,4 +144,8 @@ class StripeBrowserPay {
|
||||
}
|
||||
}
|
||||
|
||||
wait('#stripe-browserpay-payment').then(() => new StripeBrowserPay().handle())
|
||||
function boot() {
|
||||
new StripeBrowserPay().handle()
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-browserpay-payment').then(() => boot())
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class StripeCreditCard {
|
||||
constructor(key, secret, onlyAuthorization, stripeConnect) {
|
||||
@ -225,7 +225,7 @@ class StripeCreditCard {
|
||||
}
|
||||
}
|
||||
|
||||
wait('#stripe-credit-card-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey =
|
||||
document.querySelector('meta[name="stripe-publishable-key"]')
|
||||
?.content ?? '';
|
||||
@ -248,4 +248,6 @@ wait('#stripe-credit-card-payment').then(() => {
|
||||
);
|
||||
|
||||
s.handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-credit-card-payment').then(() => boot());
|
||||
|
8
resources/js/clients/payments/stripe-eps.js
vendored
8
resources/js/clients/payments/stripe-eps.js
vendored
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessEPSPay {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -82,7 +82,7 @@ class ProcessEPSPay {
|
||||
};
|
||||
}
|
||||
|
||||
wait('#stripe-eps-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -91,4 +91,6 @@ wait('#stripe-eps-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessEPSPay(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-eps-payment').then(() => boot());
|
||||
|
8
resources/js/clients/payments/stripe-fpx.js
vendored
8
resources/js/clients/payments/stripe-fpx.js
vendored
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessFPXPay {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -83,7 +83,7 @@ class ProcessFPXPay {
|
||||
}
|
||||
}
|
||||
|
||||
wait('#stripe-fpx-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -92,4 +92,6 @@ wait('#stripe-fpx-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessFPXPay(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-fpx-payment').then(() => boot());
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessGiroPay {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -66,7 +66,7 @@ class ProcessGiroPay {
|
||||
};
|
||||
}
|
||||
|
||||
wait('#stripe-giropay-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -75,4 +75,6 @@ wait('#stripe-giropay-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessGiroPay(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-giropay-payment').then(() => boot());
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessIDEALPay {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -83,7 +83,7 @@ class ProcessIDEALPay {
|
||||
};
|
||||
}
|
||||
|
||||
wait('#stripe-ideal-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -92,4 +92,6 @@ wait('#stripe-ideal-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessIDEALPay(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-ideal-payment').then(() => boot());
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessKlarna {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -93,7 +93,7 @@ class ProcessKlarna {
|
||||
};
|
||||
}
|
||||
|
||||
wait('#stripe-klarna-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -102,4 +102,6 @@ wait('#stripe-klarna-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessKlarna(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-klarna-payment').then(() => boot());
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessPRZELEWY24 {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -115,7 +115,7 @@ class ProcessPRZELEWY24 {
|
||||
};
|
||||
}
|
||||
|
||||
wait('#stripe-przelewy24-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -124,4 +124,6 @@ wait('#stripe-przelewy24-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessPRZELEWY24(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-przelewy24-payment').then(() => boot());
|
||||
|
8
resources/js/clients/payments/stripe-sepa.js
vendored
8
resources/js/clients/payments/stripe-sepa.js
vendored
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessSEPA {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -235,7 +235,7 @@ class ProcessSEPA {
|
||||
}
|
||||
}
|
||||
|
||||
wait('#stripe-sepa-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey =
|
||||
document.querySelector('meta[name="stripe-publishable-key"]')?.content ??
|
||||
'';
|
||||
@ -244,4 +244,6 @@ wait('#stripe-sepa-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessSEPA(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-sepa-payment').then(() => boot());
|
||||
|
@ -8,7 +8,7 @@
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
import { wait } from '../wait';
|
||||
import { wait, instant } from '../wait';
|
||||
|
||||
class ProcessSOFORT {
|
||||
constructor(key, stripeConnect) {
|
||||
@ -60,7 +60,7 @@ class ProcessSOFORT {
|
||||
};
|
||||
}
|
||||
|
||||
wait('#stripe-sofort-payment').then(() => {
|
||||
function boot() {
|
||||
const publishableKey = document.querySelector(
|
||||
'meta[name="stripe-publishable-key"]'
|
||||
)?.content ?? '';
|
||||
@ -69,4 +69,6 @@ wait('#stripe-sofort-payment').then(() => {
|
||||
document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
|
||||
|
||||
new ProcessSOFORT(publishableKey, stripeConnect).setupStripe().handle();
|
||||
});
|
||||
}
|
||||
|
||||
instant() ? boot() : wait('#stripe-sofort-payment').then(() => boot());
|
||||
|
@ -7,9 +7,10 @@
|
||||
@else
|
||||
<meta name="stripe-publishable-key" content="{{ $gateway->getPublishableKey() }}">
|
||||
@endif
|
||||
|
||||
<meta name="return_url" content="{{ $return_url }}">
|
||||
<meta name="ci_intent" content="{{ $ci_intent }}">
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -1,7 +1,7 @@
|
||||
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Apple Pay', 'card_title' => 'Apple Pay'])
|
||||
|
||||
@section('gateway_head')
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -9,6 +9,7 @@
|
||||
@endif
|
||||
<meta name="only-authorization" content="">
|
||||
<meta name="translation-payment-method-required" content="{{ ctrans('texts.missing_payment_method') }}">
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -17,6 +17,8 @@
|
||||
<meta name="pi-client-secret" content="{{ $pi_client_secret }}">
|
||||
|
||||
<meta name="translation-name-required" content="{{ ctrans('texts.missing_account_holder_name') }}">
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -8,7 +8,7 @@
|
||||
<meta name="stripe-publishable-key" content="{{ $gateway->getPublishableKey() }}">
|
||||
@endif
|
||||
<meta name="viewport" content="width=device-width, minimum-scale=1" />
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -17,6 +17,8 @@
|
||||
<meta name="translation-name-required" content="{{ ctrans('texts.missing_account_holder_name') }}">
|
||||
<meta name="translation-email-required" content="{{ ctrans('texts.provide_email') }}">
|
||||
<meta name="translation-terms-required" content="{{ ctrans('texts.you_need_to_accept_the_terms_before_proceeding') }}">
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -11,6 +11,8 @@
|
||||
<meta name="stripe-pi-client-secret" content="{{ $pi_client_secret }}">
|
||||
<meta name="no-available-methods" content="{{ json_encode(ctrans('texts.no_available_methods')) }}">
|
||||
<meta name="payment-request-data" content="{{ json_encode($payment_request_data) }}">
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -27,6 +27,8 @@
|
||||
<meta name="only-authorization" content="">
|
||||
<meta name="client-postal-code" content="{{ $client->postal_code ?? '' }}">
|
||||
<meta name="stripe-require-postal-code" content="{{ $gateway->company_gateway->require_postal_code }}">
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -16,6 +16,7 @@
|
||||
<meta name="pi-client-secret" content="{{ $pi_client_secret }}">
|
||||
|
||||
<meta name="translation-name-required" content="{{ ctrans('texts.missing_account_holder_name') }}">
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -14,6 +14,8 @@
|
||||
<meta name="country" content="{{ $country }}">
|
||||
<meta name="customer" content="{{ $customer }}">
|
||||
<meta name="pi-client-secret" content="{{ $pi_client_secret }}">
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -14,6 +14,7 @@
|
||||
<meta name="pi-client-secret" content="{{ $pi_client_secret }}">
|
||||
|
||||
<meta name="translation-terms-required" content="{{ ctrans('texts.you_need_to_accept_the_terms_before_proceeding') }}">
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -14,6 +14,7 @@
|
||||
<meta name="pi-client-secret" content="{{ $pi_client_secret }}">
|
||||
|
||||
<meta name="translation-name-required" content="{{ ctrans('texts.missing_account_holder_name') }}">
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -19,6 +19,7 @@
|
||||
<meta name="postal_code" content="{{ $gateway->client->postal_code }}">
|
||||
<meta name="pi-client-secret" content="{{ $pi_client_secret }}">
|
||||
<meta name="translation-name-without-special-characters" content="{{ ctrans('texts.name_without_special_characters') }}">
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -16,6 +16,7 @@
|
||||
<meta name="translation-name-required" content="{{ ctrans('texts.missing_account_holder_name') }}">
|
||||
<meta name="translation-email-required" content="{{ ctrans('texts.provide_email') }}">
|
||||
<meta name="translation-terms-required" content="{{ ctrans('texts.you_need_to_accept_the_terms_before_proceeding') }}">
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -18,6 +18,8 @@
|
||||
<meta name="translation-name-required" content="{{ ctrans('texts.missing_account_holder_name') }}">
|
||||
<meta name="translation-email-required" content="{{ ctrans('texts.provide_email') }}">
|
||||
<meta name="translation-terms-required" content="{{ ctrans('texts.you_need_to_accept_the_terms_before_proceeding') }}">
|
||||
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
@ -15,6 +15,7 @@
|
||||
<meta name="country" content="{{ $country }}">
|
||||
<meta name="customer" content="{{ $customer }}">
|
||||
<meta name="pi-client-secret" content="{{ $pi_client_secret }}">
|
||||
<meta name="instant-payment" content="yes" />
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
|
Loading…
x
Reference in New Issue
Block a user