Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
93f1a04
implemented initial razorpay payments
on3ss Jan 15, 2026
b7ec9bb
better razorpay checkout UI
on3ss Jan 15, 2026
1950563
refactored razorpay payment flow to better match stripe implementation
on3ss Jan 23, 2026
4dafc1c
add todo: support razorpay for saas mode
on3ss Jan 27, 2026
e5672bf
cleanup
on3ss Jan 27, 2026
01f6f86
disabled application fee calculation on razorpay payments for now
on3ss Feb 10, 2026
5111422
Update backend/app/Services/Application/Handlers/Order/Payment/Razorp…
on3ss Feb 18, 2026
ead73ce
added webhook_secret to services.razorpay config
on3ss Feb 18, 2026
b07d916
initialized required razorpay key:value pairs in .env.example for ref…
on3ss Feb 18, 2026
2141e71
added VerifyPaymentDTO and updated related usage
on3ss Feb 23, 2026
b3179f9
renamed variable for paymentData to verifyRazorpayPaymentData
on3ss Feb 23, 2026
4b90cba
fixed VerifyRazorpayPaymentDTO namespace
on3ss Feb 23, 2026
1104e9c
added verification form request
on3ss Feb 23, 2026
9c23bc9
used new form request in razorpay payment verification
on3ss Feb 23, 2026
c46b530
distinct tab and condition for stripe and razorpay in payment selection
on3ss Feb 23, 2026
aa9c5e9
move DTO
on3ss Feb 23, 2026
9482c95
webhook handler for order.paid implemented
on3ss Feb 23, 2026
8f41af1
implemented webhook for payment.authorized, payment.captured, payment…
on3ss Feb 24, 2026
653a33a
implemented refund.processed event in razorpay webhook
on3ss Feb 24, 2026
659f0c1
fixed conditional bug razorpay
on3ss Feb 24, 2026
635b93a
refactored RazorpayClient for better testability
on3ss Feb 26, 2026
f3654ef
add test for razorpay client factory
on3ss Mar 2, 2026
04190c3
added test for razorpay client factory and client implementation
on3ss Mar 3, 2026
12d6364
test cleanup
on3ss Mar 3, 2026
4f7f08f
cleanup
on3ss Mar 3, 2026
c0b1376
added test for RazorpayOrderCreationService
on3ss Mar 3, 2026
24d958d
removed redundant CreateRazorpayOrderResponseDTO creation for return …
on3ss Mar 3, 2026
1f1fa4a
added test RazorpayPaymentCapturedHandlerTest
on3ss Mar 3, 2026
1550be7
added test RazorpayOrderPaidHandlerTest
on3ss Mar 3, 2026
f8381a6
added test RazorpayRefundHandlerTest
on3ss Mar 3, 2026
ecdd395
added test RazorpayPaymentFailedHandlerTest
on3ss Mar 3, 2026
d795b9d
added test RazorpayPaymentAuthorizedHandlerTest
on3ss Mar 3, 2026
ef3af01
added test RazorpayPaymentVerificationServiceTest
on3ss Mar 3, 2026
0dbdb7d
added test RazorpayWebhookHandlerTest
on3ss Mar 3, 2026
490ed52
resolve merge conflict
on3ss Mar 5, 2026
5b9f583
fixed direct usage of config helper instead of the injected
on3ss Mar 5, 2026
427ffde
implemented client refund method with tests
on3ss Mar 6, 2026
138d57f
added RazorpayPaymentRefundService with tests
on3ss Mar 6, 2026
bd79515
moved and refactored refund handler to support razorpay
on3ss Mar 6, 2026
97327d1
added idempotent refund service
on3ss Mar 6, 2026
40077b3
implemented repository and tests and displayed refund option in UI
on3ss Mar 6, 2026
f110738
update refund_status and total_refunded instead of payment_status in …
on3ss Mar 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions backend/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ STRIPE_PUBLIC_KEY=
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=

RAZORPAY_KEY_ID=
RAZORPAY_KEY_SECRET=
RAZORPAY_WEBHOOK_SECRET=
RAZORPAY_APPLICATION_FEE_ENABLED=
RAZORPAY_PLATFORM_ACCOUNT_ID=

CORS_ALLOWED_ORIGINS=*

LOG_CHANNEL=stderr
Expand Down
1 change: 1 addition & 0 deletions backend/app/DomainObjects/Enums/PaymentProviders.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ enum PaymentProviders: string
use BaseEnum;

case STRIPE = 'STRIPE';
case RAZORPAY = 'RAZORPAY';
case OFFLINE = 'OFFLINE';
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
<?php

namespace HiEvents\DomainObjects\Generated;

