Alipay Mini Program Integration Guide

Overview

This document describes how merchant or software company integrate Alipay miniprogram payment function by calling Ksher MiniProgram Pay API.

Applicable Cases

MiniProgram Pay API if for merchants who already verified mini-program on Alipay, so that who can use Ksher MiniProgram Pay API to integrate payment function.

User Experience Scenarios

Payment Flow Sequence Diagram

Miniprogram Pay payment flow

Steps for Alipay miniprogram integration

  1. Merchants register on Ksher system as an ONLINE merchant and pass the audit to obtain the Ksher merchant number;

  2. Register on https://opendocs.alipay.com/mini/introduce to get the Alipay APPID

  3. Merchant obtains Ksher_APPID and key from Ksher merchant platform https://merchant.ksher.net/big_business/index;

  4. Merchants submit Alipay APPID to ksher for Alipay filing.

  5. Merchant use Alipay Mini Program API to access integrated development.

Specifications of APIs

API method

URL

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

Method

POST

Parameter organization format

application/x-www-form-urlencoded

Order Apply

Order Apply 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

Random string

channel

String(32)

YES

wechat

Value range: wechat/alipay

sign

String(256)

YES

refer to relevant chapter Signature Algorithm

mch_order_no

String(32)

YES

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

local_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

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

notify_url

String(256)

YES

http://www.myweb.com/wepay/pay_notify

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.

product

String(512)

YES

Product name etc. info can be put here.

attach

String(127)

NO

any extra information can be added here.

device_id

String(32)

NO

POS001

the terminal id from which the request is issued.

sub_openid

YES

user id of the sub_appid in WeChat mini progarm

channel_sub_appid

YES

channel_sub_appid is your appid in WeChat

Example 1. Request Example
{
    "appid": "mch20163",
    "channel": "wechat",
    "fee_type": "THB",
    "mch_order_no": "1496653771",
    "nonce_str": "8X8d7HL7jXE5ZHt6pk4LSStjeDNRLsx1",
    "notify_url": "https://ht.dspread.com/weixin/dev6/NativepayApp/pay_notify",
    "sub_openid": "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
    "channel_sub_appid": "wx8888888888888888",
    "sign": "ad96658a919fea31211052aec0e79836fd958c16a95314a2fff19b997062167a1cefc4ec8cdd1a4bdaa304e9432bc47968c110107c6bc5bc25b8dfc11e7275da",
    "time_stamp": "20170605160931",
    "local_total_fee": 10,
    "version": "1.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 parameter to launch the request again.

sign

String(256)

YES

refer to following relevant chapter for signature algorithm

result

string(16)

YES

SUCCESS

SUCCESS

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

generated by Ksher

prepay_id

String(64)

YES

wx201410272009395522657a690389285100

The prepay id return sign generated by WeChat is used in subsequent interface calls, which is valid for 2 hours.

notify_url

String(256)

YES

http://www.myweb.com/wepay/pay_notify

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.

redirect_url

String(256)

YES

the url of payment result page, to which redirected from Ksher Payment Page.

product

String(512)

NO

Product name etc. info can be put here.

attach

String(127)

NO

any extra information can be added here.

Example 2. SUCCESS Response Example
{
    "code": 0,
    "data": {
        "appid": "mch20163",
        "attach": "",
        "channel": "wechat",
        "device_id": "",
        "fee_type": "THB",
        "ksher_order_no": "60020170605170931121575",
        "limit_pay": "",
        "mch_order_no": "1496653771",
        "nonce_str": "8X8d7HL7jXE5ZHt6pk4LSStjeDNRLsx1",
        "notify_url": "https://ht.dspread.com/weixin/dev6/NativepayApp/pay_notify",
        "operator_id": "",
        "prepay_id": "wx201410272009395522657a690389285100",
        "paypage_title": "TestJSAPI",
        "product": "KSHERTEST_GWX",
        "rate": 0.200622,
        "result": "SUCCESS",
        "total_fee": 10
    },
    "msg": "ok",
    "sign": "aac5c262f63559e12e0e1ec9871a69203d5021d5c3a46764e6c1cd0649f22950d3cd7b1a1bcb6ca0b8da86cf1f1c448a6839f5e148ec17b711c3484f3075a160",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "",
    "version": "2.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 following relevant chapter for signature algorithm

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

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

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

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

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

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

  • 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

sign

String(256)

YES

refer to relevant chapter Signature Algorithm

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 )

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)

YES

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

nonce_str

String(32)

YES

WQVzZs6qgYUVXWkt9nw15QBWI2jFNMjk

Random string

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

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

appid

String(32)

YES

mch12345

Your Merchant Number. Check on merchant ksher. The format is mch{Merchant No}.

operation

String

YES

QUICK-PAY

this shows what operatation the request is.

device_id

String(32)

YES

Id for terminal from which the ordering request is issued.

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.

Example 7. SUCCESS Example
{
    "code": "0",
    "status_code": "",
    "status_msg": "",
    "sign": "04b7ff6ad59f7b82dffd26eae92efdefe7c332588376f8f33caab389fd39519ba9031d6957d64a8231554f580f6e53dd222ea39da8b511b02d78ac71ee42cd2b",
    "version": "3.0.0",
    "msg": "ok",
    "time_stamp": "",
    "data":
    {
        "openid": "o5x64wG48fnZyqWOxqJl-MPSkNJ4",
        "channel_order_no": "4001432001201705110439447536",
        "operator_id": "",
        "cash_fee_type": "CNY",
        "ksher_order_no": "60020170511182002236448",
        "nonce_str": "OE2yOEtAwUZCF3YyWlWyIAJgFYCSfufH",
        "time_end": "2017-05-11 17:20:32",
        "fee_type": "THB",
        "attach": "",
        "rate": 0.199227,
        "result": "SUCCESS",
        "total_fee": 10,
        "appid": "mch20163",
        "operation": " ",
        "device_id": "",
        "cash_fee": 1,
        "order_no": "1494497999",
        "mch_order_no": "1494497999"
    }
}
notes:

In the notify calling back function, a response is needed to return to Ksher Server, the response is JSON formated and the content is as follow:

Example 8. For success:
{"result": "SUCCESS", "msg": "OK"}
Example 9. For error:
{"result": "FAIL", "msg": "some error information"}

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

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 13. 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 14. 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 15. 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"
}

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 16. 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 17. 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 18. 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 19. 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 20. 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 21. 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 22. 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 23. 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 24. 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 25. 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 26. 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 27. 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.