POS Consumer-presented QR Code(B Scan C)Integration Guide

Overview

This document describes how merchant or software company use Ksher Quickpay API. The target readers are R&D engineers, architects and other related integration engineers.

Applicable Cases

Support E-Wallets: WeChat Pay/Alipay/Airpay/LinePay/True Money

User Experience Scenarios

quick 1
quick 2
quick 3

Payment Flow Sequence Diagram

Quick pay payment flow
Figure 1. Quick pay payment flow
  1. The cashier calculate the total amount of the goods choosed by the buyer.

  2. The buyer open the Wechat App on his(her) mobile and show cashier the QR code of quickpay.

  3. The cashier use scanner of POS or EDC to scan the QR code.

  4. The POS or EDC system call quick_pay WebService API.

  5. The buyer may need to confirm the payment by entering PIN or using his(her) finger print.

  6. A response will be returned to POS or EDC system with the payment result of 'SUCCESS', 'FAIL' or 'NOTSURE'.

  7. If NOTSUER got, then order_query WebService API should be called periodically to query the state of the payment.

  8. For order_query operations, if the state of the payment is always' NOTSUER', cashier can choose to reverse this order. It is strongly recommended to reverse any abnormal order.

Specifications of Quick Pay APIs

Order Apply

API method

URL

https://api.mch.ksher.net/KsherPay/quick_pay

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

wechat

Value range: wechat/alipay/truemoney/linepay/airpay

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(256)

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. refer to with ISO 4217.

product

String(512)

NO

product info.

attach

String(127)

NO

any extra information can be added here.

device_id

String(32)

NO

POS001

the terminal device id from which the request is issued.

operator id

String(32)

NO

10209

the cashier ID at the merchant.

auth_code

String(32)

YES

POS001

authorization code, scanned from the barcode or QR code on the wechat interface of consumer

Example 1. Request Example
{
    "appid": "mch20163",
    "auth_code": "130140675276722852",
    "channel": "wechat",
    "fee_type": "THB",
    "mch_order_no": "1495773587",
    "nonce_str": "sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y",
    "sign": "4b609e384500ba8b2ed5eddbcc3aab5c7325c45a13bb5 31655ac459022da0d15ead7e6ab8d73f6d1182117547a6e53871c8da44d99cf02e9d8420c9b20130a2c",
    "time_stamp": "20170526113947",
    "total_fee": 100,
    "version": "3.0.0"
}

Order Apply SUCCESS Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range: * 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.

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

reserved for future use

status_msg

reserved for future use

time_stamp

String(32)

YES

2020042015374848S

the time stamp of request order

time_end

String(14)

NO

2014-10-30 13:35:25

the merchant local time when the order is finished,the format is yyyy-MM-dd HH:mm:ss

version

version of the API

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)

OPTINAL

any extra information can be added here.

cash_fee

int

YES

the amount buyer paid in the currency of cash_fee_type

cash_fee_type

int

YES

comply with ISO 4217, CNY by default.

channel_order_no

String(32)

YES

Order no. Generated by wechat.

device_id

String(32)

OPTINAL

Id for terminal from which the ordering request is issued

fee_type

String(16)

YES

CNY

comply with ISO 4217, 3 characters, the default is CNY

ksher_order_no

String(32)

YES

generated by Ksher

mch_order_no

String(256)

YES

123456acb

Merchant order number, generated by merchant self. It must be unique on the merchant side.

nonce_str

String(32)

YES

ae0e6jm55qlq1o7

Random string, must be unique for signature.

openid

String(128)

YES

Each customer has a unique id under each service provider.

operation

QUICK-PAY

this shows what operatation the request is.

operator_id

the cashier ID at the merchant.

rate

string(16)

YES

exchange rate of foreign currency to RMB.

result

string(16)

YES

SUCCESS

Value range: SUCCESS

time_end

String(14)

OPTINAL

2014-10-30 13:35:25

the merchant local time when the order is finished,the format is yyyy-MM-dd HH:mm:ss

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

