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 Paid | Wallet Credit |
|---|---|
| 2,600,000 VND | $100.00 |
The payment is stored as:
payments.provider = infocms_qrpayments.status = requires_paymentpayments.metadata.vnd_amountpayments.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:
| Withdrawal | Wallet 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.