Почему событие «сообщение: успешный_платеж» срабатывает случайным образом?Javascript

Форум по Javascript
Ответить
Anonymous
 Почему событие «сообщение: успешный_платеж» срабатывает случайным образом?

Сообщение Anonymous »

Как вы можете видеть в моем коротком видео-примере, сообщение о событии: успешный_платеж иногда не запускается после оплаты. В моем видео-примере было только одно выполнение после 3 платежей (только второе триггерное сообщение платежа: успешный_платеж , вы можете увидеть в журналах telegram_pay_charge_id).
пример короткого видео
Вот мой код:
Это StoreModule, здесь я регистрирую 2 события

Код: Выделить всё

@Module({
imports: [ProductModule, PaymentModule, GatewayModule],
providers: [StoreService],
controllers: [StoreController],
})
export class StoreModule implements OnModuleInit {
constructor(
@Inject(PROVIDERS.TG_PROVIDER) private readonly tgProvider: TgProvider,
private readonly storeService: StoreService,
) {}

private onTgBotInit() {
this.tgProvider.bot.on('pre_checkout_query', this.storeService.handlePreCheckoutQuery.bind(this.storeService));

this.tgProvider.bot.on(
'message:successful_payment',
this.storeService.handleSuccessfulPayment.bind(this.storeService),
);
}

onModuleInit() {
this.tgProvider.subscribe(this.onTgBotInit.bind(this));
}
}
Это обработчики успешный_платеж и pre_checkout_query:

Код: Выделить всё

public handleSuccessfulPayment = async (ctx: Context, next: NextFunction) => {
console.log(ctx.message.successful_payment);
const payload: InvoicePayload = JSON.parse(ctx.message.successful_payment.invoice_payload);
const payedAt = new Date().toISOString();
console.log(payload);
// await this.paymentService.findOneAndUpdate(
//     { requestId: payload.requestId },
//     {
//         payedAt,
//         status: PAYMENT_STATUS.PAID,
//         telegramPaymentChargeId: ctx.message.successful_payment.telegram_payment_charge_id
//     },
// );

// this.gatewayService.sockets.get(payload.userId)?.forEach((socket) => {
//     socket.emit(STORE_EVENTS.PRODUCT_BUY, payedAt);
// });
};

public handlePreCheckoutQuery = async (ctx: Context) => {
const { requestId }: InvoicePayload = JSON.parse(ctx.preCheckoutQuery.invoice_payload);

return ctx.answerPreCheckoutQuery(!(await this.paymentService.exists({ requestId, status: PAYMENT_STATUS.PAID })));
};
Я также пробовал использовать :successful_paid и msg:successful_pay, все они работают одинаково. Также я пытался обработать успешный_платеж самостоятельно, используя используемое промежуточное программное обеспечение, но иногда после оплаты ctx.message.successful_paid не определяется. Думаю, именно по этой причине события :successful_pay иногда не работают.


Подробнее здесь: https://stackoverflow.com/questions/798 ... k-randomly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»