fix : sep gateway

This commit is contained in:
2026-01-04 16:23:10 +03:30
parent cf3082e8fb
commit 65cde21802
3 changed files with 7 additions and 10 deletions
+1 -3
View File
@@ -51,8 +51,7 @@ class SepGateway implements IGateway {
RedirectUrl: `${this.callBackURL}${callBackPath}`, RedirectUrl: `${this.callBackURL}${callBackPath}`,
ResNum: Date.now().toString(), ResNum: Date.now().toString(),
CellNumber: _mobile, CellNumber: _mobile,
// GetMethod:true };
};
const response = await axios.post<SepRequestPaymentResponse>(requesturl, purchaseData, { headers: this.requestHeader }); const response = await axios.post<SepRequestPaymentResponse>(requesturl, purchaseData, { headers: this.requestHeader });
const data = response.data; const data = response.data;
@@ -85,7 +84,6 @@ class SepGateway implements IGateway {
if (!this.gatewayApiUrl || !this.terminalNumber) { if (!this.gatewayApiUrl || !this.terminalNumber) {
throw new InternalError(["SEP gateway is not configured"]); throw new InternalError(["SEP gateway is not configured"]);
} }
// https://sep.shaparak.ir/verifyTxnRandomSessionkey/ipg/VerifyTransaction
try { try {
const verifyData = { RefNum: data.refNum, TerminalNumber: this.terminalNumber }; const verifyData = { RefNum: data.refNum, TerminalNumber: this.terminalNumber };
+2 -2
View File
@@ -117,10 +117,10 @@ class PaymentController extends BaseController {
@response() res: Response, @response() res: Response,
@requestBody() dto: VerifyOnlinePaymentDTO, @requestBody() dto: VerifyOnlinePaymentDTO,
) { ) {
console.log("post verify cart checkout", dto); const verifyCallbackData = {
const verifyCallbackData = {
status: dto.Status, status: dto.Status,
refNum: dto.RefNum, refNum: dto.RefNum,
authority: dto.Token,
}; };
const data = await this.paymentService.verifyCartPayment(gateway as GatewayProvider, verifyCallbackData); const data = await this.paymentService.verifyCartPayment(gateway as GatewayProvider, verifyCallbackData);
const html = verifyPaymentTemplate(data); const html = verifyPaymentTemplate(data);
@@ -160,14 +160,11 @@ class PaymentService {
//################################################################## //##################################################################
//################################################################## //##################################################################
//verify callback of cart payment //verify callback of cart payment
async verifyCartPayment(gateway: GatewayProvider, verifyCallbackData: { status: string; authority?: string; refNum?: string }) { async verifyCartPayment(gateway: GatewayProvider, verifyCallbackData: { status: string; authority: string; refNum?: string }) {
const { status, authority, refNum } = verifyCallbackData; const { status, authority, refNum } = verifyCallbackData;
const session = await startSession(); const session = await startSession();
session.startTransaction(); session.startTransaction();
try { try {
// For SEP gateway, refNum is used as authority in database
const authorityToFind = gateway === GatewayProvider.SEP ? refNum : authority;
if (!authorityToFind) throw new BadRequestError(PaymentMessage.PaymentNotFound);
// For SEP gateway, check if refNum has already been used as transaction_id // For SEP gateway, check if refNum has already been used as transaction_id
if (gateway === GatewayProvider.SEP && refNum) { if (gateway === GatewayProvider.SEP && refNum) {
@@ -175,7 +172,7 @@ class PaymentService {
if (existingPayment) throw new BadRequestError(PaymentMessage.RefNumIsAlreadyUsed); if (existingPayment) throw new BadRequestError(PaymentMessage.RefNumIsAlreadyUsed);
} }
const paymentData = await this.cartPaymentRepo.model.findOne({ authority: authorityToFind }).session(session); const paymentData = await this.cartPaymentRepo.model.findOne({ authority }).session(session);
if (!paymentData) throw new BadRequestError(PaymentMessage.PaymentNotFound); if (!paymentData) throw new BadRequestError(PaymentMessage.PaymentNotFound);
@@ -200,6 +197,8 @@ class PaymentService {
: { authority, amount: paymentData.totalPrice }; : { authority, amount: paymentData.totalPrice };
const data = await this.paymentGateway.verifyPayment(gateway, verifyData); const data = await this.paymentGateway.verifyPayment(gateway, verifyData);
console.log("verify payment data**", data);
if (data.code === 100 || data.code === 101) { if (data.code === 100 || data.code === 101) {
await this.handleSellerNotify(order._id, user, session); await this.handleSellerNotify(order._id, user, session);
// For SEP gateway, save refNum as transaction_id; for Zarinpal, save ref_id // For SEP gateway, save refNum as transaction_id; for Zarinpal, save ref_id