Example 2. SUCCESS Response Example
{
    "code": 0,
    "data":
    {
        "appid":"mch20163",
        "attach": "",
        "cash_fee": 1,
        "cash_fee_type": "CNY",
        "channel_order_no": "4001432001201706013662559711",
        "device_id": "",
        "fee_type": "THB",
        "ksher_order_no": "60020170526123947574894",
        "mch_order_no": "1495773587",
        "nonce_str": "sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y",
        "openid": "o5x64wG48fnZyqWOxqJl-MPSkNJ4",
        "operation": "QUICK-PAY",
        "operator_id": "",
        "rate": "0.200212",
        "result": "SUCCESS",
        "time_end": "2017-06-01 10:24:37",
        "total_fee": 100
    },
    "msg": "ok",
    "sign": "65126acc40a48761751eb9fbabf41ca6d08a44be2a175edcaa95cc7e119c224d76d82d5776be6f80ce9a4e535469a7514d318faf5619151266532557ac0f8bd2",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "",
    "version": "3.0.0"
}

Order Query Fail Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range: * 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.

msg

String(32)

YES

the response message.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

status_code

reserved for future use

status_msg

reserved for future use

time_stamp

String(32)

YES

2020042015374848S

the time stamp of request order

version

version of the API

data Parameters (JSON )

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

ae0e6jm55qlq1o7

Random string, must be unique for signature.

result

string(16)

YES

FAIL

Value range: FAIL, NOTSURE

Example 3. Fail Response Example
{
    "code": 0,
    "data": {
        "err_code": "KSHER_DUPLICATED_ORDERNO",
        "err_msg": "order no. already used.",
        "nonce_str": "33f52a98cd684deadbe78fab3365ef81",
        "result": "FAIL"
    },
    "msg": "ok",
    "sign": "8f0891d6ebf9060e24065e1c8423e154e5b3a5c9ffcca92fc838e89216f0f9d5918879489fe60797681f4db8f13b9cb32ad02afd1642cf1907f9ef81a8d9f895",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "2020-12-25T16:45:25.211077+08:00",
    "version": "3.0.0"
}

Order Query

API method

URL

https://api.mch.ksher.net/KsherPay/order_query

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

wechat

Value range: wechat/alipay/linepay/airpay/promptpay/truemoney

time_stamp

String(256)

YES

time stamp example: "time_stamp": "20190622131804"

Example 4. Request Example
 {
    "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:

  • 0: it only shows the calling of the API is successful, not meaning the target business operation succeed.

  • Not 0: Calling of the API failed, merchant can use the same parameter to launch the request again.

sign

String(256)

YES

refer to relevant chapter Signature Algorithm

msg

String(32)

YES

the response message.

status_code

int

YES

  • 0: it only shows the calling of the API is successful, not meaning the target business operation succeed.

  • Not 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(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)

OPTINAL

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)

OPTINAL

Id for terminal from which the ordering request is issued.

fee_type

String(16)

YES

CNY

comply with ISO 4217, 3 characters

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)

OPTINAL

The id for 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)

OPTINAL

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/NOTSURE/SUCCESS/NOTPAY/CLOSED/PAYERROR/REFUND

  • FAIL:stands for the order query operation failed for some reasons, such as: the order no. could not be found in the ksher database or some parameters are not correct, etc. , it does not means the order failed, merchant should decide the next step according to the error code.

  • NOTSURE: the result of the payment is unknown, order_query operation is needed to check the real state of the payment.

  • SUCCESS: payment succeeded

  • NOTPAY: customer quit the payment window, so payment not finished.

  • CLOSED: the order is closed, so customer will be not able to pay it any more.

  • PAYERROR: the order failed for some reasons, like: wrong password, errors occurred between wechat and bank.

  • REFUND: the order has refunded partially or completely.

