Skip to content

VNPAY Phone POS Provider

The VNPAY Phone POS provider enables payment processing using a mobile phone as a POS terminal. The customer taps their contactless card on the merchant's phone to complete payment.

Overview

AttributeValue
Provider KeyVNPAY_PHONE_POS
Payment Method400_CARD
SettlementT+1
TechnologyNFC Contactless

Features

  • NFC card tap - Contactless payment via phone
  • No hardware required - Phone acts as terminal
  • Card network support - Visa, Mastercard, JCB, UnionPay
  • Real-time authorization - Instant card verification

Requirements

Merchant Phone Requirements

RequirementDetails
OSAndroid 9+ or iOS 14+
NFCBuilt-in NFC hardware
AppVNPAY Phone POS app installed
Connectivity4G/WiFi

Configuration

VNPAY Phone POS is an SDK-based provider. The mobile app handles card interactions, and MQ-Pay receives IPN notifications when payments complete.

Application Configuration

typescript
import { MQPayComponent, MQPayBindingKeys, IMQPayOptions } from '@nx-3rd/mq-pay';

class MyApplication extends BaseApplication {
  preConfigure() {
    this.bind<IMQPayOptions>({ key: MQPayBindingKeys.MQ_PAY_CLIENT_OPTIONS })
      .toValue({
        vnpayPhonePos: {
          enable: true,
          isDefault: false,
          enableController: true,

          // Environment flag
          isProduction: process.env.NODE_ENV === 'production',

          // Optional: Custom notification handler
          onPaymentNotification: async (ipnData) => {
            console.log('PhonePOS payment:', ipnData);
          },
        },
      });

    this.component(MQPayComponent);
  }
}

Configuration Options

OptionTypeRequiredDescription
enablebooleanYesEnable this provider
isDefaultbooleanYesUse as default provider
enableControllerbooleanYesAuto-register IPN endpoint
isProductionbooleanYestrue for production environment
onPaymentNotificationfunctionNoCustom IPN handler callback

SDK-Based Provider

Phone POS is SDK-based - the VNPAY mobile app handles the NFC card interaction. MQ-Pay only receives the IPN callback after payment completion.

Payment Flow

API Usage

Create Phone POS Payment

typescript
const response = await paymentService.checkout({
  source: {
    type: 'Order',
    id: 'order-uuid-123',
  },
  payment: {
    provider: 'VNPAY_PHONE_POS',
    method: '400_CARD',
    total: 150000,
    currency: 'VND',
  },
  expiration: {
    mode: 'duration',
    milliseconds: 120000,
  },
});

Card Types Supported

Card NetworkContactless
VisaYes
MastercardYes
JCBYes
UnionPayYes
Napas (Domestic)Yes

Response Codes

CodeDescription
00Success
05Do not honor
51Insufficient funds
54Expired card
55Wrong PIN

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.