KIOSK (C Scan B) Integration Guide
Overview
In this document, a Kiosk refers to one device with a customer facing screen which can display a dynamically generated QR code, with the transaction amount information embeded.
To enable the Kiosk accept payment from customer, there are two options:
-
Using the gateway payment API, in this case, the Kiosk is like a PC website, please refer to Website Integration Guide for detail
-
Using the Native Pay API, in this case, the kiosk will call the Native Pay API to get QR code picture, and display the picture on screen for consumer to scan and pay.
We will only concentrate on option 2, the native Pay API in this document, but you can always check Website Integration Guide for option 1.
Payment Flow Sequence Diagram
Using Native Pay API for C scan B
The payment information flow is as below. The native pay supports Alipay, WeChat Pay and Prompt Pay payment channel. For the sake of simplicity, we use WeChat Pay as an example. For Alipay and PromptPay the information flow is similar.
-
The buyer Select QR want to pay.
-
The merchant create order by API.
-
API returns QR Code image/value.
-
The Merchant displays the QR code image on their screen/platform.
-
The buyer open the Ewallet App/mobile banking on mobile.
-
The buyer scan the QR code.
-
The buyer confirms the payment by entering PIN/fingerprint.
-
The merchant get the payment result by API order_query, or API Notification sendback.
Specifications of Native Pay APIs
Order Apply
please check native pay accout type support each wallet before using API.
API method
URL |
|
Method |
POST |
Parameter organization format |
application/x-www-form-urlencoded |
Order Apply Request Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
appid |
String(32) |
YES |
mch12345 |
Your Merchant Number. Check on merchant ksher. The format is mch{Merchant No}. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
channel |
String(32) |
YES |
Payment want to request to pay. Value range: wechat: Wechat Wallet. alipay: Alipay Wallet. alipayplus: Alipay+ Wallet. Country support only Japan. promptpay: PromptPay QR code (Thailand standard bank transfer QR code). Country support only Thailand. truemoney: TrueMoney Wallet. Country support only Thailand. airpay: Shopeepay Wallet. Country support only Thailand. |
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
mch_order_no |
String(32) |
YES |
123456acb |
Merchant order number, generated by merchant self. It must be unique on the merchant side. |
total_fee |
Integer |
YES |
100 |
total amount of the order and it must be an integer, add 00 for decimal.Example 150.50 THB total_fee = 15050 |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
notify_url |
String(256) |
NO |
the url to receive the asynchronous notification about the status of the payment from Ksher; If merchant leaves this field blank, then there will be no notification to send back to merchant. |
|
img_type |
String(3) |
No |
"png" |
Ksher system can generate two types of the qrcode image: png, svg, the default is png |
product |
String(512) |
NO |
Name or description of your product info. |
|
attach |
String(127) |
NO |
any extra information can be added here. |
|
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
version |
String(32) |
NO |
3.0.0 |
version api |
tmn_expire_time |
Int |
NO |
60 |
QR time available in second (support Truemoney only) Example 60 is mean QR can use in 60 second after generate. |
{
"appid": "mch20163",
"channel": "wechat",
"fee_type": "THB",
"img_type": "svg",
"mch_order_no": "1495773587",
"nonce_str": "sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y",
"notify_url": "http://www.yoursweb.com/notify",
"sign": "4b609e384500ba8b2ed5eddbcc3aab5c7325c45a13bb531655ac459022da0d15ead7e6ab8d73f6d1182117547a6e53871c8da44d99cf02e9d8420c9b20130a2c",
"time_stamp": "20170526113947",
"total_fee": 10,
"version": "1.0.0"
}
curl --location 'https://api.mch.ksher.net/KsherPay/native_pay?appid=mch35005&channel=promptpay&fee_type=THB&mch_order_no=20230711163201&nonce_str=90c8d5ad3d4aa1a538f610d259c35c97¬ify_url=https%3A%2F%2F6b2f-171-103-29-30.ngrok-free.app%2Fapi%2Fgateway_pay%2Fnotify_url%2F&sign=95c905ba7670591e9cbf0f062c7adccec034f077f023c3f6d8325b55ca672d58d9787af8b0319f6808ea81aa96b575e2f17c1a22d3b8106336b63c2921cec37ecd02ef5481ec9dd9165f44fd376f34cc8f77948c8683445b692f23eb629f11dc82cddd636e0cdb71b8f07b1c7ce21e4ec124449aae40797aacaa05758c36822d&time_stamp=2023071717532828S&total_fee=100' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'appid=mch35005' \
--data-urlencode 'channel=promptpay' \
--data-urlencode 'fee_type=THB' \
--data-urlencode 'mch_order_no=20230711163201' \
--data-urlencode 'nonce_str=90c8d5ad3d4aa1a538f610d259c35c97' \
--data-urlencode 'notify_url=https://6b2f-171-103-29-30.ngrok-free.app/api/gateway_pay/notify_url/' \
--data-urlencode 'sign=95c905ba7670591e9cbf0f062c7adccec034f077f023c3f6d8325b55ca672d58d9787af8b0319f6808ea81aa96b575e2f17c1a22d3b8106336b63c2921cec37ecd02ef5481ec9dd9165f44fd376f34cc8f77948c8683445b692f23eb629f11dc82cddd636e0cdb71b8f07b1c7ce21e4ec124449aae40797aacaa05758c36822d' \
--data-urlencode 'time_stamp=2023071717532828S' \
--data-urlencode 'total_fee=100'
Order Apply SUCCESS Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range:
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
data Parameters (JSON ) |
||||
result |
string(16) |
YES |
SUCCESS |
SUCCESS |
appid |
String(32) |
YES |
mch12345 |
Your Merchant Number. Check on merchant ksher. The format is mch{Merchant No}. |
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
mch_order_no |
String(32) |
YES |
123456acb |
Merchant order number, generated by merchant self. It must be unique on the merchant side. |
ksher_order_no |
String(32) |
YES |
generated by Ksher |
|
code_url |
String(64) |
NO |
weixin://wxpay/s/An4baqw |
merchant can use this url to generate a qrcode and show it to the consumer to scan On shopeepay can’t using encode QR code_url text. have to use this value by add <img src=code_url> on HTML side |
imgdat |
string(1024) |
YES |
the png format image data will be returned to the API caller unless "svg" is requested explicitly, the png data is base64 encoded and can be assigned directly to the "src" field of img object in the html page. shopeepay not support imgdat, if scan by using this value will error display. |
|
trade_type |
string(8) |
NO |
NATIVE |
value range: JSAP, NATIVE, APP, it should be "NATIVE" for native pay |
{
"code": 0,
"data": {
"appid": "mch20163",
"code_url": "weixin://wxpay/bizpayurl?pr=n8F22H4",
"device_id": "",
"imgdat": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAAFyAQAAAADAX2ykAAACoElEQVR4nO2aTWrkMBBGX40FWaohB+ijqG82zJFyA/soOcCAtWyQ+WYhqdOdMJMOOKY9VC0MRm/xQVE/KpWJr9j040s4OO+8884777zzf+OtWaB/zJgOALmfnTbU4/zKfJIkzbdn2QwYJEm65b9bj/Mr87lHaJqX6lXSDHaCGtMb63F+HT68+9d0LIH0cjCIAvK2epxfl3/vX0szYjqWILLx4Xb8aPqd/7d1//ZYbQ7NTzKisPTCjZMfTb/zd/GTmZkdwE45YD9nIL0GgKW2z9vqcX4lvsbvW4RqOhZEXkzkpRfh7fQ4vy5Pvfwklfaf+l1II4MgqnbS9Qo1Ppp+5+/hNeYnaYwS5ABpHgTxbNK8GMSCxg31OL8ub3Y8Wx1oTMcCsFh1chtiPfl8Y8+8RsBOsSC9tl7K7AA1nKfj2eeT++Rr/dUYr+eTNRcnlZqpNcbSuUfT7/wn1vwGtDIbJUmlN1T1QPL+apf8pX+WaqxqBtIM0kx1dzt1/+6Qb/ffyUBwNhFL0HQASy9DMQhFk134R9Pv/CfW629BmodLai43hfliHr8746/yc7dy5fM+7hjcv/vkm3/fxlTE3lVdTa28v9or39+PcihMRwEsQcTfQeShWCu9lwL8aPqdv4+PZ4McMDsMshOX+Qb0ceWmepxfk79qrcgBYJDGeLZWf+PZfP68Y/5tf7K2ziNLz8jd3ZvqcX4tvtXfNALkZ4AlQBxkRIBYnxuCttHj/Pfwl/3J9la0tIQ89U3odvqo+p2/l4/lspozqM6k5f3V/8Lr1wHaI3DuL4Wn7PtXO+Xf709WS+OCpfm5QA7Um/A2epxfl2/+bWOMAUuvobRkHM8GDKUm6W30OL8u/2F/Egq0C9HwYb394fQ777zzzjvv/B75P230m3hnLMGVAAAAAElFTkSuQmCC",
"ksher_order_no": "60020170526123947574894",
"mch_order_no": "1495773587",
"nonce_str": "sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y",
"result": "SUCCESS",
"trade_type": "NATIVE"
},
"msg": "ok",
"sign": "65126acc40a48761751eb9fbabf41ca6d08a44be2a175edcaa95cc7e119c224d76d82d5776be6f80ce9a4e535469a7514d318faf5619151266532557ac0f8bd2",
"status_code": "",
"status_msg": "",
"time_stamp": "",
"version": "2.0.0"
}
{
"code": 0,
"status_code": "",
"status_msg": "",
"sign": "b853c6a62164abad9f2ac8d73e5c3d502966ca8b68d3058e855482c5aec5f498c3629d053749a2685ecd08a7ed7570f7db93b82893115f7d7c9228ff6957bcd6",
"version": "3.0.0",
"msg": "ok",
"time_stamp": "2023-09-11T17:59:00.645805+08:00",
"data": {
"trade_type": "NATIVE",
"ksher_order_no": "90020230717185354750819",
"mch_order_no": "20230711163201",
"nonce_str": "90c8d5ad3d4aa1a538f610d259c35c97",
"fee_type": "THB",
"imgdat": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZgAAAGYCAYAAAB/O/RVAAAYnElEQVR4nO3da4xtZ3kf8Odde/bMmXN87EOCG9s4JBAKJgk01DSlbZwYKCmoFzVpqKpEaovapooSPkClCkVNP7RRRVvUSCVKVCWtoqQoalNVVdIqlCrEgEuh4tZACJdgGWODAYON8bl4Zu/19sOeORefc7xsLz9+197z+0kjDp697pf/vGu9z35LrbUGADzNutYrAMBmEjAApBAwAKQQMACkEDAApBAwAKQQMACk2Br6QCnlmViPZobKgIa2f+z0rWWvf/b+HZI9/+zlt94/Q6Z+/bQ+f6Z+/Y81tP1aMACkEDAApBAwAKQQMACkEDAApBAwAKQQMACkGKyDGTL14WSy+6Fnz3/qdRpjta4jaF2nMnb7jvr5NzT91OtQNv3+qQUDQAoBA0AKAQNACgEDQAoBA0AKAQNACgEDQIrRdTBD1r2ffmvrXmcx9TqaseuXPX3r8Vqmvv/Gzn/qdTLrfv/UggEghYABIIWAASCFgAEghYABIIWAASCFgAEgRXodzLprPR7GWOu+/utubB1J6zqWqY+30rqOhsenBQNACgEDQAoBA0AKAQNACgEDQAoBA0AKAQNACnUwI2WPl5Etu45h6vundR3Huo+3kr387PFwWu+fTacFA0AKAQNACgEDQAoBA0AKAQNACgEDQAoBA0CK9DqYde9nPrYffus6kyFjxwPJrnNY9/E+pl7n0nq8mHXf/9mmvn5DtGAASCFgAEghYABIIWAASCFgAEghYABIIWAASDG6Dqb1eBqtZdeRZE+frfX2j7Xuy5/69GNlL791Hdi604IBIIWAASCFgAEghYABIIWAASCFgAEghYABIMVgHcy6j0cwda376U99+VOvs1h3R/34tV7+ptOCASCFgAEghYABIIWAASCFgAEghYABIIWAASBFqckdtVv3M2/dT3/q452Mlb1/spc/deu+f7LXf933z5Cpb9/Q+mnBAJBCwACQQsAAkELAAJBCwACQQsAAkELAAJBicDyY1v3EW9eRTL0f/1it61iGtB6vZEjr62NI6+OTPf1Yra+/sVrvvyFaMACkEDAApBAwAKQQMACkEDAApBAwAKQQMACkGD0eTOs6g02vg2i9fUNaL3/qpn7+ZY+HlL1859e064i0YABIIWAASCFgAEghYABI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AEghYABIMTgezLr3029dx9J6+8dqvf7ZdRStp8/Wus6o9fkxpPX1O/X1H7t+WjAApBAwAKQQMACkEDAApBAwAKQQMACkEDAApBgcD2ZsP+rWdTTZ/bw3vZ98ttbj2QyZep1B6+O76df3WK3Pj9a0YABIIWAASCFgAEghYABIIWAASCFgAEghYABIMVgH03q8kqnXkWQvP1vr4zvWUV//1nU0m17HMiS7Dq71eDpjj48WDAApBAwAKQQMACkEDAApBAwAKQQMACkEDAApSh3Z0bx1P/bWdRCt62yGtB6vJns8ldZa16GYf9vzr/X9rfX+HaIFA0AKAQNACgEDQAoBA0AKAQNACgEDQAoBA0CKwfFgxsqus5j6eBFHXes6nLGyx/PIXv+jfn1Mvc5lSPb6Gw8GgLUkYABIIWAASCFgAEghYABIIWAASCFgAEgxOB5M6/FKxmo9Hknr7Rty1MfTmLrWdRitj9+Q1td3a62vH3UwADQhYABIIWAASCFgAEghYABIIWAASCFgAEgxWAdz1E29DiZb6zoBdUrrXWc0dvmbvn1jlz+k9f7XggEghYABIIWAASCFgAEghYABIIWAASCFgAEgxdbQB1rXQWQb6se97uNJZPfjb12nkX181n39h4zdvtZ1XlMfD2bq50/28dOCASCFgAEghYABIIWAASCFgAEghYABIIWAASDFYB3MkNb94Iese53KWNn97LOnb631+rcez+Oon5+tx2MZ0rrOZYgWDAApBAwAKQQMACkEDAApBAwAKQQMACkEDAApRtfBDJl6P/ohR308h3WvA8iefqypH9/W52fr7c+ePlvr9dOCASCFgAEghYABIIWAASCFgAEghYABIIWAASBFeh0MuVrXGQ0tv3UdTevxToYc9TqT1ssf0vr4rPv+04IBIIWAASCFgAEghYABIIWAASCFgAEghYABIIU6mJFa11EMaV3HMiS7zmDd6yDGar38scbu36nXoUz9/jGWFgwAKQQMACkEDAApBAwAKQQMACkEDAApBAwAKUod6Mg99X7+Q1r3Y596P/mp15GMddSPb2ut7w+t92/r86P19a0FA0AKAQNACgEDQAoBA0AKAQNACgEDQAoBA0CK0XUw6+6o91Of+ngrQzZ9+eteJ5Qtu84m+/povf+z118LBoAUAgaAFAIGgBQCBoAUAgaAFAIGgBQCBoAUg3UwAPBUaMEAkELAAJBCwACQQsAAkELAAJBCwACQQsAAkOL/A4g4s3paEfAWAAAAAElFTkSuQmCC",
"result": "SUCCESS",
"total_fee": 100,
"appid": "mch35005",
"PaymentID": "90020230717185354750819",
"PaymentCode": "00020101021230750016A0000006770101120115010556019950701022020230717185354750819030890035005530376454041.005802TH630427F2",
"code_url": "00020101021230750016A0000006770101120115010556019950701022020230717185354750819030890035005530376454041.005802TH630427F2",
"stalls_name": "90035005",
"device_id": ""
}
}
Order Query Fail Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range:
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
msg |
String(32) |
YES |
the response message. |
|
status_code |
int |
YES |
|
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(256) |
YES |
"20190622131804" |
time stamp |
version |
String(32) |
YES |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
result |
string(16) |
YES |
FAIL |
Value range: FAIL, NOTSURE |
err_code |
String(32) |
YES |
SYSTEMERROR |
Refer to the error list for the details |
err_msg |
String(128) |
YES |
system error |
the detailed description of the error |
nonce_str |
String(32) |
YES |
Random string |
|
{
"code": 0,
"status_code": "",
"status_msg": "",
"sign": "02635a1a60cfcaf461c6b860ac7ffd967c98c19803ddc4b698d2279502451f837d225fe38810357dc5e50c9de114bb40ad3513dd972f2e7db8ff08a09240c604",
"version": "2.0.0",
"msg": "ok",
"time_stamp": "",
"data": {
"result": "FAIL",
"err_code": "KSHER_INVALID_MCHINFO",
"err_msg": "merchant not exist.",
"nonce_str": ""
}
}
Order Query
API method
URL |
|
Method |
POST |
Parameter organization format |
application/x-www-form-urlencoded |
Order Query Request Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
appid |
String(32) |
YES |
mch35000 |
Your Merchant Number. Check on how to find your appid/Merchant No.. The format is mch{Merchant No}. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
mch_order_no |
String(32) |
YES |
order number on merchant side, must be unique |
|
ksher_order_no |
String(32) |
YES |
Order no. generated by Ksher. |
|
channel_order_no |
String(32) |
YES |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
|
channel |
String(32) |
YES |
Value range: wechat/alipay/alipayplus/linepay/airpay/promptpay/truemoney |
|
time_stamp |
String(256) |
YES |
time stamp example: "time_stamp": "20190622131804" |
|
{
"appid": "mch36591",
"mch_order_no": "test5",
"nonce_str": "b9536a67afb9153ac880492191857c93",
"sign": "98b1bcf1546145eff11ad38e1b6dcbc7d929497bdada7bb585da693dd75ea69812d57cd8e983f3db47879810553be42bb0aad40c8103ce60100037857e13c121f4c3c5f456673dee78a9ca66d5096942def3315ec1f6036beaf515e0302f6a4377c03ad2c8de5a6ab17b8e1e6f485c5bad3aa22cae6f0562e6740149788b23b9",
"time_stamp": "2020122516065757S"
}
Order Query SUCCESS Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
code msg:
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
msg |
String(32) |
YES |
the response message. |
|
status_code |
int |
YES |
|
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(256) |
YES |
"20190622131804" |
time stamp |
version |
String(32) |
YES |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
appid |
String(32) |
YES |
mch35000 |
Your Merchant Number. Check on how to find your appid/Merchant No.. The format is mch{Merchant No}. |
attach |
String(127) |
NO |
any extra information can be added here. |
|
cash_fee |
int |
YES |
specifies the total cash payment amount of a transaction. |
|
cash_fee_type |
string(16) |
YES |
CNY |
comply with ISO 4217, CNY by default. |
channel_order_no |
String(32) |
YES |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
|
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
mch_order_no |
String(32) |
YES |
generated by merchant self, it must be unique on the merchant side, same as the input. |
|
ksher_order_no |
String(32) |
YES |
Order no. generated by Ksher. |
|
merchant_remark |
string |
|||
nonce_str |
String(32) |
YES |
Random string |
|
openid |
String(16) |
YES |
CNY |
Each user has a unique id under E-Wallet. |
operation |
String(16) |
YES |
ORDER-QUERY |
this shows what operatation the request is. |
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
rate |
string(16) |
YES |
exchange rate of foreign currency to RMB. |
|
raw_total_fee |
Int |
YES |
total amount of the order and it must be an integer, the unit is cent |
|
time_end |
String(14) |
NO |
20141030133525 |
the time when the order is finished,the format is yyyyMMddHHmmss |
total_fee |
Int |
YES |
total amount of the order and it must be an integer, the unit is cent |
|
openid |
string(16) |
YES |
o5x64wG48fnZyqWOxqJl-MPSkNJ4 |
Each user has a unique id under E-Wallet. |
result |
string(16) |
YES |
SUCCESS |
Value Range: FAIL/SUCCESS/CLOSED/NOTPAY/PAYERROR/PENDING/NOTSURE/USERPAYING/REFUND
|
{
"code": 0,
"data": {
"appid": "mch32148",
"attach": "",
"cash_fee": 7,
"cash_fee_type": "CNY",
"channel": "wechat",
"channel_order_no": "4200000607202006237838347168",
"consumer_remark": "",
"device_id": "",
"fee_type": "THB",
"ksher_order_no": "90020200623192741778187",
"mch_order_no": "1592911660",
"merchant_remark": "\u6d4b\u8bd5",
"nonce_str": "f4d6aefa63f67ed4abdd83c164191b63",
"openid": "o2G4c04tmsU-wsCG7jN_ORL5Vh14",
"operation": "ORDER-QUERY",
"operator_id": "25382",
"rate": "0.223410",
"raw_total_fee": 1,
"result": "SUCCESS",
"time_end": "2020-06-23 18:28:31",
"total_fee": 1
},
"msg": "ok",
"sign": "1ce187f310e73b26f91e76501bb5d360798d22dba67b1b6120209784ea4c6c6f0318650858a575b43c9ded8e5f2931cdecfa8e110af6ec4f93639011c97b07fe",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-06-23T19:28:34.761046+08:00",
"version": "3.0.0"
}
Order Query Fail Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range:
|
sign |
String(256) |
YES |
refer to relevant chapter Signature Algorithm |
|
msg |
String(32) |
YES |
the response message. |
|
status_code |
int |
YES |
|
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(256) |
YES |
"20190622131804" |
time stamp |
version |
String(32) |
YES |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
result |
string(16) |
YES |
FAIL |
Value range: FAIL, NOTSURE |
err_code |
String(32) |
YES |
SYSTEMERROR |
Refer to the error list for the details |
err_msg |
String(128) |
YES |
system error |
the detailed description of the error |
nonce_str |
String(32) |
YES |
Random string |
|
{
"code": 0,
"data": {
"err_code": "KSHER_INVALID_ORDER_NO",
"err_msg": "failed to find this order no ('mch_order_no:test5 ksher_order_no: channel_order_no:' ).",
"nonce_str": "b9536a67afb9153ac880492191857c93",
"result": "FAIL"
},
"msg": "ok",
"sign": "715f342bed7bffa1e9deb68ff1125283572ee3cde61373aadeca1e90b5a554cc112059baa962eba5c117466a2ecd98ef7c3ef7d9b60f4b07b9b2a9d74a92f823",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-12-25T17:26:41.364745+08:00",
"version": "3.0.0"
}
Webhook Notify
What’s Webhook?
-
Webhook is API response when Customer paid like event. It make customer don’t need to polling to check status.
When webhook callback?
-
add parameter name "notify_url" when you request, ksher will initiate a webhook callback.
-
ksher will polling check the status payment within 2 hours.
-
if the order has been successful payment within 2 hours, webhook will callback.
-
if the order has not been paid within 2 hours , The merchant needs to query request by yourself.
-
-
If ksher got callback from wallet. we will call webhook to merchant also.
What going on If internet not stable and don’t got webhook at the first time?
-
If the merchant does not return correct format,we will try to callback again.
Correct format response
{"result": "SUCCESS", "msg": "OK"}
This is table webhook with times notification, if customer not response correct success type and or we can’t callback
Times retry | Times between the last retry |
---|---|
1st retry |
1s |
2nd retry |
2s |
3rd retry |
2s |
4th retry |
10s |
5th retry |
30s |
6th retry |
1min |
7th retry |
10min |
8th retry |
1hour |
9th retry |
3hour |
10th retry |
5hour |
11th retry |
8hour |
12th retry |
12hour |
Delayed messages will be retried 12 times within 29 hours
After consumer pays, Ksher system will notify merchant only SUCCUSSFULL payment
API method
URL |
|
Method |
POST |
Parameter organization format |
text/plain;charset=utf-8 |
Payment Result of SUCCESS
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
0: it only shows the calling of the API is successful, not meaning the target business operation succeed. |
status_code |
int |
YES |
|
|
status_msg |
String(256) |
NO |
the status message |
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
version |
String(32) |
YES |
"3.0.0" |
API version |
msg |
String(32) |
YES |
ok |
the response message. |
time_stamp |
String(256) |
YES |
"20190622131804" |
time stamp |
data Parameters (JSON ) |
||||
appid |
String(32) |
YES |
mch35000 |
Your Merchant Number. Check on how to find your appid/Merchant No.. The format is mch{Merchant No}. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
openid |
String(128) |
YES |
o5x64wG48fnZyqWOxqJl-MPSkNJ4 |
Customer’s id under this merchant’s public account. |
channel_order_no |
String(32) |
YES |
4001432001201705110439447536 |
Order no. generated by payment channel(alipay, alipay etc.)Note:Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
cash_fee_type |
String |
YES |
THB |
e-wallet local currency, e.g. THB for Thailand e-wallets, CNY for Chinese e-wallets Alipay, WeChat Pay. |
ksher_order_no |
String(32) |
YES |
90020210420105438458353 |
Order no. generated by Ksher. |
time_end |
String(14) |
YES |
2014-10-30 13:35:25 |
the merchant local time when the order is finished,the format is yyyy-MM-dd HH:mm:ss |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
attach |
String(127) |
YES |
any extra information can be added here. |
|
rate |
string(16) |
YES |
exchange rate of foreign currency to RMB. |
|
result |
string(16) |
YES |
SUCCESS |
Status payment. Value range: SUCCESS |
total_fee |
Integer |
YES |
100 |
total amount of the order and it must be an integer, add 00 for decimal.Example 150.50 THB total_fee = 15050 |
operation |
String |
YES |
QUICK-PAY |
this shows what operatation the request is. |
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
cash_fee |
int |
YES |
specifies the total cash payment amount of a transaction. |
|
mch_order_no |
String(32) |
YES |
generated by merchant self, it must be unique on the merchant side, same as the input. |
|
order_no |
String(32) |
YES |
generated by merchant self, it must be unique on the merchant side, same as the input.Equate to mch_order_no. |
Data will response in text format following like this
{"code": 0, "version": "3.0.0", "status_code": "", "msg": "ok", "time_stamp": "2023-05-22T15:14:55.794084+08:00", "status_msg": "", "data": {"openid": "tmn.10036553303", "channel_order_no": "230522141453987OFSWN", "operator_id": "29398", "cash_fee_type": "THB", "ksher_order_no": "90020230522151258706179", "nonce_str": "4XiQyVYA98tNo21jSX24oatxw6FTXo6D", "time_end": "2023-05-22 14:14:53", "fee_type": "THB", "attach": "", "rate": 0.0, "result": "SUCCESS", "total_fee": 100, "appid": "mch35005", "order_no": "20230522140400", "operation": "NATIVE-PAY", "device_id": "", "cash_fee": 100, "channel": "truemoney", "mch_order_no": "20230522140400"}, "sign": "40cb0b83dd675d5f043ac57696d92575e337431fc682d3dbe529cb324cb2a4cfefe6984b9811790c6c1f0dc75e4fa83a8bb3114ad9a3eeef55dba453ea844706"}
after convert data to json format will following this
{
"code":0,
"version":"3.0.0",
"status_code":"",
"msg":"ok",
"time_stamp":"2023-05-22T15:14:55.794084+08:00",
"status_msg":"",
"data":{
"openid":"tmn.10036553303",
"channel_order_no":"230522141453987OFSWN",
"operator_id":"29398",
"cash_fee_type":"THB",
"ksher_order_no":"90020230522151258706179",
"nonce_str":"4XiQyVYA98tNo21jSX24oatxw6FTXo6D",
"time_end":"2023-05-22 14:14:53",
"fee_type":"THB",
"attach":"",
"rate":0.0,
"result":"SUCCESS",
"total_fee":100,
"appid":"mch35005",
"order_no":"20230522140400",
"operation":"NATIVE-PAY",
"device_id":"",
"cash_fee":100,
"channel":"truemoney",
"mch_order_no":"20230522140400"
},
"sign":"40cb0b83dd675d5f043ac57696d92575e337431fc682d3dbe529cb324cb2a4cfefe6984b9811790c6c1f0dc75e4fa83a8bb3114ad9a3eeef55dba453ea844706"
}
Expire time QR
expire time QR on native_pay API
PromptPay
-
can setup time wallet → No
-
expire_time min → can’t setup
-
expire_time max → can’t setup
-
default time expire_time, If merchant leave value expire_time → never expire
Truemoney
-
can setup time wallet → Yes, at tmn_expire_time
-
expire_time min → 0
-
expire_time max → unlimited depend on customer
-
default time expire_time, If merchant leave value tmn_expire_time → 1 day
Alipay
-
can setup time wallet → No
-
expire_time min → can’t setup
-
expire_time max → can’t setup
-
default time expire_time, If merchant leave value expire_time → 3 hours
Order Refund
API method
URL |
|
Method |
POST |
Parameter organization format |
application/x-www-form-urlencoded |
Order Refund Request Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
appid |
String(32) |
YES |
mch12345 |
Your Merchant Number. Check on merchant ksher. The format is mch{Merchant No}. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
mch_order_no |
String(32) |
YES |
2103301701291052 |
order number on merchant side, must be unique |
ksher_order_no |
String(32) |
NO |
90020210330180132318847 |
Order no. generated by Ksher. ksher Order no. should be provided when request card payment refund |
channel_order_no |
String(32) |
YES |
1207919130 |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
channel |
String(32) |
NO |
Value range: alipay,wechat,linepay,airpay,promptpay,truemoney |
|
total_fee |
Integer |
YES |
100 |
total amount of the order and it must be an integer, add 00 for decimal.Example 150.50 THB total_fee = 15050 |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
mch_refund_no |
String(32) |
YES |
refund_2103301701291052 |
generated by merchant self, each refund no. can be used once only. |
refund_fee |
Int |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
attach |
String(127) |
NO |
any extra information can be added here. |
|
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
version |
String(32) |
NO |
API version |
|
{
"appid": "mch35005",
"fee_type": "THB",
"mch_order_no": "2103301701291052",
"mch_refund_no": "refund_2103301701291052",
"nonce_str": "9c75d11e7572f887dbbfe374f205d5eb",
"refund_fee": 100,
"sign": "29cb8b5997f5e15e4c15a8caa4c7eb057a4185f1c6ecaa2a5a826b07bd07fe96a86c964abb38dcf5984399974266784cba8214478a6d9eccada4aa64ccb336d0af31aba0e63eaf0b3e972b19578b0116fdafd9c63f0756d15714284b556dbb76761a09291985bcf06319e4da5abda2652d18b8ce56962c0375168205d9abd301",
"time_stamp": "2021033014385656S",
"total_fee": 100
}
or
{
"appid": "mch35005",
"fee_type": "THB",
"ksher_order_no": "90020210330180132318847",
"mch_order_no": "2103301701291052",
"mch_refund_no": "refund_2103301701291052",
"nonce_str": "9c75d11e7572f887dbbfe374f205d5eb",
"refund_fee": 100,
"sign": "0a0efce05ccfbd17d16ae46724a8be7398656177064ac9a71ea3acc6f3fe7a46bebf458d4d15ee4bb6eb750d8cd79dd633a1c13eafd1c8894e45122d3cc4a3f381e4a3874decbdce38b3d3f9de343455bb741f07e019a960e50f577c13b4a6bd0aaf7cc1a47effe38196a64cb730b9d85ef166f3d6c6f7fca6c8edcb1bc87700",
"time_stamp": "2021033014385656S",
"total_fee": 100
}
Order Refund SUCCESS Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range:
|
msg |
String(32) |
YES |
the response message. |
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
status_code |
int |
YES |
1: it only shows the calling of the API is successful, not meaning the target business operation succeed. Non 0: Calling of the API failed, merchant can use the same parameters to launch the request again. |
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(32) |
YES |
2020042015374848S |
the time stamp of request order |
version |
String(32) |
NO |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
appid |
String(32) |
YES |
mch35000 |
Your Merchant Number. Check on how to find your appid/Merchant No.. The format is mch{Merchant No}. |
attach |
String(127) |
NO |
any extra information can be added here. |
|
cash_refund_fee |
int |
YES |
the currency Amount refunded to customer, normally in CNY. |
|
channel_order_no |
String(32) |
YES |
1207919130 |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
channel_refund_no |
String(32) |
YES |
1207919130 |
generated by channel(wechat), each refund no. can be used once only. |
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
ksher_order_no |
String(32) |
YES |
90020210330180132318847 |
Order no. generated by Ksher. |
ksher_refund_no |
String(32) |
YES |
90020210330180400878914 |
generated by Ksher, each refund no. can be used once only. |
mch_order_no |
String(32) |
YES |
generated by merchant self, it must be unique on the merchant side. |
|
mch_refund_no |
String(32) |
YES |
generated by merchant self, each refund no. can be used once only. |
|
nonce_str |
String(32) |
YES |
Random string |
|
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
refund_fee |
Int |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
result |
string(16) |
YES |
SUCCESS |
Value range: SUCCESS |
total_fee |
Int |
YES |
total amount of the order and it must be an integer, the unit is cent |
|
{
"code": 0,
"data": {
"appid": "mch35005",
"attach": "",
"cash_refund_fee": 100,
"channel": "airpay",
"channel_order_no": "1207919130",
"channel_refund_no": "1207919130",
"device_id": "",
"fee_type": "THB",
"ksher_order_no": "90020210330180132318847",
"ksher_refund_no": "90020210330180400878914",
"mch_order_no": "2103301701291052",
"mch_refund_no": "refund_2103301701291052",
"nonce_str": "9c75d11e7572f887dbbfe374f205d5eb",
"operator_id": "",
"refund_fee": 100,
"refund_time": "2021-03-30 17:04:01",
"result": "SUCCESS",
"total_fee": 100
},
"msg": "ok",
"sign": "4e8defe365f08a66b28f40843117268c49c772807196ac0b55591f992a9dcdff5d68f8fec01f029d0922df6795b72e211a3fc2de8056e4b19dc6ceaad86894f1",
"status_code": "",
"status_msg": "",
"time_stamp": "2021-03-30T18:04:01.525337+08:00",
"version": "3.0.0"
}
Order Refund FAIL Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range:
|
msg |
String(32) |
YES |
the response message. |
|
version |
String(32) |
YES |
"3.0.0" |
version of the API |
status_code |
int |
YES |
0: it only shows the calling of the API is successful, not meaning the target business operation succeed. Non 0: Calling of the API failed, merchant can use the same parameters to launch the request again. |
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(32) |
YES |
2020042015374848S |
the time stamp of request order |
data Parameters (JSON ) |
||||
result |
string(16) |
YES |
FAIL |
Value range:
|
err_code |
String(32) |
YES |
SYSTEMERROR |
refer to the error list for the details |
err_msg |
String(128) |
YES |
system error |
the detailed description of the error |
nonce_str |
String(32) |
YES |
Random string |
|
{
"code": 0,
"data": {
"err_code": "KSHER_SYSTEMERROR",
"err_msg": "ksher system error. please retry.",
"nonce_str": "19f47657a679646276f213eb67782763",
"result": "FAIL"
},
"msg": "ok",
"sign": "055ac35d8eede994c67398ede3ce91c3970460b379f26eff58bc4a838a9f1a837e41dc4a9a5c1fe6f1ba8f153459f679cdbfaeec94bcbcb16fe0d54a76b84e59",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-07-14T16:43:41.178834+08:00",
"version": "3.0.0"
}
Refund Query
Note: Promptpay and Aliapy not support this feature.
API method
URL |
|
Method |
POST |
Parameter organization format |
application/x-www-form-urlencoded |
Refund Query Request Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
appid |
String(32) |
YES |
mch12345 |
Your Merchant Number. Check on merchant ksher. The format is mch{Merchant No}. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
mch_order_no |
String(32) |
YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.) |
order number on merchant side, must be unique |
|
ksher_order_no |
String(32) |
YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.) |
Order no. generated by Ksher. |
|
channel_order_no |
String(32) |
YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.) |
Order no. generated by payment channel(wechat, alipay etc.) |
|
channel |
String(32) |
NO |
Value range: wechat/alipay/linepay/airpay/promptpay/truemoney |
|
total_fee |
Int |
YES |
total amount of the order and it must be an integer, the unit is cent |
|
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
mch_refund_no |
String(32) |
YES |
generated by merchant self, each refund no. can be used once only. |
|
refund_fee |
Int |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
attach |
String(127) |
NO |
any extra information can be added here. |
|
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
time_stamp |
String(256) |
YES |
time stamp example: "time_stamp": "20190622131804" |
|
version |
String(32) |
NO |
"3.0.0" |
API version |
{
"appid": "mch20163",
"channel": "wechat",
"fee_type": "THB",
"ksher_order_no": "",
"mch_order_no": "1495773587",
"nonce_str": "IeYrVB93dq8JbJbHJq1oZAW4d7PEb4jU",
"sign": "14bc865f1d360210ef9b7551304faa905f2240e1f7eca2ddaadcdc1287cda90f3149dac8aab7163084be4fdf56fe12bdc95ae87a6b4187b94e4118e435f0db23",
"time_stamp": "20170516125822",
"version": "3.0.0"
}
or
{
"appid": "mch28321",
"ksher_order_no": "70020200714124058662887",
"mch_refund_no": "refund1594708697",
"nonce_str": "a42e75d0f3859e31f93146aaf4cf4f48",
"sign": "78f93882b5456bcd3bba29704c820f93f0863c633697322147f60b32eaeb78f4f99b79d65ff48cd1118c1955a05b674fb496b38e29692064608bf511f09141bc",
"time_stamp": "2020071417093939S"
}
Refund Query SUCCESS Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range :
|
msg |
String(32) |
YES |
the response message. |
|
status_code |
reserved for future use |
|||
status_code |
int |
YES |
1: it only shows the calling of the API is successful, not meaning the target business operation succeed. Non 0: Calling of the API failed, merchant can use the same parameters to launch the request again. |
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(32) |
YES |
2020042015374848S |
the time stamp of request order |
version |
String(32) |
NO |
"3.0.0" |
API version |
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
data Parameters (JSON ) |
||||
cash_fee |
int |
YES |
CNY |
specifies the total cash payment amount of a transaction. |
cash_fee_type |
string(16) |
YES |
CNY |
the currency buyer paid, comply with ISO 4217, CNY by default. |
channel_order_no |
String(32) |
YES |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
|
channel_state |
string(16) |
YES |
SUCCESS |
the response state from e-wallet |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
ksher_order_no |
String(32) |
YES |
Order no. generated by Ksher. |
|
mch_order_no |
String(32) |
YES |
generated by merchant self, it must be unique on the merchant side. |
|
nonce_str |
String(32) |
YES |
"sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y" |
Random string |
refund_count |
int |
YES |
Total times of refund for this order. |
|
refund_fee |
Int |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
refund_orders Parameters (JSON ) |
||||
channel_refund_no |
String(32) |
YES |
generated by channel(wechat), each refund no. can be used once only. |
|
ksher_refund_no |
String(32) |
YES |
generated by Ksher, each refund no. can be used once only. |
|
mch_refund_fee |
String(32) |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
mch_refund_no |
String(32) |
YES |
generated by merchant self, each refund no. can be used once only. |
|
refund_state |
String(32) |
YES |
SUCCESS |
refund status:
|
refund_time |
String(14) |
YES |
When the refund was made. |
{
"code": 0,
"data": {
"appid": "mch28321",
"cash_fee": 204,
"cash_fee_type": "THB",
"channel_order_no": "509366",
"fee_type": "THB",
"ksher_order_no": "70020200714124058662887",
"mch_order_no": "2007141140508182",
"nonce_str": "a42e75d0f3859e31f93146aaf4cf4f48",
"refund_count": 1,
"refund_fee": 0,
"refund_orders": [
{
"channel_refund_no": "",
"ksher_refund_no": "70020200714143818745766",
"mch_refund_fee": 100,
"mch_refund_no": "refund1594708697",
"refund_state": "FAIL",
"refund_time": "2020-07-14 13:38:18"
}
],
"result": "SUCCESS",
"time_end": "2020-07-14 13:38:18",
"total_fee": 204
},
"msg": "ok",
"sign": "01bc29db4a5d01c0d2a414dd1fc7e8ab122ce48934fd2f9c63e748e9a6b2a2dc52f35bedffda2a42a1eea686dad3fc5af8c481d28bd76fff8870e029094aac76",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-07-14T17:09:40.730470+08:00",
"version": "3.0.0"
}
Refund Query FAIL Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Rangne:
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
msg |
String(32) |
YES |
the response message. |
|
status_code |
int |
YES |
Value Range:
|
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(256) |
YES |
"20190622131804" |
time stamp |
version |
String(32) |
YES |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
result |
string(16) |
YES |
FAIL |
Value range:
|
nonce_str |
String(32) |
YES |
"sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y" |
Random string |
err_code |
String(32) |
YES |
SYSTEMERROR |
Refer to the error list for the details |
err_msg |
String(128) |
YES |
system error |
the detailed description of the error |
{
"code": 0,
"data": {
"err_code": "KSHER_INVALID_ORDER_NO",
"err_msg": "failed to find this order no ('mch_refund_no:refund1594708697i' ).",
"nonce_str": "4d4309ac8556d17238a297ea917b7b81",
"result": "FAIL"
},
"msg": "ok",
"sign": "012cc8f39b1b41857ed2511066ad76c4045c87a98b94e3574064b9ac130e5b56b4a572c96a37644a8b53a7ca25ee5bae051c9b89a8323852e2eb805484a4d399",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-07-14T17:13:32.181825+08:00",
"version": "3.0.0"
}
Order Close
API method
URL |
|
Method |
POST |
Parameter organization format |
application/x-www-form-urlencoded |
Order Close Request Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
appid |
String(32) |
YES |
mch12345 |
Your Merchant Number. Check on merchant ksher. The format is mch{Merchant No}. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
channel |
String(32) |
YES |
Value range:
|
|
mch_order_no |
String(32) |
YES |
order number on merchant side, must be unique |
|
ksher_order_no |
String(32) |
YES |
Order no. generated by Ksher. |
|
channel_order_no |
String(32) |
YES |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
|
time_stamp |
String(256) |
YES |
time stamp example: "time_stamp": "20190622131804" |
|
{
"code": 0,
"data": {
"appid": "mch36591",
"mch_order_no": "test3",
"nonce_str": "7a57e84495bfe7abff4ff23591516511",
"result": "SUCCESS"
},
"msg": "ok",
"sign": "61805f39c7c484d936cbf40c864b11b9fec0b93205fdbc4efe5b71c9c7dfd98152e1ebc9af5866dd54cf58008418b52ea6122e7994f1d3fe5e6d559a8b022e5f",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-12-25T17:44:54.226116+08:00",
"version": "3.0.0"
}
Order Close SUCCESS Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
code msg:
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
msg |
String(32) |
YES |
the response message. |
|
status_code |
int |
YES |
|
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(256) |
YES |
"20190622131804" |
time stamp |
version |
String(32) |
YES |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
appid |
String(32) |
YES |
mch35000 |
Your Merchant Number. Check on how to find your appid/Merchant No.. The format is mch{Merchant No}. |
mch_order_no |
String(32) |
YES |
generated by merchant self, it must be unique on the merchant side, same as the input. |
|
nonce_str |
String(32) |
YES |
Random string |
|
result |
string(16) |
YES |
SUCCESS |
Value range: SUCCESS |
{
"code": 0,
"data": {
"appid": "mch36591",
"mch_order_no": "test3",
"nonce_str": "7a57e84495bfe7abff4ff23591516511",
"result": "SUCCESS"
},
"msg": "ok",
"sign": "61805f39c7c484d936cbf40c864b11b9fec0b93205fdbc4efe5b71c9c7dfd98152e1ebc9af5866dd54cf58008418b52ea6122e7994f1d3fe5e6d559a8b022e5f",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-12-25T17:44:54.226116+08:00",
"version": "3.0.0"
}
Order Query Fail Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range:
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
msg |
String(32) |
YES |
the response message. |
|
status_code |
int |
YES |
|
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(256) |
YES |
"20190622131804" |
time stamp |
version |
String(32) |
YES |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
result |
string(16) |
YES |
FAIL |
Value range: FAIL, NOTSURE.
|
err_code |
String(32) |
YES |
SYSTEMERROR |
Refer to the error list for the details |
err_msg |
String(128) |
YES |
system error |
the detailed description of the error |
nonce_str |
String(32) |
YES |
Random string |
|
{
"code": 0,
"data": {
"err_code": "KSHER_INVALID_ORDER_NO",
"err_msg": "failed to find this order no ('mch_order_no:test33,ksher_order_no:,channel_order_no:',).",
"nonce_str": "7a57e84495bfe7abff4ff23591516511",
"result": "FAIL"
},
"msg": "ok",
"sign": "01d2436ef5ed44cb77d3594adccc2c92e2a6a8b39cad2bd1abc3dcd9d64b7c00a303355fc47cb61c3862fb116ed7f67b9db73634da95e91a1fcfc6b12a96da59",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-12-25T17:55:25.248752+08:00",
"version": "3.0.0"
}
ERROR CODES
Name | Description | Reason | Solution |
---|---|---|---|
APPID_NOT_EXIST |
APPID not exist |
APPID was absent in parameters. |
Please check if the APPID is correct. |
APPID_MCHID_NOT_MATCH |
APPID and MCHID not match |
APPID and MCHID not match |
please check if the APPID and mchid match. |
INVALID_ORDER_NO |
invalid order no. |
order no. passed in is not correct. |
parameter error, please check if the original order no. passed in exist or if the original order is failed. |
KSHER_SIGN_ERROR |
signature error |
merchant signature is not correct |
check the signature parameter |
KSHER_SYSTEMERROR |
Error occurred during handling the request. |
Error occurred during handling the request. |
Issue the refund request again. |
KSHER_VERSION_ERROR |
API version used by merchant is not compatible with the API of the vendor |
API version used does not match |
contact the vendor to confirm current API version |
KSHER_ERROR_ORDER_NO |
Missing order no parameter |
Missing order no parameter |
Check the order no.(mch_order_no, ksher_order_no, channel_order_no) |
KSHER_REFUND_EXPIRE |
Refund can not be made via API by merchant after the order already settled. |
Refund can not be made via API by merchant after the order already settled. |
Please submit refund request on the Ksher merchant platform. |
KSHER_INVALID_MCHINFO |
merchant information is not correct |
the appid passed in does not exist in the vendor’s system |
confirm if the appid passed in is correct, contact the vendor if needed. |
KSHER_INVALID_ORDER_NO |
order no. does not exist |
the order no. passed in cannot be found in vendor’s system |
check if the order no. passed in is correct |
KSHER_INVALID_REFUND_FEE |
invalid amount to refund |
amount to refund is greater than the available amount |
check if the amount to refund is correct |
KSHER_INVALID_REFUND_AMOUNT |
Partially refund is not allowed |
Partially refund is not allowed |
refund completely is allowed. |
KSHER_INVALID_REFUND_BALANCE |
The balance amount of this order(price fee minus amount already refunded.) is not enough for the amount to refund. |
The balance amount of this order(price fee minus amount already refunded.) is not enough for the amount to refund. |
Check the amount to refund. |
KSHER_INVALID_REFUND_ORDER_NO |
invalid refund order no. |
the refund order no. passed already used. |
check if the refund order no. passed in, use a new one. |
KSHER_INVALID_REFUND_FEE_OR_TYPE |
Refund currency or amount invalid |
Refund currency or amount invalid |
Check the currcency or amount to refund. |
KSHER_PARAM_OVERLENGTH |
Some parameters are too long. |
Some paramters are too long |
Check the parameters. |
KSHER_INVALID_PARAM |
Missing parameter(s) |
Some parameter(s) invalid |
Check parameter(s) is correct |
KSHER_DUPLICATED_ORDERNO |
The merchant order no already used. |
The merchant order no already used. |
Use a new order no to make the order again. |
KSHER_EXCEED_AMOUNT_LIMIT |
the amount to pay exceeds the amount limit configured |
the amount to pay exceeds the amount limit configured |
make sure if the amount to pay exceeds the limit. |
KSHER_FEETYPE_NOT_MATCH |
fee type does not match |
pricing fee type does not match the registered fee type |
merchant needs to modify the program, if merchant is sure that the fee type passed in is correct, contact the vendor. |
KSHER_DUPLICATED_ORDERNO |
The merchant order no already used. |
The merchant order no already used. |
Use a new order no to make the order again. |
KSHER_DUPLICATED_REFUND_ORDERNO |
invalid refund order no |
the refund order no. passed already used. |
check if the refund order no. passed in, use a new one. |
KSHER_AMOUNT_IS_TOO_SMALL |
The amount is too small. |
The amount is too small |
Pass in a larger amount |
KSHER_CHANNEL_RESPONSE_ERROR |
Error occurred during query operation |
Error occurred during query operation |
Make an order query again. |
LACK_PARAMS |
parameter absent |
mandatory parameter(s) was absent |
please check if the parameters were sufficient |
MCHID_NOT_EXIST |
MCHID not exist |
MCHID was absent in parameters. |
please check if the MCHID is correct. |
NOAUTH |
the merchant has no access to this interface. |
the merchant has not yet got the access to this interface. |
contact the vendor(Ksher) |
NOT_UTF8 |
coding format error |
required coding format was not used. |
please use UTF-8 coding |
NOTENOUGH |
Not enough unsettled fund for refund |
There is not enough unsettled fund for refund |
This error code means refund request failed due to not enough unsettled fund for refund.Merchants need to contact Ksher to authorise credit for this kind of situation. If unsettled fund is enough ,please call the refund API once there is enough unsettled fund, or retry it continuously. |
ORDERPAID |
order closed already |
the order closed already. |
the order no. is already closed, please launch a new order. |
ORDERNOTEXISTR |
the order no. does not exist |
the order does not exist in the system |
merchant need to check if the order no. is correct. |
OUT_TRADE_NO_USED |
repetitive out_trade_no |
the same order cannot be submitted for multi times. |
please verify whether the out_trade_no. was submitted repetitively |
PARAM_ERROR |
parameters error |
parameters requested are not correct |
check the application according to the information returned, contact the vendor if needed. |
POST_DATA_EMPTY |
post parameters are empty |
post parameters should not be empty |
please check the paremeters posted in the http request. |
REQUIRE_POST_METHOD |
please use POST method |
the method used to pass the parameters was not POST. |
please check if the parameters was passed by POST method |
SYSTEMERROR |
system error |
system timeout |
call the order query API immediately to check order status, and decide next step according to the status of the order |
SIGNERROR |
signature error |
the signature parameter is not correct |
please check if the signature parameter and method meet the requirements of signature algorithm |
TRADE_STATE_ERROR |
order state error |
there will be latency for the result for refund application, please query later(20 minutes for balance payment, 3 workdays for card payment) |
|
USER_ACCOUNT_ABNORMALE |
refund failed |
user account is exceptional or unregistered. |
this status stands for the failure of the refund operation, merchant can handle the refund by himself. |
XML_FORMAT_ERROR |
XML format error |
XML format error |
please check whether the format of XML parameters is correct. |
SHOP_ID_ERROR |
Invalid merchant information |
Invalid merchant information |
Please check if the APPID is correct. |
CANCEL_ERROR |
The cancellation failed |
The cancellation failed |
Order cannot cancel because of wallet not support or already paid |
ORDER_NOT_EXIST |
This order does not exist. |
Not found this order |
Check mch order no is correct or not |
USER_NOT_EXIST |
This user does not exist. |
Not found this order |
Check mch order no is correct or not |
ORDER_NOT_PAY |
This order has not been paid. |
This order has not been paid. |
Order still not paid |
ORDER_ALREADY_REFUND |
This order has been refunded. |
This order has been refunded. |
order has been refunded. |
REFUND_FAILED |
Refund failed. |
Refund failed. |
check value is correct |
EXPIIRE_ORDER |
The order has timed out |
The order has timed out |
expired time set in order is timeout |
ORDER_ERROT |
Order number must be unique |
Order number must be unique |
Check order should be not duplicate or create before |
SHOP_NOT_EXIST |
This shop does not exist |
This shop does not exist |
Please check if the APPID is correct. |
PRICE_NOT_EXIST |
Invalid price |
Invalid price |
Check amount should be not 0 or create this order before |
MCH_ORDER_ERROR |
Duplicate order number |
Duplicate order number |
Check order should be not duplicate or create before |
RADIS_DOES_NOT_EXIST |
Redis does not exist |
Check url is correct |
|
QUERY_ORDER_ERROR |
Search for failed not completed transaction |
Search for failed not completed transaction |
check your value is correct |
ORDER_PAYMENT_ERROR |
Your payment failed |
Your payment failed |
Retry to paid again |
SMS_CODE_ERROR |
Failed to receive OTP code |
Failed to receive OTP code |
check you mobile phone is correct |
CHANNEL_LIST_ERROR |
You have not apply for any ewallets nor credit card payment services |
You have not apply for any ewallets nor credit card payment services |
check your channel value is correct or support |
MEMBER_ID_ERROR |
member_id cannot be number only |
member_id cannot be number only |
Please check your member_id not use Real number like 1,1200,00001, but can use string with number like ABC1234. |
SAVE_CARD_ERROR |
Failed to save card |
Failed to save card |
Check Bank card channel can support save card function |
MEMBER_CARD_ERROR |
This card cannot be used |
This card cannot be used |
This card is not available, please change card to paid |
EMPTY_CARD_NO |
Card information is incorrect |
Card information is incorrect |
Check your card input information |
DELETE_MEMBER_CARD_ERROR |
Failed to delete card |
Failed to delete card |
Refresh page and try to delete again |
MEMBER_CARD_NOT_EXIST |
This card does not exists |
This card does not exists |
check your member_id is correct |
MEMBER_ID_LENGTH_OUT_OF_LIMIT |
member_id cannot be more than 32 characters |
member_id cannot be more than 32 characters |
Please check your member_id not use Real number like 1,1200,00001, but can use string with number like ABC1234. and member_id cannot be more than 32 characters |
ORDER_ALREADY_CANCEL |
The order has been canceled |
The order has been canceled |
This order already cancel, Please try to create the new order. |
ORDER_ALREADY_CANCEL_OPERATION_CANNOT_BE_PERFORMED |
The order has been canceled, this action cannot proceed |
The order has been canceled, this action cannot proceed |
This order already cancel, Please try to create the new order. |
ORDER_ALREADY_PAY_OPERATION_CANNOT_BE_PERFORMED |
This order has already been paid, this action cannot proceed |
This order has already been paid, this action cannot proceed |
This order already paid, Please try to create the new order. |
ORDER_ALREADY_PAYMENT_SUCCESS |
Order has been completed |
Order has been completed |
This order already paid, Please try to create the new order. |
INSTAL_FEE_PAYER_ERROR |
Failed to apply setting of interest-bearing |
Failed to apply setting of interest-bearing |
check at instal_fee_payer_merchant_channel_list or instal_fee_payer is correct |
TRUEMONEY_OPT_CODE_ERROR |
Wrong OTP code |
Wrong OTP code |
check OTP is correct |
MANY_OPEN |
Someone is paying this bill. DO NOT pay twice. |
Someone is paying this bill. DO NOT pay twice. |
check on exclusive is turn on or not. if have another person open payment page |
LANG_REPEAT_SUBMIT |
Repetitive submission |
Repetitive submission |
order already create before, create the new one. |