Example 5. SUCCESS Response Example
{
    "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:

  • 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.

sign

String(256)

YES

refer to relevant chapter Signature Algorithm

msg

String(32)

YES

the response message.

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(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

Example 6. Fail Response Example
{
    "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"
}

Order Reverse

Only WeChat Pay E-Wallet is supported

API method

URL

http://api.mch.ksher.net/KsherPay/order_reverse

Method

POST

Parameter organization format

application/x-www-form-urlencoded

Order Reverse Request Parameters

Parameter Type Required Example Description

sign

String(256)

YES

refer to relevant chapter Signature Algorithm

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

Random string

mch_order_no

String(32)

YES

generated by merchant self, it must be unique on the merchant side.

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

wechat

Value range: wechat

product

String(512)

OPTINAL

OPTINAL

attach

String(127)

OPTINAL

any extra information can be added here.

device_id

String(32)

OPTINAL

POS001

the terminal id from which the request is issued.

operator_id

String(32)

OPTINAL

The id for cashier

Example 7. Request Example
{
    "appid": "mch20163",
    "channel": "wechat",
    "channel_order_no": "",
    "ksher_order_no": "",
    "mch_order_no": "1496287229",
    "nonce_str": "YbMwF8WjGJlwRsx6fvUVVanYzbaUwGqS",
    "sign": "0e24408a357d14cdd1ddad8c1b6c78e1be2b9fdb1a01cc9caf50b336d50fd313b6308710c5f7e57c7cd90bfaa70da1010830be3dfcbb9cbd844f6d3c2226ab73",
    "time_stamp": "20170601102216",
    "version": "1.0.0"
}

Order Reverse SUCCESS Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range:

  • 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 parameter to launch the request again.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

msg

status_code

reserved for future use

status_msg

reserved for future use

time_stamp

time stamp of the response

version

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

SUCCESS

Example 8. SUCCESS Response Example
{
    "code": 0,
    "data": {
        "appid": "mch20163",
        "mch_order_no": "1496287229",
        "nonce_str": "YbMwF8WjGJlwRsx6fvUVVanYzbaUwGqS",
        "result": "SUCCESS"
    },
    "msg": "ok",
    "sign": "95fd51e0092118d2049522b03baf1d5a05e2d37d32cc6065ef851d72772bb12df625ee032e180f066446f3fe4aa8ec298fba62501597d8ea54b9935bb2d7e58c",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "",
    "version": "2.0.0"
}

Order Reverse FAIL Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range:

  • 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 parameter to launch the request again.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

msg

status_code

reserved for future use

status_code

reserved for future use

status_msg

reserved for future use

time_stamp

String(32)

YES

2020042015374848S

the time stamp of request order

version

version of the API

data Parameters (JSON )

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

result

string(16)

YES

FAIL

FAIL

Example 9. FAIL Response Example
{
    "code": 0,
    "data": {
        "err_code": "KSHER_INVALID_ORDER_NO",
        "err_msg": "failed to find this order no ('mch_order_no:14957735877,ksher_order_no:,channel_order_no:',).",
        "nonce_str": "p7hJ4T8mHNDNWhQX1yFwgDn3IUd3nohg",
        "result": "FAIL"
    },
    "msg": "ok",
    "sign": "52271285fec6ed13fbe30762e77f32cbde77745c7ea5398b5ea6f2d3ff6d2d6b38014eb34afad6b09bd95aabcd70ce8aea1937b090233368a8a85115e55c7a51",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "",
    "version": "2.0.0"
}

Order Refund

API method

URL

https://api.mch.ksher.net/KsherPay/order_refund

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)

OPTINAL

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

wechat

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

Priceing Currency code. refer to with ISO 4217.

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)

OPTINAL

any extra information can be added here.

device_id

String(32)

OPTINAL

POS001

the terminal id from which the request is issued.

operator_id

String(32)

OPTINAL

The id for cashier

version

String(32)

OPTINAL

API version

Example 10. Request Example
 {
    "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:

  • 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 parameter to launch the request again.

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)

OPTINAL

"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)

OPTINAL

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)

OPTINA

POS001

the terminal id from which the request is issued.

fee_type

String(16)

YES

CNY

Pricing currency, comply with ISO 4217, 3 characters, the default is CNY

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)

OPTINAL

The id for cashier

refund_fee

Int

YES

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