/**
* THIS FILE IS AUTOGENERATED - DO NOT EDIT IT DIRECTLY.
* @package HiEvents\DomainObjects\Generated
*/
abstract class RazorpayOrderDomainObjectAbstract extends \HiEvents\DomainObjects\AbstractDomainObject
{
final public const SINGULAR_NAME = 'razorpay_order';
final public const PLURAL_NAME = 'razorpay_orders';
final public const ID = 'id';
final public const ORDER_ID = 'order_id';
final public const RAZORPAY_ORDER_ID = 'razorpay_order_id';
final public const RAZORPAY_PAYMENT_ID = 'razorpay_payment_id';
final public const RAZORPAY_SIGNATURE = 'razorpay_signature';
final public const METHOD = 'method';
final public const FEE = 'fee';
final public const TAX = 'tax';
final public const AMOUNT = 'amount';
final public const CURRENCY = 'currency';
final public const RECEIPT = 'receipt';
final public const STATUS = 'status';
final public const FAILURE_REASON = 'failure_reason';
final public const ERROR_CODE = 'error_code';
final public const CREATED_AT = 'created_at';
final public const UPDATED_AT = 'updated_at';

protected int $id;
protected int $order_id;
protected string $razorpay_order_id;
protected ?string $razorpay_payment_id = null;
protected ?string $razorpay_signature = null;
protected ?string $method = null;
protected ?int $fee = null;
protected ?int $tax = null;
protected int $amount;
protected string $currency;
protected ?string $receipt = null;
protected string $status = 'created';
protected ?string $failure_reason = null;
protected ?string $error_code = null;
protected ?string $created_at = null;
protected ?string $updated_at = null;

public function toArray(): array
{
return [
'id' => $this->id ?? null,
'order_id' => $this->order_id ?? null,
'razorpay_order_id' => $this->razorpay_order_id ?? null,
'razorpay_payment_id' => $this->razorpay_payment_id ?? null,
'razorpay_signature' => $this->razorpay_signature ?? null,
'method' => $this->method ?? null,
'fee' => $this->fee ?? null,
'tax' => $this->tax ?? null,
'amount' => $this->amount ?? null,
'currency' => $this->currency ?? null,
'receipt' => $this->receipt ?? null,
'status' => $this->status ?? null,
'failure_reason' => $this->failure_reason ?? null,
'error_code' => $this->error_code ?? null,
'created_at' => $this->created_at ?? null,
'updated_at' => $this->updated_at ?? null,
];
}

public function setId(int $id): self
{
$this->id = $id;
return $this;
}

public function getId(): int
{
return $this->id;
}

public function setOrderId(int $order_id): self
{
$this->order_id = $order_id;
return $this;
}

public function getOrderId(): int
{
return $this->order_id;
}

public function setRazorpayOrderId(string $razorpay_order_id): self
{
$this->razorpay_order_id = $razorpay_order_id;
return $this;
}

public function getRazorpayOrderId(): string
{
return $this->razorpay_order_id;
}

public function setRazorpayPaymentId(?string $razorpay_payment_id): self
{
$this->razorpay_payment_id = $razorpay_payment_id;
return $this;
}

public function getRazorpayPaymentId(): ?string
{
return $this->razorpay_payment_id;
}

public function setRazorpaySignature(?string $razorpay_signature): self
{
$this->razorpay_signature = $razorpay_signature;
return $this;
}

public function getRazorpaySignature(): ?string
{
return $this->razorpay_signature;
}

public function setMethod(?string $method): self
{
$this->method = $method;
return $this;
}

public function getMethod(): ?string
{
return $this->method;
}

public function setFee(?int $fee): self
{
$this->fee = $fee;
return $this;
}

public function getFee(): ?int
{
return $this->fee;
}

public function setTax(?int $tax): self
{
$this->tax = $tax;
return $this;
}

public function getTax(): ?int
{
return $this->tax;
}

public function setAmount(int $amount): self
{
$this->amount = $amount;
return $this;
}

public function getAmount(): int
{
return $this->amount;
}

public function setCurrency(string $currency): self
{
$this->currency = $currency;
return $this;
}

public function getCurrency(): string
{
return $this->currency;
}

public function setReceipt(?string $receipt): self
{
$this->receipt = $receipt;
return $this;
}

public function getReceipt(): ?string
{
return $this->receipt;
}

public function setStatus(string $status): self
{
$this->status = $status;
return $this;
}

public function getStatus(): string
{
return $this->status;
}

public function setFailureReason(?string $failure_reason): self
{
$this->failure_reason = $failure_reason;
return $this;
}

public function getFailureReason(): ?string
{
return $this->failure_reason;
}

public function setErrorCode(?string $error_code): self
{
$this->error_code = $error_code;
return $this;
}

public function getErrorCode(): ?string
{
return $this->error_code;
}

public function setCreatedAt(?string $created_at): self
{
$this->created_at = $created_at;
return $this;
}

public function getCreatedAt(): ?string
{
return $this->created_at;
}

public function setUpdatedAt(?string $updated_at): self
{
$this->updated_at = $updated_at;
return $this;
}

public function getUpdatedAt(): ?string
{
return $this->updated_at;
}
}
Loading
Loading