Skip to main content

VND Payments via InfoCMS

MCV stores wallet balances in USD cents. VND payment rails use a fixed internal exchange rate:

$1 = 26,000 VND

VND Top-up

Users can create a VND QR top-up from Billing.

VND amount -> convert to USD wallet amount -> create InfoCMS QR request -> wait for callback -> credit wallet

Example:

VND PaidWallet Credit
2,600,000 VND$100.00

The payment is stored as:

  • payments.provider = infocms_qr
  • payments.status = requires_payment
  • payments.metadata.vnd_amount
  • payments.metadata.exchange_rate = 26000

When InfoCMS confirms the deposit, it should call:

POST https://ads.mcv.network/infocms/e-collect/callback

Accepted reference fields include orderId, order_id, transUUID, trans_uuid, provider_reference, or reference.

The callback is idempotent. It credits the wallet only once using:

infocms_qr:{provider_reference}:posted

VND Withdrawal

Users can request a VND withdrawal from Billing.

VND amount -> convert to USD wallet amount -> reserve wallet balance -> create InfoCMS transfer request

Example:

WithdrawalWallet Reserved
2,600,000 VND$100.00

Withdrawal requests are stored in withdrawal_requests.

When InfoCMS confirms or fails a transfer, it should call:

POST https://ads.mcv.network/infocms/transfer/callback

If the transfer fails, MCV refunds the reserved wallet amount once using:

withdrawal:{withdrawal_id}:refund

Environment Variables

INFOCMS_ENABLED=false
INFOCMS_BASE_URL=
INFOCMS_ACCESS_TOKEN=
INFOCMS_MERCHANT_ID=
INFOCMS_CREATE_QUICK_QR_ENDPOINT=/createQuickQr
INFOCMS_TRANSFER_ENDPOINT=/transfer

When INFOCMS_ENABLED=false, requests run in sandbox mode and store the outbound payload in metadata. This lets product and finance test the workflow before production credentials are configured.