Example 11. SUCCESS Response Example
{
    "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:

  • 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 parameter to launch the request again.

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:

  • FAIL : failed to close,in this case, merchant should re-launch the close request.

  • NOTSURE: it is not sure if the close operation succeed.

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

Example 12. FAIL Response Example
{
    "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 not support this feature.

API method

URL

https://api.mch.ksher.net/KsherPay/refund_query

Method

POST

Parameter organization format

application/x-www-form-urlencoded

Refund Query Request Parameters

Parameter Type Required Example Description

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

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

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

wechat

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

CNY

Pricing currency, comply with ISO 4217, 3 characters, the default is CNY, refer to Appendix2 for its value range

mch_refund_no

String(32)

YES

generated by merchant self, each refund no. can be used once only.

refund_fee

Int

YES

amount to refund, unit is cent, it must be an integer. refund partly is permitted.

attach

String(127)

OPTINAL

any extra information can be added here.

device_id

String(32)

OPTINAL

POS001

the terminal id from which the request is issued.

operator_id

String(32)

OPTINAL

The id for cashier

time_stamp

String(256)

YES

time stamp example: "time_stamp": "20190622131804"

version

String(32)

OPTINAL

"3.0.0"

API version

Example 13. Request Example
{
    "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 :

  • 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 parameter to launch the request again.

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)

OPTINAL

"3.0.0"

API version

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

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

CNY

comply with ISO 4217, 3 characters, the default is CNY

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

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

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:

  • REFUNDSUCCESS—succeeded to refund,

  • FAIL—failed to refund, PROCESSING—the refund application is being processed,

  • NOTSURE—not sure(merchant needs to submit refund application again with the same refund no.),

  • CHANGE—change to the merchant paying(the bank card of the consumer is already unavailable or frozen, which lead to the failure of refunding back into the bank card and funds flew back to the cash account, in this case, merchant needs to refund consumer offline or through transfer )

refund_time

String(14)

YES

When the refund was made.

Example 14. SUCCESS Response Example
 {
    "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:

  • 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.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

msg

String(32)

YES

the response message.

status_code

int

YES

Value Range:

  • 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(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 .

  • FAIL : failed to close,in this case, merchant should re-launch the close request.

  • NOTSURE: it is not sure if the close operation succeed.

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

Example 15. FAIL Response Example
 {
    "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"
}

Rate Query

API method

URL

https://api.mch.ksher.net/KsherPay/rate_query

Method

POST

Parameter organization format

application/x-www-form-urlencoded

Rate_Query 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

wechat

Value range: wechat/alipay

fee_type

String(16)

YES

THB

Currency code. refer to with ISO 4217.

date

String(16)

YES

2019-04-27

The format is yyyy-MM-dd, as indicated on April 27, 2019 as 2019-04-27. Time zone is GMT+8 beijing

time_stamp

String(256)

YES

20190622131804

Time of create the request.the format is '%Y%m%d%H%M%S%SS'

version

String(32)

OPTINAL

"3.0.0"

API version

Example 16. Request Example
{
    "appid": "mch20163",
    "channel": "wechat",
    "nonce_str": "ogWfy5jDlujCyhJCKNjYQVlrSGkdj9LO",
    "fee_type": "THB",
    "date": "2019-04-27",
    "sign": "68ba48d72206a1561f6322800db9d8dabe4d1e0e1965fd31e5e10e034d2b9123291d6c596ac2b271292545275cc8bf4689ec8cdca581ff17c4ea1f3efd8e321a",
    "time_stamp": "20170516125822",
    "version": "3.0.0"
}

Rate_Query SUCCESS Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range :

  • 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 parameter to launch the request again.

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)

YES

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

the response message.

time_stamp

String(32)

YES

2020042015374848S

the time stamp of request order

data Parameters (JSON )

rate

string(16)

YES

exchange rate of foreign currency to RMB.

nonce_str

String(32)

YES

ae0e6jm55qlq1o7

Random string, must be unique for signature.

result

string(16)

YES

SUCCESS

fee_type

String(16)

YES

THB

comply with ISO 4217, 3 characters

Example 17. SUCCESS Response Example
{
    "code": 0,
    "status_code": "",
    "status_msg": "",
    "sign": "5f58aa1c15faa29a66ae994b81ec09b0731e041f83f1e9e7e1ca4ef704d365e82e46515652b8e29f46430bed697e3a241487fedd7d507abf201034a9482bf73b",
    "version": "3.0.0",
    "msg": "ok",
    "time_stamp": "",
    "data": {
        "rate": "0.21193417",
        "nonce_str": "4UPerCQYBQXNDFxiYDpuLnez4Q1puLDO",
        "result": "SUCCESS",
        "fee_type": "THB"
    }
}

Rate_Query FAIL Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range:

  • 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.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

msg

String(32)

YES

the response message.

status_code

int

YES

Value Range

  • 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(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 .

  • FAIL : failed to close,in this case, merchant should re-launch the close request.

  • NOTSURE: it is not sure if the close operation succeed.

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

Example 18. FAIL Response Example
{
    "code": 0,
    "version": "3.0.0",
    "status_code": "",
    "msg": "ok",
    "time_stamp": "",
    "status_msg": "",
    "data": {
        "nonce_str": "PMlMGZ4RxvZzbwTh6mOriMrHgtxr0fWU",
        "err_msg": "merchant not exist.",
        "result": "FAIL",
        "err_code": "KSHER_INVALID_MCHINFO"
    },
    "sign": "5f58aa1c15faa29a66ae994b81ec09b0731e041f83f1e9e7e1ca4ef704d365e82e46515652b8e29f46430bed697e3a241487fedd7d507abf201034a9482bf73b4"
}

Merchant Info

API method

URL

https://api.mch.ksher.net/KsherPay/merchant_info

Method

POST

Parameter organization format

application/x-www-form-urlencoded

Get_merchant_info Request Parameters

Parameter Type Required Example Description

sign

String(256)

YES

refer to following relevant chapter for signature algorithm, Fields required for signature 'mch_appid', 'nonce_str', 'time_stamp'

mch_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

generated by merchant self, it must be unique on the merchant side.

time_stamp

String(256)

NO

time stamp example: "time_stamp": "20190622131804"

Example 19. Request Example
{
    "appid": "mch201630",
    "nonce_str": "a3ysjwp5Z9xxuNe4eIAKDlR2up4CH1qG",
    "sign": "96e485cdf592f3da7835883b60a52b9181369dad4f3c6790f7df558b2c79c7371338bcf62f24fc77170f5c02b4d235768596874bb8a12874032ed4a4e2da9d99",
    "time_stamp": "20200828143436",
}

Get_merchant_info SUCCESS Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range:

  • 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.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm, Fields required for signature "mobile", "mch_id", "account_type", "business_mode", "nonce_str"

msg

String(32)

YES

the response message.

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(256)

YES

"20190622131804"

time stamp

version

String(32)

YES

"3.0.0"

API version

data

JSON

data Parameters (JSON )

mch_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

Random string

country_support_channel

list

YES

"airpay", "alipay", "promptpay", "ktbcard", "linepay", "truemoney", "wechat"

Channels of state support,["airpay", "alipay", "promptpay", "ktbcard", "linepay", "truemoney", "wechat"],

business_mode

String(32)

YES

online

online or offline

mch_support_channel

JSON

YES

details

mch_support_channel Parameters (JSON )

day_sum_limit

Int

YES

-1

Limit of the day - 1 means no limit, others indicate limit amount

pay_channel

String(32)

YES

wechat

channel: wechat/alipay/linepay/airpay/promptpay/truemoney

settlement_time_type

String(32)

YES

T+1

Settlement group: T+1/T+2

single_order_limit

Int

YES

-1

Single limit, - 1 means no limit

mch_id

String(32)

YES

28811

assigned by Ksher

allow_remote_pay

String(32)

Y

Whether to support remote collection Y support N not support

allow_partial_refund

String(32)

N

Whether to support partial refund Y support N not support

master_mch_id

String()

bank_info Parameters (JSON )

swift_code

string

YES

Global bank code of the account bank

account_name

string

YES

Bank account name

bank_name

string

YES

Bank of deposit

account_id

string

YES

Bank account

logo_url

string

YES

Business logo

account_type

string

YES

Formal

Formal merchant or test merchant

country_info Parameters (JSON )

country_name

string

YES

Name of country

phone_code

string

YES

country code

mch_notify_url

string(256)

YES

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.

is_master_mch

string(32)

YES

N

Is it the parent merchant

scan_type

int

2

wht

int

0

ith holding tax calculate

bd_info Parameters (JSON )

mobile

string

YES

tel of bd

bd_name

string

YES

name of bd

country_id

int

YES

country id

bd_id

string

YES

id of bd

add_time

String(16)

YES

add time

has_open_use_coupon

string

YES

N

Whether or not to open coupon write off

price_fee_type

String(16)

YES

THB

Currency of bid price

rigist_time

String(16)

YES

2020-04-01 17:54:14

rigist_time

settlement_fee_type

String(16)

YES

THB

Currency of settlement

agency_info Parameters (JSON )

mobile

string

YES

tel of agency

agency_name

string

YES

name of agency

email

string

YES

email of agency

agency_id

string

YES

id of agency

rigist_time

String(16)

YES

2020-04-01 17:54:14

rigist time

mobile

string

YES

Merchant’s mobile phone number

time_zone

string

YES

+07:00

time zone

mch_name Parameters (JSON )

mch_brief_name

string

YES

Merchant abbreviation

merchant_name

string

YES

Merchant name

contact

string

YES

Merchant contact name

operator_list Parameters (JSON )

operator_id

string

YES

mch_id

string

YES

assigned by Ksher

state

int

state

operator

string

YES

rule_id

int

0

0 is the boss and 1 is the general cashier

add_time

String(16)

YES

2020-04-01 17:54:14

add time

Example 20. SUCCESS Response Example
{
	"code": 0,
	"status_code": "",
	"status_msg": "",
	"sign": "6d85861b1c69373ab97f1d1a96a1a0495307061759085f13fdcf2d933fe9ed7651e2c33d9923ee252942b83831d521eef11369fe2ae455ef0e11acd40c0473c7",
	"version": "2.0.0",
	"msg": "ok",
	"time_stamp": "2020-09-11T11:07:19.969854+08:00",
	"data": {
		"nonce_str": "V8ULba969xAu07hSkmivC0B67HLXeNEB",
		"country_support_channel": ["airpay", "alipay", "promptpay", "ktbcard", "linepay", "truemoney", "wechat"],  // 国家支持的通道
		"mch_appid": "mch28811",
		"business_mode": "offline", // 线上online  线下 offline
		"mch_support_channel": [{
			"day_sum_limit": -1,  // 当日限额  -1 表示不限额  其他表示限额金额
			"pay_channel": "alipay",  //通道
			"settlement_time_type": "T+1",  // 结算组
			"single_order_limit": -1  // 单笔限额  -1 表示不限额
		}, {
			"day_sum_limit": -1,
			"pay_channel": "linepay",
			"settlement_time_type": "T+2",
			"single_order_limit": -1
		}, {
			"day_sum_limit": -1,
			"pay_channel": "airpay",
			"settlement_time_type": "T+2",
			"single_order_limit": -1
		}, {
			"day_sum_limit": -1,
			"pay_channel": "wechat",
			"settlement_time_type": "T+1",
			"single_order_limit": -1
		}],
		"mch_id": "28811",
		"allow_remote_pay": "Y",  // 是否支持远程收款  Y支持  N不支持
		"allow_partial_refund": "N",  // 是否支持部分退款 Y支持  N不支持
		"master_mch_id": "",
		"bank_info": {
			"swift_code": "BKKBTHBK",  // 开户行的全球银行编码
			"account_name": "hello word",  // 银行户名
			"bank_name": "004,KASIKORNBANK PUBLIC COMPANY LIMITED",  //开户行
			"account_id": "86656664448"  // 银行账号
		},
		"logo_url": "", // 商户logo
		"account_type": "Formal", // Formal 正式商户  Test 测试商户
		"country_info": {
			"country_name": "Thailand",  // 国家名称
			"phone_code": "+66" // 国家区号
		},
		"mch_notify_url": "",  // 商户通知URL
		"is_master_mch": "N",  // 是否是父商户  Y是  N不是
		"scan_type": "2",
		"wht": 0,  // ith holding tax计算
		"bd_info": {
			"mobile": "13031028803",
			"bd_name": "vicky",
			"country_id": "2",
			"bd_id": "213",
			"add_time": ""
		},
		"has_open_use_coupon": "N",  // 是否开通优惠券核销  Y开通 N不开通
		"price_fee_type": "THB",  // 标价币种
		"rigist_time": "2020-04-01 17:54:14",
		"settlement_fee_type": "THB",  //结算币种
		"agency_info": {
			"mobile": "136101101101",
			"agency_name": "54321@ksher.net",
			"email": "vicky@ksher.net",
			"agency_id": "10119",
			"regist_time": "2019-10-11 10:39:11"
		},
		"mobile": "shhhh123456",  // 商户手机号
		"time_zone": "+07:00",  // 时区
		"mch_name": {
			"mch_brief_name": "uvuvuvt++1",  // 商户简称
			"merchant_name": "vyvycyct++1"  // 商户名称
		},
		"contact": "dhhhshyd",  // 商户联系人名称
		"operator_list": [{
			"operator_id": "13994",
			"mch_id": "28811",
			"state": "1",
			"operator": "dhhhshyd",
			"rule_id": "0",  // 0 表示老板  1 表示普通收银员
			"add_time": "2020-08-13 16:43:54"
		}]
	}
}

Order Query Fail Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range:

  • 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.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

msg

String(32)

YES

the response message.

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(256)

YES

"20190622131804"

time stamp

version

String(32)

YES

"3.0.0"

API version

data

JSON

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

Example 21. Fail Response Example
{
    "code": 0,
    "data": {
        "err_code": "KSHER_INVALID_PARAM",
        "err_msg": "error param nonce_str.",
        "nonce_str": "",
        "result": "FAIL"
    },
    "msg": "ok",
    "sign": "248281e98c90131255f97bc06a8ab653d7ff5a1e1bbab7b6329cb1d326b76a41e0a1ab2a0fcfc2dff9264c3fd696c061c6d66bcff83e041dec0e31732f0f6da5",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "2020-07-15T13:24:24.649287+08:00",
    "version": "2.0.0"
}

Get Settlement Info

API method

URL

http://api.mch.ksher.net/KsherPay/get_settlement_info

Method

GET

Parameter organization format

application/x-www-form-urlencoded

Get_settlement_info Request Parameters

Parameter Type Required Example Description

mch_appid

String(32)

YES

mch35000

Your Merchant Number. Check on how to find your appid/Merchant No.. The format is mch{Merchant No}.

begin_date

String(16)

YES

2020-09-01

The format is yyyy-MM-dd, as indicated on September 01, 2020 as 2020-09-01. Time zone is GMT+8 beijing

end_date

String(16)

YES

2020-09-01

The format is yyyy-MM-dd, as indicated on September 01, 2020 as 2020-09-01. Time zone is GMT+8 beijing

pay_channel

String(32)

NO

wechat

Value range: wechat/alipay/linepay/airpay/promptpay/truemoney

sign

String(256)

YES

refer to relevant chapter Signature Algorithm,Fields required for signature 'mch_appid', 'nonce_str', 'begin_date', 'end_date', 'time_stamp'

nonce_str

String(32)

YES

Random string, must be unique

time_stamp

String(256)

YES

20190622131804

timestamp of the request

Example 22. Request Example
{
    "begin_date": "2020-07-01",
    "end_date": "2020-09-10",
    "mch_appid": "mch28811",
    "nonce_str": "db2e557e303d45576693801bf0f86b75",
    "pay_channel": "wechat",
    "sign": "2967d5a1788a477cc7be98acbbbb0a40ae2ad58be642f8a7e0fc1ffce753d070da0390992c2e655a49d72ba07cbe45ce963a3f608049ce1df3513af93c67a9dead3c977b3c03b2a7306be2c9388a1431bf8e6a574be1faa6b76cfe0ff8ec27821515df3f292de2d2769b995bff372e89438c36db83ddff3c2357810f189869c8",
    "time_stamp": "2020091611083232S"
}

Get_settlement_info SUCCESS Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range :

  • 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 parameter to launch the request again.

status_code

int

YES

reserved for future use

status_msg

String(32)

YES

reserved for future use

sign

String(256)

YES

refer to following relevant chapter for signature algorithm, Fields required for signature "begin_date", "end_date", "nonce_str"``

version

String(32)

YES

3.0.0

version of the API

msg

String(128)

YES

the response message.

time_stamp

String(32)

YES

2020042015374848S

the time stamp of request order

data Parameters (JSON )

begin_date

String(16)

YES

2020-09-01

The format is yyyy-MM-dd, as indicated on September 01, 2020 as 2020-09-01. Time zone is GMT+8 beijing

end_date

String(16)

YES

2020-09-01

The format is yyyy-MM-dd, as indicated on September 01, 2020 as 2020-09-01. Time zone is GMT+8 beijing

nonce_str

String(32)

YES

1At1iDK27LQxVnIvSwzqjlzgEZCsXTsj

Random string

settlement_data Parameters (JSON )

begin_date

String(16)

YES

2020-09-01

The format is yyyy-MM-dd, as indicated on September 01, 2020 as 2020-09-01. Time zone is GMT+8 beijing

commission_fee

int

YES

0

Service charge.

end_date

String(16)

YES

2020-09-01

The format is yyyy-MM-dd, as indicated on September 01, 2020 as 2020-09-01. Time zone is GMT+8 beijing

transfer_amount

Int

YES

0

Transfer amount

pay_channel

String(32)

wechat

Value range: wechat/alipay/linepay/airpay/promptpay/truemoney

settlement_amount

Int

YES

0

Settlement amount

settlement_date

String(16)

YES

2020-09-01

Settlement date

transfer_date

String(16)

YES

2020-09-01

Transfer date

vat

String(16)

vat

Example 23. SUCCESS Response Example
 {
    "code": 0,
    "data": {
        "begin_date": "2020-07-01",
        "end_date": "2020-09-10",
        "nonce_str": "1At1iDK27LQxVnIvSwzqjlzgEZCsXTsj",
        "settlement_data": [
            {
                "begin_date": "2020-08-18",
                "commission_fee": 0,
                "end_date": "2020-08-18",
                "pay_channel": "wechat",
                "settlement_amount": 10780,
                "settlement_date": "2020-08-19",
                "transfer_amount": 0,
                "transfer_date": "",
                "vat": 0
            },
            {
                "begin_date": "2020-08-19",
                "commission_fee": 0,
                "end_date": "2020-08-19",
                "pay_channel": "wechat",
                "settlement_amount": 2940,
                "settlement_date": "2020-08-20",
                "transfer_amount": 0,
                "transfer_date": "",
                "vat": 0
            },
            {
                "begin_date": "2020-08-20",
                "commission_fee": -57,
                "end_date": "2020-08-20",
                "pay_channel": "wechat",
                "settlement_amount": -2939,
                "settlement_date": "2020-08-21",
                "transfer_amount": 0,
                "transfer_date": "",
                "vat": -4
            }
        ]
    },
    "msg": "ok",
    "sign": "17b62a22612f5639cfb584c437d7f70d3f9da6e2a0bdcb12334ccda34eb3cde2f7d781b0352474ab689c2d9b16a7aa78bef64afbb85110fd47f468e2be091eab",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "2020-09-16T11:08:31.484616+08:00",
    "version": "2.0.0"
}

Get_settlement_info FAIL Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Rangne:

  • 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.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

msg

String(32)

YES

the response message.

status_code

int

YES

Value Range:

  • 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(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 .

  • FAIL : failed to close,in this case, merchant should re-launch the close request.

  • NOTSURE: it is not sure if the close operation succeed.

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

Example 24. FAIL Response Example
{
    "code": 0,
    "version": "2.0.0",
    "status_code": "",
    "msg": "ok",
    "time_stamp": "",
    "status_msg": "",
    "data": {
        "nonce_str": "PMlMGZ4RxvZzbwTh6mOriMrHgtxr0fWU",
        "err_msg": "merchant not exist.",
        "result": "FAIL",
        "err_code": "KSHER_INVALID_MCHINFO"
    },
    "sign": "5ac4aded99a496fb82c176efbd60359803b25b6986de1ac363909e69b3791c6812ba937b43751353080ebf322d40dd230d628c6451c8643eb8c395936cbca0b4"
}

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)

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/td>

XML format error

please check whether the format of XML parameters is correct.