fix: midtrans error total != qty * price
parent
1e8a07ec55
commit
bcdf656d5d
|
@ -1,14 +1,14 @@
|
||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { EventBus } from '@nestjs/cqrs';
|
import { EventBus } from '@nestjs/cqrs';
|
||||||
import { mappingMidtransTransaction } from '../../domain/usecases/helpers/mapping-transaction.helper';
|
import { mappingMidtransTransaction } from '../../domain/usecases/helpers/mapping-transaction.helper';
|
||||||
const midtransClient = require('midtrans-client');
|
import { Snap } from 'midtrans-client';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MidtransService {
|
export class MidtransService {
|
||||||
constructor(private eventBus: EventBus) {}
|
constructor(private eventBus: EventBus) {}
|
||||||
|
|
||||||
get midtransInstance() {
|
get midtransInstance() {
|
||||||
return new midtransClient.Snap({
|
return new Snap({
|
||||||
isProduction: false,
|
isProduction: false,
|
||||||
serverKey: process.env.MIDTRANS_SERVER_KEY,
|
serverKey: process.env.MIDTRANS_SERVER_KEY,
|
||||||
clientKey: process.env.MIDTRANS_CLIENT_KEY,
|
clientKey: process.env.MIDTRANS_CLIENT_KEY,
|
||||||
|
@ -19,6 +19,10 @@ export class MidtransService {
|
||||||
return await this.midtransInstance.transaction.status(orderId);
|
return await this.midtransInstance.transaction.status(orderId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async cancelOrder(orderId: string): Promise<any> {
|
||||||
|
return await this.midtransInstance.transaction.cancel(orderId);
|
||||||
|
}
|
||||||
|
|
||||||
async create(body): Promise<any> {
|
async create(body): Promise<any> {
|
||||||
const data = mappingMidtransTransaction(body);
|
const data = mappingMidtransTransaction(body);
|
||||||
return await this.midtransInstance.createTransaction(data);
|
return await this.midtransInstance.createTransaction(data);
|
||||||
|
|
|
@ -2,7 +2,7 @@ export function mappingMidtransTransaction(transaction) {
|
||||||
const item_details = transaction.items?.map((item) => {
|
const item_details = transaction.items?.map((item) => {
|
||||||
return {
|
return {
|
||||||
quantity: Number(item.qty),
|
quantity: Number(item.qty),
|
||||||
price: Number(item.total_price),
|
price: Number(item.total_price) / Number(item.qty),
|
||||||
name: item.item_name,
|
name: item.item_name,
|
||||||
category: item.item_category_name,
|
category: item.item_category_name,
|
||||||
};
|
};
|
||||||
|
|
|
@ -34,6 +34,17 @@ export class MidtransController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Get(':id/cancel')
|
||||||
|
async cancel(@Param('id') id: string) {
|
||||||
|
try {
|
||||||
|
const data = await this.dataService.cancelOrder(id);
|
||||||
|
return data;
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error.message);
|
||||||
|
throw new Error('Gagal update status transaksi');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Post('callback')
|
@Post('callback')
|
||||||
async callback(@Body() callback: MidtransDto) {
|
async callback(@Body() callback: MidtransDto) {
|
||||||
const data = await this.dataService.getStatus(callback?.order_id);
|
const data = await this.dataService.getStatus(callback?.order_id);
|
||||||
|
|
|
@ -14,6 +14,7 @@ import { TransactionChangeStatusEvent } from '../../entities/event/transaction-c
|
||||||
import { STATUS } from 'src/core/strings/constants/base.constants';
|
import { STATUS } from 'src/core/strings/constants/base.constants';
|
||||||
import { generateInvoiceCodeHelper } from './helpers/generate-invoice-code.helper';
|
import { generateInvoiceCodeHelper } from './helpers/generate-invoice-code.helper';
|
||||||
import { TransactionPaymentType } from '../../../constants';
|
import { TransactionPaymentType } from '../../../constants';
|
||||||
|
import { apm } from 'src/core/apm';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ConfirmTransactionManager extends BaseUpdateStatusManager<TransactionEntity> {
|
export class ConfirmTransactionManager extends BaseUpdateStatusManager<TransactionEntity> {
|
||||||
|
@ -47,6 +48,7 @@ export class ConfirmTransactionManager extends BaseUpdateStatusManager<Transacti
|
||||||
payment_midtrans_url: redirect_url,
|
payment_midtrans_url: redirect_url,
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
apm.captureError(error);
|
||||||
throw new UnprocessableEntityException({
|
throw new UnprocessableEntityException({
|
||||||
statusCode: HttpStatus.UNPROCESSABLE_ENTITY,
|
statusCode: HttpStatus.UNPROCESSABLE_ENTITY,
|
||||||
message: `Gagal! transaksi telah terbuat, silahkan periksa email untuk melanjutkan pembayaran`,
|
message: `Gagal! transaksi telah terbuat, silahkan periksa email untuk melanjutkan pembayaran`,
|
||||||
|
|
Loading…
Reference in New Issue