diff --git a/app/PaymentDrivers/Razorpay/Hosted.php b/app/PaymentDrivers/Razorpay/Hosted.php
index 2a8c35bafc1f..9003349cb77e 100644
--- a/app/PaymentDrivers/Razorpay/Hosted.php
+++ b/app/PaymentDrivers/Razorpay/Hosted.php
@@ -19,6 +19,7 @@ use App\Models\GatewayType;
use App\Models\Payment;
use App\Models\PaymentType;
use App\Models\SystemLog;
+use App\PaymentDrivers\Common\LivewireMethodInterface;
use App\PaymentDrivers\Common\MethodInterface;
use App\PaymentDrivers\RazorpayPaymentDriver;
use Illuminate\Http\RedirectResponse;
@@ -26,7 +27,7 @@ use Illuminate\Http\Request;
use Illuminate\View\View;
use Razorpay\Api\Errors\SignatureVerificationError;
-class Hosted implements MethodInterface
+class Hosted implements MethodInterface, LivewireMethodInterface
{
protected RazorpayPaymentDriver $razorpay;
@@ -67,23 +68,7 @@ class Hosted implements MethodInterface
*/
public function paymentView(array $data): View
{
- $order = $this->razorpay->gateway->order->create([
- 'currency' => $this->razorpay->client->currency()->code,
- 'amount' => $this->razorpay->convertToRazorpayAmount((float) $this->razorpay->payment_hash->data->amount_with_fee),
- ]);
-
- $this->razorpay->payment_hash->withData('order_id', $order->id);
- $this->razorpay->payment_hash->withData('order_amount', $order->amount);
-
- $data['gateway'] = $this->razorpay;
-
- $data['options'] = [
- 'key' => $this->razorpay->company_gateway->getConfigField('apiKey'),
- 'amount' => $this->razorpay->convertToRazorpayAmount((float) $this->razorpay->payment_hash->data->amount_with_fee),
- 'currency' => $this->razorpay->client->currency()->code,
- 'name' => $this->razorpay->company_gateway->company->present()->name(),
- 'order_id' => $order->id,
- ];
+ $data = $this->paymentData($data);
return render('gateways.razorpay.hosted.pay', $data);
}
@@ -174,4 +159,38 @@ class Hosted implements MethodInterface
throw new PaymentFailed($exception->getMessage(), $exception->getCode());
}
+
+ /**
+ * @inheritDoc
+ */
+ public function livewirePaymentView(array $data): string
+ {
+ return 'gateways.razorpay.hosted.pay_livewire';
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function paymentData(array $data): array
+ {
+ $order = $this->razorpay->gateway->order->create([
+ 'currency' => $this->razorpay->client->currency()->code,
+ 'amount' => $this->razorpay->convertToRazorpayAmount((float) $this->razorpay->payment_hash->data->amount_with_fee),
+ ]);
+
+ $this->razorpay->payment_hash->withData('order_id', $order->id);
+ $this->razorpay->payment_hash->withData('order_amount', $order->amount);
+
+ $data['gateway'] = $this->razorpay;
+
+ $data['options'] = [
+ 'key' => $this->razorpay->company_gateway->getConfigField('apiKey'),
+ 'amount' => $this->razorpay->convertToRazorpayAmount((float) $this->razorpay->payment_hash->data->amount_with_fee),
+ 'currency' => $this->razorpay->client->currency()->code,
+ 'name' => $this->razorpay->company_gateway->company->present()->name(),
+ 'order_id' => $order->id,
+ ];
+
+ return $data;
+ }
}
diff --git a/resources/js/clients/payments/razorpay-aio.js b/resources/js/clients/payments/razorpay-aio.js
index 4097b07fcbf9..42e8ae1313d1 100644
--- a/resources/js/clients/payments/razorpay-aio.js
+++ b/resources/js/clients/payments/razorpay-aio.js
@@ -8,29 +8,35 @@
* @license https://www.elastic.co/licensing/elastic-license
*/
-let options = JSON.parse(
- document.querySelector('meta[name=razorpay-options]')?.content
-);
+import { wait, instant } from '../wait';
-options.handler = function (response) {
- document.getElementById('razorpay_payment_id').value =
- response.razorpay_payment_id;
- document.getElementById('razorpay_signature').value =
- response.razorpay_signature;
- document.getElementById('server-response').submit();
-};
+function boot() {
+ let options = JSON.parse(
+ document.querySelector('meta[name=razorpay-options]')?.content
+ );
+
+ options.handler = function (response) {
+ document.getElementById('razorpay_payment_id').value =
+ response.razorpay_payment_id;
+ document.getElementById('razorpay_signature').value =
+ response.razorpay_signature;
+ document.getElementById('server-response').submit();
+ };
+
+ options.modal = {
+ ondismiss: function () {
+ payNowButton.disabled = false;
+ },
+ };
+
+ let razorpay = new Razorpay(options);
+ let payNowButton = document.getElementById('pay-now');
+
+ payNowButton.onclick = function (event) {
+ payNowButton.disabled = true;
+
+ razorpay.open();
+ };
+}
-options.modal = {
- ondismiss: function () {
- payNowButton.disabled = false;
- },
-};
-
-let razorpay = new Razorpay(options);
-let payNowButton = document.getElementById('pay-now');
-
-payNowButton.onclick = function (event) {
- payNowButton.disabled = true;
-
- razorpay.open();
-};
+instant() ? boot() : wait('#razorpay-hosted-payment').then(() => boot());
diff --git a/resources/views/portal/ninja2020/gateways/razorpay/hosted/pay.blade.php b/resources/views/portal/ninja2020/gateways/razorpay/hosted/pay.blade.php
index c5c130ef84cf..1da5150f4aa7 100644
--- a/resources/views/portal/ninja2020/gateways/razorpay/hosted/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/razorpay/hosted/pay.blade.php
@@ -3,6 +3,7 @@ ctrans('texts.aio_checkout')])
@section('gateway_head')
+
@endsection
@section('gateway_content')