ECR via App to App
Inter-App Communication
Complete the order collection through the App-to-App method.
The App to App channel carries the ECR Interface Protocol messages between a client App and the Wonder mPOS app (wondermpos).
1. Communication Format
Communication is performed by invoking the Wonder mPOS app via an Android Deep Link:
1. Request format:
wondermpos://public/payment?version={version}&action={Action}&data={encodedData}&callback={encodedCallback}
2. Response format:
{callback}?version={version}&action={Action}&data={encodedData}
Example: merchantpos://public/payment/result?version={version}&action={Action}&data={encodedData}
2. Data formatting instance
// 1. Request data example
/*
Pin Code: pinCode2 (OvSdpyD2FoUNR5rNyte41QqZzR1Y4DVN)
Encrypt the original data:
{
"header": {
"requestID": "2c7f32e1-b9e4-4b34-96cc-15c51289f69b",
"clientDeviceSN": "126498561093",
"timestamp": "2025-11-12T10:11:04+00:00"
}
}
*/
const deviceInfoRequestBodyJson = {
"version": "2.0",
"action": "DeviceInfo",
"data": "LzskNnsYgifR+ZjuXVjPDfT2Nw3YhbA4OAmT2yBBFgR39Q5TjSrnaW44czmmBcVlr2GL327sHk62o5FMXsqyxUNJC0uq1hEgp1gTzxzLYNnkwqbb7NeSFfdscqReOPiOMbY7rWN6sjfoVpVbTKSEVYmhZAVx10TrzSPE7w63pHNZl6utlzkcZNVwZSQO6qqkXtAGbKtryxZ1J0VA8mIt80aDKqEpECYICV1twM6gHgw="
};
const data = deviceInfoRequestBodyJson.data;
const encodedData = encodeURIComponent(data);
// LzskNnsYgifR%2BZjuXVjPDfT2Nw3YhbA4OAmT2yBBFgR39Q5TjSrnaW44czmmBcVlr2GL327sHk62o5FMXsqyxUNJC0uq1hEgp1gTzxzLYNnkwqbb7NeSFfdscqReOPiOMbY7rWN6sjfoVpVbTKSEVYmhZAVx10TrzSPE7w63pHNZl6utlzkcZNVwZSQO6qqkXtAGbKtryxZ1J0VA8mIt80aDKqEpECYICV1twM6gHgw%3D
wondermpos://public/payment?version=2.0&action=DeviceInfo&data=LzskNnsYgifR%2BZjuXVjPDfT2Nw3YhbA4OAmT2yBBFgR39Q5TjSrnaW44czmmBcVlr2GL327sHk62o5FMXsqyxUNJC0uq1hEgp1gTzxzLYNnkwqbb7NeSFfdscqReOPiOMbY7rWN6sjfoVpVbTKSEVYmhZAVx10TrzSPE7w63pHNZl6utlzkcZNVwZSQO6qqkXtAGbKtryxZ1J0VA8mIt80aDKqEpECYICV1twM6gHgw%3D&callback=merchantpos%3A%2F%2Fpublic%2Fpayment%2Fresult
// 2. Response data example
/*
Pin Code: pinCode2 (OvSdpyD2FoUNR5rNyte41QqZzR1Y4DVN)
Encrypt the original data:
{
"header": {
"responseID": "2c7f32e1-b9e4-4b34-96cc-15c51289f69b",
"serverDeviceSN": "NEXGO-N96-1170270945",
"timestamp": "2025-11-12T10:12:04+00:00"
},
"body": {
"deviceStatus": "Free",
"networkStatus": "Connected",
"softwareVersion": "1.0.0(188)",
"businessID": "ff467f02-5b69-45f3-81aa-bffcca55fe8f"
}
}
*/
const deviceInfoResponseBodyJson =
{
"version": "2.0",
"action": "DeviceInfo",
"data": "ZhnFiGfiT5Oir46CtHaQbVpegL5pRkNELxhOdN+XbqzIiaUmoimyxD3VYspmdNhyy2ZoOsrDZGvNhOxp/5/Cf21XBb2j8P8Gl/eMV7yHafjvqhoYGQY+m2PoYYAwBsWH0XDmbti+rfg7VQFFvHBoOqnfYmktcSJzHjm5hX4qyUMQdNWeTF4e+pkZ3jvTTLvdzMZlrMjwXOMxE1ikrbR6sgCV2cFx2Lrdvlh8gJdE6SM35CZna88X/s/tMPe2w32Lh0ou2eHKlARBuCG69KxEp7RpBQtw9+PDrzX7u4bL13V6b6LZJnejuwIsbxIz0yAPr6eApB41Vr6pELCXOyh1zRoxlF8RN5c8AhYE5NrSLCcvMOwZxvGjihrePAjO7vJFivowjoIwYMad1H31uLCIGrjOoD2JEycnpDWuGyRZcgU="
};
const data = deviceInfoResponseBodyJson.data;
const encodedData = encodeURIComponent(data);
// ZhnFiGfiT5Oir46CtHaQbVpegL5pRkNELxhOdN%2BXbqzIiaUmoimyxD3VYspmdNhyy2ZoOsrDZGvNhOxp%2F5%2FCf21XBb2j8P8Gl%2FeMV7yHafjvqhoYGQY%2Bm2PoYYAwBsWH0XDmbti%2Brfg7VQFFvHBoOqnfYmktcSJzHjm5hX4qyUMQdNWeTF4e%2BpkZ3jvTTLvdzMZlrMjwXOMxE1ikrbR6sgCV2cFx2Lrdvlh8gJdE6SM35CZna88X%2Fs%2FtMPe2w32Lh0ou2eHKlARBuCG69KxEp7RpBQtw9%2BPDrzX7u4bL13V6b6LZJnejuwIsbxIz0yAPr6eApB41Vr6pELCXOyh1zRoxlF8RN5c8AhYE5NrSLCcvMOwZxvGjihrePAjO7vJFivowjoIwYMad1H31uLCIGrjOoD2JEycnpDWuGyRZcgU%3D
merchantpos://public/payment/result?version=2.0&action=DeviceInfo&data=ZhnFiGfiT5Oir46CtHaQbVpegL5pRkNELxhOdN%2BXbqzIiaUmoimyxD3VYspmdNhyy2ZoOsrDZGvNhOxp%2F5%2FCf21XBb2j8P8Gl%2FeMV7yHafjvqhoYGQY%2Bm2PoYYAwBsWH0XDmbti%2Brfg7VQFFvHBoOqnfYmktcSJzHjm5hX4qyUMQdNWeTF4e%2BpkZ3jvTTLvdzMZlrMjwXOMxE1ikrbR6sgCV2cFx2Lrdvlh8gJdE6SM35CZna88X%2Fs%2FtMPe2w32Lh0ou2eHKlARBuCG69KxEp7RpBQtw9%2BPDrzX7u4bL13V6b6LZJnejuwIsbxIz0yAPr6eApB41Vr6pELCXOyh1zRoxlF8RN5c8AhYE5NrSLCcvMOwZxvGjihrePAjO7vJFivowjoIwYMad1H31uLCIGrjOoD2JEycnpDWuGyRZcgU%3D
3. Interface Protocol
3.1 Pair
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.1 Pair
3.2 Ack
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.2 Ack
3.3 Unpair
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.3 Unpair
3.4 Device Info
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.4 Device Info
3.5 Sale
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.5 Sale
3.6 Abort
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.6 Abort
3.7 Void
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.7 Void
3.8 Refund
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.8 Refund
3.9 Query Transaction Status
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.9 Query Transaction Status
3.10 Sale Directly (to do)
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.10 Sale Directly (to do)
3.11 PreAuth (to do)
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.11 PreAuth (to do)
3.12 Capture (to do)
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.12 Capture (to do)
3.13 Print
- CMD: 0101
- Please refer to ECR Interface Protocol - 3.13 Print
3.13 CustomPrint
- Action: CustomPrint
- Pin Code: pinCode2
Request "data.body" structure
| Variable | Type | Required | Description |
|---|---|---|---|
| printUrl | String | Y | URI provided by the third-party application for retrieving the print content. |
Example:
/*
Pin Code: pinCode2 (OvSdpyD2FoUNR5rNyte41QqZzR1Y4DVN)
Encrypt the original data:
{
"header": {
"requestID": "0f7d24de-76fc-46f8-861b-2d0d31a2dd9e",
"clientDeviceSN": "126498561093",
"timestamp": "2025-11-12T10:11:04+00:00"
},
"body": {
"printUrl": "content://com.partner.pos.fileprovider/images/custom_print.png"
}
}
*/
{
"version": "2.0",
"action": "CustomPrint",
"data": "FXChidZ5/yPgfhnVIoE4i8BZkfWh7kMkmMOGsFEGK9Gj32nxaNDuqh+J2jmQSnc+WEwf+RcWsY8Stn3wcx1NAkoA5NNxbSXHSSMv0JFD7q1lnjX28oQ29BMC6RDKUpZ3EZtz2SbwGiWKiA4qOqhVpXbMiVrFH19IBIEzNAPtv4qwcWjvzsMKufSWiOV4IV+7lbmuZo2kPgBdo1b/nJiCin6gx5MQDL4LAcdcLFr/XVxFYdXqqzn+wO/Rl0hBQiJMkA7ozF1ZcfJwTnov5nhTLWgS2nKs1v2Cyk3Dt2Cqehm7aX6yrM2E7ru93B7Wscm2D1bWqKaykqSY+6WtUFQDlg=="
}
Response "data.body" structure
| Variable | Type | Required | Description |
|---|---|---|---|
| status | String | Y | Response status: Success / Failed |
Example:
/*
Pin Code: pinCode2 (OvSdpyD2FoUNR5rNyte41QqZzR1Y4DVN)
Encrypt the original data:
{
"header": {
"responseID": "0f7d24de-76fc-46f8-861b-2d0d31a2dd9e",
"serverDeviceSN": "NEXGO-N96-1170270945",
"timestamp": "2025-11-12T10:12:04+00:00"
},
"body": {
"status": "Success"
}
}
*/
{
"version": "2.0",
"action": "CustomPrint",
"data": "D2LufBjIL2Ugtuzm1Sm/WA5lShz72MGcCGS8yVvlFX7cgdFS+eLszx9R3y0+wW0/4OWW1NZybyqKlGrOi+vDyerbLrkKC2XtMFOYQ4q1F88qrOIapsDfj0b3/jnhPrKwRML4YJeVGIS1BE5rDsBHADTGoQ/gYj+XAskMXLLJuvhlVdEMOPqP3hp4u1LmGRuIyIVAgMzXPf9+Eb2D1bii4bzyTRBFTHibsN5580VTIhZ90Owhm1oMhnjstryQ/uhIJUTa1je33nCPosW4s0+jXw=="
}
Android Integration Note
Important: When
printUrlis a localcontent://URI provided through AndroidFileProvider, the calling application must grant Wonder mPOS read access to the URI.The Intent must include:
Intent.FLAG_GRANT_READ_URI_PERMISSIONThe URI permission should also be granted through
ClipData/grantUriPermissionas required by the Android implementation.Without URI read permission, Wonder mPOS may receive the
printUrlbut will not be able to access the print content.
Android Example:
val deeplink = "wondermpos://public/payment?version=2.0&action=CustomPrint&..."
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(deeplink)).apply {
setPackage(WONDER_MPOS_PACKAGE)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
clipData = ClipData.newUri(contentResolver, "printUrl", printUri)
type = "image/png"
}
grantUriPermission(
WONDER_MPOS_PACKAGE,
printUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION
)
startActivity(intent)
Notes
CustomPrintis an independent App-to-App action and is not part of Sale / Void / Refund.- The print content is provided by the third party through
printUrl. - If
printUrluses an Androidcontent://URI, the calling application must grant Wonder mPOS URI read permission. - Supported print content formats and size limitations should follow the final implementation confirmed by Development.
- For detailed printer hardware specifications, please contact the technical support team for assistance.