Mobile Website Integration Guide

Overview

Gateway Pay is Ksher Online e-payment aggregator service. Merchant only need to integrated once to have all e-wallets acceptance for WeChat Pay, Alipay, Prompt Pay, Airpay, LinePay, True Money.

It helps merchant to create a checkout page with all e-wallets available for consumers to choose. Both Web and H5/Mobile payment scenarios (WeChat Pay only allowed open in WeChat browser) are able to be achieved by using Ksher Gateway Pay.

Wallet Support

card/ktc_instal/kbank_instal/kcc_instal/kfc_instal/promptpay/scb_easy/bbl_deeplink/baybank_deeplink/kplus/linepay/truemoney/atome/alipay

Not support

Shopee: because shopee not allow webview call app, they allow only website. Wechat: wechat not allow open website on mobile to pay out side app. you need to copy link to paid inside wechat app.

Applicable Cases

Both PC website and H5/mobile payment scenarios are supported by Ksher Gateway Pay. You can choose to use H5 or PC version of the checkout page when applying the order.

Payment Flow Sequence Diagram

Merchant can follow this procedure to implement own system follow Online Gateway Pay payment flow.

Mobile Gateway Pay payment flow
Figure 1. Mobile Gateway Pay payment flow
  1. Buyer login merchant’s website to choose product and place an order.

  2. Merchant request Ksher PaymentSystem a transaction by choosing one method:

    1. API method or

    2. Html Form method.

  3. Ksher Payment System response Ksher aggregator payment page URL.

  4. Merchant display Ksher aggregator payment page with response URL.

  5. User choose payment E-wallet on Ksher aggregator gateway payment page.

  6. Ksher Payment System verify and create an order.

  7. Ksher Payment System request transaction to EwalletPaymentSystem

  8. Ewallet Payment System response transaction data including: QR Code, etc. to Ksher.

  9. For WeChat /PromptPay, Ksher Payment System forward transaction data including QR Code to Ksher Gateway Payment Page. For Alipay/Airpay/LINE Pay, Ksher Payment System redirect to e-wallets confirm pay page.

  10. User confirm to pay.

  11. Merchant polling query payment result from Ksher Payment System.

  12. Ksher Payment System polling query payment result from E-wallet Payment System.

  13. E-wallet response payment result to Ksher.

  14. Ksher response payment result to Merchant.

  15. Ksher aggregator gateway payment page redirect to merchant redirect_url.

User Experience of Online Gateway Pay

PC Web scenario User experience

Checkout Page

Checkout Page created by Ksher, Visual design like logo, banner background color, ect., which can DIY by merchant via API.

If you send only one channel, it will be skip checkout page and redirected to each wallet you send.

pc checkout

Credit Card

  1. Select Card, it will turn to Ksher DIY checkout page.

  2. Continue to pay with fill personal card information.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to KTB and your Success page.

pc ktbcard 01
pc ktbcard 02
pc ktbcard 03
pc ktbcard 04

WeChat Pay

Select WeChat Pay, it will turn to Ksher DIY checkout page, continue to pay with scanning QR code use WeChat app. Visual design can DIY by merchant via API.

pc wechat

PromptPay

Select PromptPay, it will turn to Ksher DIY checkout page, continue to pay with scanning QR code use bank app. Visual design can DIY by merchant via API.

pc promptpay

Alipay

Select Alipay, it will redirect to Alipay checkout page, continue to pay with open Alipay e-wallte app or login Alipay account browser.

pc alipay

LINE pay

Select LINE pay, it will redirect to LINE checkout page, continue to pay with open LINE Pay e-wallets to sacn QR code or login LINE account.

pc linepay

Shopeepay

or old name before rebranding is Airpay.

Select Shopeepay, it will redirect to Airpay checkout page, continue to pay with open Airpay e-wallets to sacn QR code.

pc airpay

TrueMoney

Truemoney has a dynamic QR Code or OTP depend on what’s your select when opening an account with us.

Select TrueMoney and your account is OTP, it will create Ksher checkout page. Continue to pay with verifying user phone number OTP code.

pc truemoney

Select TrueMoney and your account is dynamic QR, it will create Ksher checkout page. Continue payment with scan QR code.

pc truemoney dynamic

Atome

  1. Select Thai E-wallets tab and select Atome, will display QR

  2. Using Atome app to QR to Scan QR to pay or pay on browser.

  3. If select pay on browser, Enter mobile, OTP and click Next.

  4. Enter payment method, accept the condition and Confirm payment

  5. Click Back to Merchant to go back Merchant page

pc atome01
pc atome02
pc atome03
pc atome04

KTC Installment

  1. Select Card tab and select KTC Installment, will redirect to Fill in page.

  2. fill card information and select how long installmet term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to KTB and your Success page.

pc ktcinstallment 01

If merchant absort fee will display like this

pc ktcinstallment 01 merchant absorb
pc ktcinstallment 02
pc ktcinstallment 03
pc ktcinstallment 02

KBANK Installment

  1. Select Card tab and select KBANK Installment, will redirect to Fill in page.

  2. fill card information and select how long installmet term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to KTB and your Success page.

pc kbankinstallment 01

If merchant absort fee will display like this

pc kbankinstallment 01 merchant absorb
pc kbankinstallment 02
pc kbankinstallment 03
pc kbankinstallment 02

Krungsri Installment

  1. Select Card tab and select Krungsri Installment, will redirect to Fill in page.

  2. fill card information and select how long installment term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to your Success page.

pc kcc instal customer absorb

or if merchant absorb fee will display

pc kcc instal merchant absorb
pc kcc instal otp

First Choice Installment

  1. Select Card tab and select First Choice Installment, will redirect to Fill in page.

  2. fill card information and select how long installment term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to your Success page.

pc kfc instal customer absorb

or if merchant absorb fee will display

pc kfc instal merchant absorb
pc kfc instal otp

H5/Mobile browser scenario User experience

Checkout Page

Checkout Page created by Ksher, Visual design like logo, banner background color, ect., which can DIY by merchant via API.

If you send only one channel, it will be skip checkout page and redirected to each wallet you send.

h5 checkout

Credit Card

  1. Select Card, it will turn to Ksher DIY checkout page.

  2. Continue to pay with fill personal card information.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to KTB and your Success page.

h5 ktbcard 01
h5 ktbcard 02
h5 ktbcard 03
h5 ktbcard 04

Alipay

Select Alipay, it will redirect to Alipay payment page, continue to pay with open Alipay e-wallte app or login Alipay account browser.

h5 alipay

Shopeepay

or old name before rebranding is Airpay.

Select Shopeepay, it will redirect to Shopeepay payment page. Continue to pay with turning into Shopeepay e-wallets.

h5 airpay

WeChat

Open payment link in WeChat browser ,it will create Ksher checkout page. Continue to pay with WeChat app.

h5 wechat

Promptpay

Select Promptpay, will create Ksher checkout page. Continue payment with scan QR code.

h5 promptpay

LINE pay

Select LINE pay, continue to pay with turning into LINE Pay e-wallets

h5 linepay

TrueMoney

Truemoney has a dynamic QR Code or OTP depend on what’s your select when opening an account with us.

Select TrueMoney, it will create Ksher checkout page. Continue to pay with verifying user phone number OTP code.

h5 truemoney

Select TrueMoney, it will create Ksher checkout page. Continue payment with scan QR code.

h5 truemoney dynamic

Mobile Atome

  1. Select Thai E-wallets tab and select Atome, will display pay by app or pay in browser

  2. If merchant select pay by app, will open Atome app on mobile phone

  3. Enter coupon card, payment method and pay

  4. Click Back to Merchant to go back Merchant page

h5 atome01
h5 atome02
h5 atome03
h5 atome04

KTC Installment

  1. Select Credit/Debit Card tab and select KTC Installment, will redirect to Fill in page.

  2. fill card information and select how long installmet term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to KTB and your Success page.

h5 ktcinstallment 01
h5 ktcinstallment customer absorb

or if merchant absorb fee will display

h5 ktcinstallment merchant absorb
h5 ktcinstallment 02
h5 ktcinstallment 03
h5 ktcinstallment 02

KBANK Installment

  1. Select Credit/Debit Card tab and select KBANK Installment, will redirect to Fill in page.

  2. fill card information and select how long installmet term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to KBANK and your Success page.

h5 kbankinstallment 01
h5 kbankinstallment customer absorb

or if merchant absorb fee will display

h5 kbankinstallment merchant absorb
h5 kbankinstallment 02
h5 kbankinstallment 03
h5 kbankinstallment 02

K Installment

  1. Select Credit/Debit Card tab and select KBANK Installment, will redirect to Fill in page.

  2. fill card information and select how long installmet term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to KBANK and your Success page.

h5 kbankinstallment 01
h5 kbankinstallment customer absorb

or if merchant absorb fee will display

h5 kbankinstallment merchant absorb
h5 kbankinstallment 02
h5 kbankinstallment 03
h5 kbankinstallment 02

Mobile Krungsri Installment

  1. Select Credit/Debit Card tab and select Krungsri Installment, will redirect to Fill in page.

  2. fill card information and select how long installment term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to your Success page.

h5 kcc instal
h5 kcc instal customer absorb

or if merchant absorb fee will display

h5 kcc instal merchant absorb
h5 kcc instal otp

Mobile First Choice Installment

  1. Select Credit/Debit Card tab and select First Choice Installment, will redirect to Fill in page.

  2. fill card information and select how long installment term.

  3. It will redirect to card bank OTP website, fill OTP.

  4. After correct OTP it redirect back to your Success page.

h5 kfc instal
h5 kfc instal customer absorb

or if merchant absorb fee will display

h5 kfc instal merchant absorb
h5 kfc instal otp

Mobile SCB Easy

only support on mobile app

If customer not install app when click to pa will redirect to Google Play SCB Easy or App Store SCB Easy depend on customer OS.

  1. Select Mobile Banking tab, and select SCB EASY.

  2. Input App PIN.

  3. Select your payment method and Click Review to go next page.

  4. will summary Information customer have to pay, click Confirm to pay

  5. Click Return to Merchant to go back Merchant page

h5 scbeasy 01
h5 scbeasy 02
h5 scbeasy 03
h5 scbeasy 04

Mobile Bualuang mBanking

only support on mobile app.

If customer not install app when click to pa will redirect to Google Play Bualuang mBanking or App Store Bualuang mBanking depend on customer OS.

  1. Select Mobile Banking tab, and select Bualuang mBanking.

  2. Input App PIN.

  3. Select your payment method and Click Next to go next page.

  4. will summary Information customer have to pay, click Confirm to pay

  5. Click Back to Ksher Payment to go back Merchant page

h5 bbldeeplink 01
h5 bbldeeplink 02
h5 bbldeeplink 03
h5 bbldeeplink 04

Mobile KMA-Krungsri Mobile App

only support on mobile app.

If customer not install app when click to pa will redirect to Google Play KMA or App Store KMA depend on customer OS.

  1. Select Mobile Banking tab, and select KMA.

  2. Input App PIN.

  3. Select your payment method and Click Next to go next page.

  4. will summary Information customer have to pay, click Confirm to pay

  5. Click Back to Ksher Payment to go back Merchant page

h5 baydeeplink 01
h5 baydeeplink 02
h5 baydeeplink 03

Mobile KPLUS

If customer not install app when click to pa will redirect to Google Play KPLUS or App Store KPLUS depend on customer OS.

  1. Select Mobile Banking tab, and select KPLUS.

  2. Input App PIN.

  3. If first time customer paid with ksher by using Kplus, will appear Authorized Page.

  4. Select your payment method and Click Next to go next page.

  5. will summary Information customer have to pay, click Confirm to pay

  6. Click Back to KSHER PAYMENT to go back Merchant page

h5 kplus 01
h5 kplus 02
h5 kplus 03
h5 kplus 04

Specifications of APIs

Order Apply

API method

URL

https://gateway.ksher.com/api/gateway_pay

Method

POST

Parameter organization format

application/x-www-form-urlencoded

Order Applying 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.

channel_list

String(128)

YES

alipay,wechat,linepay,airpay,promptpay,truemoney,card,ktccard,ktc_instal

Payment Merchant list support. Value range:

alipay: Alipay Wallet.

alipayplus: Alipay+ Wallet. Country support only Japan.

wechat: Wechat Wallet.

linepay: Rabbit LINE Pay Wallet. Country support only Thailand.

airpay: Shopeepay Wallet. Country support only Thailand.

truemoney: TrueMoney Wallet. Country support only Thailand.

atome: Atome Buy now pay later. minimum of 20 Baht. Country support only Thailand.

promptpay: PromptPay QR code (Thailand standard bank transfer QR code). Country support only Thailand.

scb_easy: SCB EASY Mobile App. minimum of 20 Baht. (only support on mobile). Country support only Thailand.

bbl_deeplink: Bualuang mBanking Mobile App. minimum of 20 Baht. (only support on mobile). Country support only Thailand.

baybank_deeplink: KMA Krungsri Mobile App. minimum of 20 Baht. (only support on mobile). Country support only Thailand.

kplus: KPLUS. minimum of 20 Baht. (only support on mobile). Country support only Thailand.

card: Card Gateway. support Visa Card, Master Card, Union Pay Card, TPN Card. Country support only Thailand.

ktc_instal: KTC Installment. support only KTC Card. minimum of 3,000 Baht. Country support only Thailand.

kbank_instal: KBANK Installment. support only KBANK Card. minimum of 3,000 Baht. Country support only Thailand.

kcc_instal: Krungsri Installment. support only Krungsri Card. minimum of 3,000 Baht.(5,000 Baht. for 10 months or more than). Country support only Thailand.

kfc_instal: First Choice Installment. support only Krungsri First Choice Card. minimum of 3,000 Baht. Country support only Thailand.

If multiple e-payment method required,a string made up by required e-wallets ,which seperated by "," without space, for example:"promptpay,linepay,airpay,truemoney,atome,card,ktc_instal,kbank_instal,kcc_instal,kfc_instal,scb_easy,bbl_deeplink,baybank_deeplink,kplus,alipay,wechat". will open all of channel your merchant you have. It will send Ksher checkout page to select your wallet want to paid.

If you send only one channel, it will be redirected to each wallet you send.

sign

String(256)

YES

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

mch_code

String(256)

YES

123456acb

Order No. It will be display to customer.

mch_redirect_url

String(256)

YES

http://www.yourweb.com/gateway_pay/success/

After the payment is succeed, the web page is redirected to this URL. If merchant leaves this field blank, the web page will stay on payment page after payment succeed.

mch_redirect_url_fail

String(256)

YES

http://www.yourweb.com/gateway_pay/fail/

After the payment is failed, the web page is redirected to this URL. If merchant leaves this field blank, the web page will stay on payment page after payment failed.

mch_notify_url

String(256)

NO

http://www.yourweb.com/gateway_pay/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.

mch_order_no

String(32)

YES

123456acb

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

don’t use name like 01,02,100,200

product_name

String(512)

YES

Demo

Name or description of your product.

Precautions when using "product_name"

please use General English characters. Avoid using special characters such as +&/$%

Because in some wallets, product_name will be shown to the product that the customer purchases. and wallet does not support special characters.

refer_url

String(256)

YES

The URL of the merchant website homepage. If the merchant doesn’t have a website, the merchant app download address can be used for this field.

total_fee

Integer

YES

100

total amount of the order and it must be an integer, add 00 for decimal.Example 150.50 THB total_fee = 15050

fee_type

String(16)

YES

THB

Currency code for total_fee. refer to with ISO 4217. Value range:

THB: Thailand

MYR: Malaysia

JPY: Japan

AED: United Arab Emirates dirham (UAE)

device

String( )

NO

H5

Value Range:PC, H5;

If you leave this blank, Ksher will determine user device automatically and will return an adaptive page.

member_id

String(32)

NO

ABC12345

User ID, support ktb storage card function when user ID is transmitted.

Can’t use Real number like 1,1200,00001, but can use string with number like ABC1234.

operator_id

String(32)

NO

41234

operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier

time_stamp

String(256)

YES

20190622131804

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

color

String(32)

NO

#FF5C72

The color code of banner on payment page, which can be DIY by merchant.

background

String

NO

https://img.examplefile.com/image1.png

The url of banner background picture on payment page, which can be DIY by merchant.

payment_color

String

NO

#FF5C72

The color code of payment button, which can be DIY by merchant.

ksher_explain

String(256)

NO

Copyright information on payment page, which can be DIY by merchant.

hide_explain

Integer

NO

0

Value range:0,1;

1: to display an expiration timer.

0: to hide expire time information.

Default is "1".

expire_time

Integer

NO

30

How long the payment is valid to pay, the unit is minute. If merchant leave this blank, there will be no time limit.

hide_exp_time

Integer

NO

1

Value range:0,1;

1: to display an expiration timer. 0: to hide expire time information.

Default is "1".

logo

String

NO

https://file.ksher.cn/ksherbd/h5/2020325/201654.png

The url of logo picture on payment page, which can be DIY by merchant.

lang

String

NO

en

The display language. Value range:

en for English,

cn for Chinese,

th for Thai.

Default is en.

shop_name

String

NO

The Remark or description

attach

String

NO

The Remark or description

If you want data to display merchant platform at table data "consumer remark" and "merchants remark" Please send data by using this format

"attach": "{"consumer_remark": "remark from customer", "merchants_remark": "remark from merchant"}"

instal_fee_payer

String

NO

Who is carrying charge on installment fee. Value range:1, 2

1 : Means that the consumer bears the installment fee

2 : Indicates that the merchant bears the installment fee

The default value is 1

if you want to customize depend on each channel, please not use "instal_fee_payer", switch to use value "instal_fee_payer_merchant"

exclusive

Integer

NO

Limit to open link only one person. Value Range:1, 2

1: Limit people who click on the link to only one person.

2: not limit.

The default value is 1

instal_fee_payer_merchant_channel_list

String

NO

"ktc_instal,kbank_instal"

Which payment channel merchant has to absorb interest rate, available for multiple channels. Example if send "instal_fee_payer_merchant_channel_list":"kbank_instal"

customer who paid by KBANK Installment merchant will bears the installment fee.

But another Installment channels, consumer bears the installment fee.

channel_instal_times_list

String

NO

"{\"ktc_instal\": [3,4,5], \"kbank_instal\": [4,5,6,7,8]}"

Installment period, available for multiple channels. Example if send "channel_instal_times_list": "{\"ktc_instal\": [3,4,5], \"kbank_instal\": [4,5,6,7,8]}"

customer who paid by KTC Installment will display 3/4/5 months available to paid.

KBANK Installment will display 4/5/6/7/8 months available to paid.

Please send this value in JSON Objects convert to string format, don’t send in JSON Objects, because it will error signature.

Example 1. Request Example
{
    "appid": "mch28321",
    "channel_list": "wechat,alipay,linepay,promptpay,truemoney,card",
    "device": "",
    "fee_type": "THB",
    "mch_code": "233114471",
    "mch_order_no": "233114471",
    "mch_redirect_url": "https://www.yourweb.com/",
    "mch_redirect_url_fail": "https://www.yourweb.com/fail",
    "mch_notify_url": "https://www.yourweb.com/notify",
    "nonce_str": "8d22a1335bc893fe6e90a236a93ca3c5",
    "product_name": "sdd",
    "refer_url": "https://www.yourweb.com/",
    "sign": "5f01d9fe632bcf7d07deedcd3b419d37c653c571e7ea8759ad8cd4e44594b73776ab23720a7238e1a4442fb13e63d7a4b0e80695eedf50bd65d7c8e4a80c6d21",
    "time_stamp": "2020041414150505S",
    "total_fee": 13000
}
Example 2. Request Example by use cURL
curl --location 'https://gateway.ksher.com/api/gateway_pay' \
--data-urlencode 'appid=mch35005' \
--data-urlencode 'channel_list=promptpay,linepay,airpay,truemoney,atome,card,ktc_instal,kbank_instal,kcc_instal,kfc_instal,scb_easy,bbl_deeplink,baybank_deeplink,kplus,alipay,wechat,card,ktc_instal,kbank_instal,kcc_instal,kfc_instal' \
--data-urlencode 'fee_type=THB' \
--data-urlencode 'lang=en' \
--data-urlencode 'mch_code=2023-02-22-17-11-00' \
--data-urlencode 'mch_notify_url=https://www.yourweb.com/api/gateway_pay/notify_url/' \
--data-urlencode 'mch_order_no=2023-02-22-17-11-00' \
--data-urlencode 'mch_redirect_url=https://www.yourweb.com/api/gateway_pay/success' \
--data-urlencode 'mch_redirect_url_fail=https://www.yourweb.com/api/gateway_pay/fail' \
--data-urlencode 'nonce_str=a2de1d78127dd837e648ef0c28773fcb' \
--data-urlencode 'product_name=2023-02-20-17-27-00' \
--data-urlencode 'refer_url=https://www.yourweb.com' \
--data-urlencode 'sign=5a665ecc4e1a94f01de579a9dd1c4850984066a7d4b479bb3bc3d8872c5ac871a3e868efdf9da0b8baaac1cd3f3ce789f7e6e677fb8ff25ea1b872c387980161db485ed84e28c9ae064dacae877d8855deb4bb3332499e9a5f73675377e0fa7baf66f8129299c4e505439501e2088abfed1558a9a2bff39a582dcf36b364a049' \
--data-urlencode 'time_stamp=2023030317445454S' \
--data-urlencode 'total_fee=100'

Order Applying SUCCESS Response Parameters

Parameter Type Required Example Description

code

Integer

YES

0

Value range:

0: The request data was received successfully but it does not mean the process is succeeded.

Not 0: The API request failed. Please check response’s message first. You can try to send a new request with the same parameters again.

lang

String

NO

en

The display language. Value range:

en for English cn for Chinese th for Thai.

Default is en.

message

String(256)

YES

ok

Detailed description of result. If fail it will be show in detail error in here.

sign

String(256)

YES

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of this response digital messages. Please check how to got Signature Algorithm page

msg

String(256)

YES

SUCCESS

Hint message of result

data

JSON

YES

{"pay_content": "https://gateway.ksher.com/page?order_uuid=49ba030e7e1711ea97e652540075451d"}

Gateway payment data, refered to data parameters

Gateway payment data parameters

Parameter Type Required Example Description

pay_content

String(256)

YES

https://gateway.ksher.com/page?order_uuid=49ba030e7e1711ea97e652540075451d

Ksher Payment Page URL. You can use this to redirect the buyer to payment page.

Example 3. SUCCESS Response Example
{
    "code": 0,
    "msg": "SUCCESS",
    "data": {
        "pay_content": "https://gateway.ksher.com/ua?order_uuid=f624f098b8d111edacef525400962f26&lang=en"
    },
    "sign": "7b2159b7f2ec4bff350322b5cdef55bfe4265c03023390ccf8e98292c559a29d79c34ad2eaceaeb5b7d5c6ab9e13afb8c85b0bf267046ea0c5b3d24bf53c09d6",
    "message": "SUCCESS"
}

Order Applying FAIL Response Parameters

Parameter Type Required Example Description

code

Integer

YES

-4

Value Range:

0: The request data was received successfully but it does not mean the process is succeeded.

Not 0: The API request failed. Please check response’s message first. You can try to send a new request with the same parameters again.

-1: {'cn': '商户信息错误', 'th': 'ข้อมูลร้านค้าผิดพลาด', 'en': 'Invalid merchant information'}

-2: {'cn': '验证商户签名失败', 'th': 'การตรวจสอบลายเซ็นของร้านค้าล้มเหลว', 'en': 'The verification of merchant signature failed'}

-101: {'cn': '验证商户签名失败', 'th': 'การตรวจสอบลายเซ็นของร้านค้าล้มเหลว', 'en': 'The verification of merchant signature failed'}

-102: {'cn': 'member_id 不能是纯数字', 'th': 'member_id ไม่สามารถเป็นตัวเลขอย่างเดียวได้', 'en': 'member_id cannot be number only'}

-103: {'cn': 'member_id 长度不能超过32位', 'th': 'member_id ต้องไม่เกิน 32 ตัว', 'en': 'member_id cannot be more than 32 characters'}

-1000: {'cn': '参数校验失败: mch_order_no', 'th': 'ข้อมูลไม่ถูกต้อง: mch_order_no', 'en': 'Paramter invalid: mch_order_no'}

-1001: {'cn': '您没有开通任何钱包或银行卡', 'th': 'คุณไม่ได้เปิดใช้บริการกระเป๋าเงินหรือบัตรเครดิต', 'en': 'You have not apply for any ewallets nor credit card payment services'}

-4: {'cn': '订单号必须唯一', 'th': 'หมายเลขรายการซื้อขายต้องไม่ซ้ำ', 'en': 'Order number must be unique'}

-41: {'cn': '订单已被取消', 'th': 'ออเดอร์ดังกล่าวถูกยกเลิก', 'en': 'The order has been canceled'}

-201: {'cn': '创建支付订单失败', 'th': 'การสร้างรายการชำระเงินล้มเหลว', 'en': 'Transaction creation failed'}

1: {'cn': '订单已支付成功', 'th': 'ออเดอร์ถูกจ่ายสำเร็จแล้ว', 'en': 'Order has been completed'}

lang

String

YES

The display language. Value range:

en for English

cn for Chinese

th for Thai.

Default is en.

message

String(256)

YES

Detailed description of result

msg

String(256)

YES

Hint message of result

Example 4. Failed Response Example
{
    "lang": "",
    "code": -4,
    "msg": "订单号不唯一",
    "message": "订单号不唯一"
}

Order Query

API method

URL

https://gateway.ksher.com/api/gateway_order_query

Method

POST

Parameter organization format

application/x-www-form-urlencoded

Order Query Request Parameters

Parameter Type Required Example Description

sign

String(256)

YES

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

appid

String(32)

YES

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, must be unique

time_stamp

String(256)

YES

time stamp example: "time_stamp": "20190622131804"

mch_order_no

String(32)

YES (mch_order_no, ksher_order_no not needed to provide all, you can select at least one parameters to to sending.)

order number on merchant side, must be unique

ksher_order_no

String(32)

YES (mch_order_no, ksher_order_no not needed to provide all, you can select at least one parameters to to sending.)

Order no. generated by Ksher.

Example 5. Request Example
{
    "appid": "mch32625",
    "mch_order_no": "33663431",
    "nonce_str": "d2b4874c75fca3d7c637bee971ede6ac",
    "sign": "6aa39ba2ab6ac60df6223b0604a1fffe62280d33accb6d91a2dceea6648c04b8117d5b33f5f348d21adcc47f1f63faae8fd77b6800e476bf92d5ad45488cdadc",
    "time_stamp": "2020041421583131S"
}

Order Query SUCCESS Response Parameters

Parameter Type Required Example Description

code

int

YES

0

code msg 0 SUCCESS

lang

String(256)

YES

The display languange.The default language is English if no specification.Value range: * "en":----English * "cn":----Chinese * "th":----Thai

result

string(16)

YES

FAIL

Value Range: FAIL/SUCCESS/CLOSED/NOTPAY/PAYERROR/PENDING/NOTSURE/USERPAYING/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.

  • SUCCESS: Payment successful, customer already paid.

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

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

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

  • PENDING: order pendding on enter PIN

  • NOTSURE: unknown status. on between waiting customer paid..

  • USERPAYING: Wait customer enter PIN. waiting and then call the Query Order API again to check current transaction status.

  • REFUND: the order has refunded partially or completely.

  • Note: after order apply, merchant should regard SUCCESS as final result, the rest result :"NOTPAY/PAYERROR/PENDING/NOTSURE/USERPAYING" means real time status , not the final result, user still can pay again. "FAIL" Only happened when payment channel bank system error, which happens very few. "REFUND" means this amount already turn back to consumer’s.

  • Query Suggestion: Merchant should continue Polling query order result Until you got SUCCESS or over polling time limit. The time limit of polling query should be one day time (45mins once a second and then half an hour , one hour once) just in case. The Actually the "expire_time" is only limit the gateway page valid time. As long as your user redirect to KTB Payment page within gateway expire time, he still can pay with this order after time expired because he is already left gateway page and stepped into KTB Payment page, in which Ksher can not control. so please polling query payment result very often within your expire_time+15mins ,for example every second. If after 45mins it still not SUCCESS, continue polling query for one day but not that often , maybe half an hour , two hour a time.

message

String(128)

Detailed description of result

msg

String(128)

YES

system error

the detailed description of the error

data

JSON

data 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}.

attach

String

YES

e-wallet local currency total amount, unit is cent.

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.

channel

String(16)

YES

alipay

Actual payment e-wallet channel.Value range: alipay, linepay, airpay, wechat, promptpay, truemoney.

channel_order_no

String(32)

Conditional

e-wallet order number. Only response with result "SUCCESS" and "REFUND".

fee_type

String(16)

YES

THB

Currency code for total_fee. refer to with ISO 4217. Value range:

THB: Thailand

MYR: Malaysia

JPY: Japan

AED: United Arab Emirates dirham (UAE)

pay_mch_order_no

String(32)

YES

4200000553202004150354623931

Gateway Pay unique order number

ksher_order_no

String(32)

YES

merchant Order number, must be unique.

nonce_str

String(32)

YES

Random string.

openid

String(128)

NO

Customer’s id under this merchant’s public account.

rate

String(16)

YES

Exchange rate of foreign currency to RMB.

result

String(16)

YES

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

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

  • Note: after order apply, merchant should regard SUCCESS as final result, the rest result :"NOTPAY/PAYERROR/" means real time status , not the final result, user still can pay again. "FAIL" Only happened when e-wallet system error, which happens very few. "REFUND" means this amount already turn back to consumer’s.

  • Query Suggestion: Merchant should continue Polling query order result Until you got SUCCESS or over polling time limit. The time limit of polling query should be one day time(45mins once a second and then half an hour , one hour once) just in case. The Actually the "expire_time" is only limit the gateway page valid time. As long as your user redirect to e-wallet page within gateway expire time, he still can pay with this order after time expired because he is already left gateway page and stepped into e-wallet or e-wallet page, in which Ksher can not control. so please polling query payment result very often within your expire_time+15mins ,for example every second. If after 45mins it still not SUCCESS, continue polling query for one day but not that often , maybe half an hour , two hour a time.

time_end

String(20)

2020-04-15 09:49:19

Payment success time

total_fee

Int

YES

total amount of the order and it must be an integer, the unit is cent

Example 6. SUCCESS Response Example
{
    "code": 0,
    "data": {
        "appid": "mch32625",
        "attach": "",
        "cash_fee": 21,
        "cash_fee_type": "CNY",
        "channel": "wechat",
        "channel_order_no": "4200000553202004150354623931",
        "fee_type": "THB",
        "pay_mch_order_no": "2004150948529843",
        "ksher_order_no": "90020200415104909426008",
        "mch_order_no": "77713",
        "nonce_str": "UHl8XNywZjdMrpsWCNy00gOYbspYzH7Z",
        "openid": "o2G4c04tmsU-wsCG7jN_ORL5Vh14",
        "rate": "0.222657",
        "result": "SUCCESS",
        "time_end": "2020-04-15 09:49:19",
        "total_fee": 100
    },
    "lang": "",
    "message": "操作成功",
    "msg": "操作成功",
    "sign": "a19fb42985cbf2ce81e74a1e2aa7fdaf42d33234b3f5d9a3ce9230d1cabc2796abd05c6b00951c6c33f557410d029853bf70d99af32cae858f1484412309f242"
}

or

 {
    "code": 0,
    "data": {
        "appid": "mch28321",
        "attach": "",
        "cash_fee": 102,
        "cash_fee_type": "THB",
        "channel": "card",
        "channel_order_no": "509109",
        "fee_type": "THB",
        "ksher_order_no": "70020200713155936857097",
        "mch_order_no": "12594",
        "nonce_str": "FbbQyfY7Nskt1D8rHqFunx6SWJYt0mOz",
        "openid": "453215******0399 YAYA NUGHT",
        "pay_mch_order_no": "2007131459298082",
        "rate": "",
        "result": "SUCCESS",
        "time_end": "2020-07-13 14:59:36",
        "total_fee": 100
    },
    "lang": "",
    'message': '操作成功',
    'msg': '操作成功'
    "sign": "63b77c9542e6f5cd62a72dff0a72d055228fdeb68943dabe0ebb64e413beb2cf69a8b4ac106934e9f40a555b9eafaf5d512ea3750cadb3d3158dd913c3a01bdf"
}

Order Query Fail Response Parameters

Parameter Type Required Example Description

code

int

YES

0

code msg * -1: merchant info error * -2: sign failed to verify * -3: order not exist * -4: order number is not unique * -100: query order failed

lang

String(256)

YES

The default language is English if no specification. Value range: * "en":----English * "cn":----Chinese * "th":----Thai

message

String(128)

Detailed description of result

msg

String(128)

YES

system error

the detailed description of the error

Example 7. Fail Response Example
{'lang': '', 'code': -3, 'msg': '该订单不存在', 'message': '该订单不存在'}

Webhook Notify

What’s Webhook?

  • Webhook is API response when Customer paid like event. It make customer don’t need to polling to check status.

When webhook callback?

  • add parameter name "mch_notify_url" when you request, ksher will initiate a webhook callback.

  • ksher will polling check the status payment within 2 hours.

    • if the order has been successful payment within 2 hours, webhook will callback.

    • if the order has not been paid within 2 hours , The merchant needs to query request by yourself.

  • If ksher got callback from wallet. we will call webhook to merchant also.

What going on If internet not stable and don’t got webhook at the first time?

  • If the merchant does not return correct format,we will try to callback again.

Correct format response

{"result": "SUCCESS", "msg": "OK"}

This is table webhook with times notification, if customer not response correct success type and or we can’t callback

Times retry Times between the last retry

1st retry

1s

2nd retry

2s

3rd retry

2s

4th retry

10s

5th retry

30s

6th retry

1min

7th retry

10min

8th retry

1hour

9th retry

3hour

10th retry

5hour

11th retry

8hour

12th retry

12hour

Delayed messages will be retried 12 times within 29 hours

After consumer pays, Ksher system will notify merchant only SUCCUSSFULL payment

API method

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.

sign

String(256)

YES

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

msg

String(32)

YES

操作成功

the response message.

message

String(32)

YES

操作成功

the response message.

data Parameters (JSON )

channel

String(128)

YES

alipay

Payment channel pay by this transaction.

openid

String(128)

YES

Customer’s id under this merchant’s public account.

channel_order_no

String(32)

YES

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.

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 for total_fee. refer to with ISO 4217. Value range:

THB: Thailand

MYR: Malaysia

JPY: Japan

AED: United Arab Emirates dirham (UAE)

attach

String(127)

YES

any extra information can be added here.

rate

string(16)

YES

exchange rate of foreign currency to RMB.

result

string(16)

YES

SUCCESS

Status payment. Value range: SUCCESS

total_fee

Integer

YES

100

total amount of the order and it must be an integer, add 00 for decimal.Example 150.50 THB total_fee = 15050

appid

String(32)

YES

mch12345

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

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.

pay_mch_order_no

String(32)

YES

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

Example 8. SUCCESS Example

Data will response in text format following like this

{"code": 0, "msg": "操作成功", "data": {"channel": "truemoney", "openid": "tmn.10036553303", "channel_order_no": "230523131245589KSUSL", "cash_fee_type": "THB", "ksher_order_no": "90020230523141245533239", "nonce_str": "DLtzj2QZ5FSaydJEUTS3sTAO552IGhwp", "time_end": "2023-05-23 13:12:45", "fee_type": "THB", "attach": "", "rate": "", "result": "SUCCESS", "total_fee": 100, "appid": "mch35005", "cash_fee": 100, "mch_order_no": "2023-05-23-13-10-00", "pay_mch_order_no": "2305231312099897"}, "sign": "389cbf000d6bf322b1ebb99e726417f7604384654bdc41cd82a70b1155ad7ddb381592f5127516bc7690c66011c563b6075700f9e5d00de8ab82aafecf55d9d6", "message": "操作成功"}

after convert data to json format will following this

{
   "code":0,
   "msg":"操作成功",
   "data":{
      "channel":"truemoney",
      "openid":"tmn.10036553303",
      "channel_order_no":"230523131245589KSUSL",
      "cash_fee_type":"THB",
      "ksher_order_no":"90020230523141245533239",
      "nonce_str":"DLtzj2QZ5FSaydJEUTS3sTAO552IGhwp",
      "time_end":"2023-05-23 13:12:45",
      "fee_type":"THB",
      "attach":"",
      "rate":"",
      "result":"SUCCESS",
      "total_fee":100,
      "appid":"mch35005",
      "cash_fee":100,
      "mch_order_no":"2023-05-23-13-10-00",
      "pay_mch_order_no":"2305231312099897"
   },
   "sign":"389cbf000d6bf322b1ebb99e726417f7604384654bdc41cd82a70b1155ad7ddb381592f5127516bc7690c66011c563b6075700f9e5d00de8ab82aafecf55d9d6",
   "message":"操作成功"
}
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 9. For success:
{"result": "SUCCESS", "msg": "OK"}
Example 10. For error:
{"result": "FAIL", "msg": "some error information"}

Order Refund

If want to refund, before refund please use Gateway order query to get Pay_mch_order_no and using

mch_order_no = Pay_mch_order_no value

on refund API

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)

NO

90020210330180132318847

Order no. generated by Ksher. ksher Order no. should be provided when request card payment refund

channel_order_no

String(32)

YES

1207919130

Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided.

channel

String(32)

NO

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

Currency code for total_fee. refer to with ISO 4217. Value range:

THB: Thailand

MYR: Malaysia

JPY: Japan

AED: United Arab Emirates dirham (UAE)

mch_refund_no

String(32)

YES

refund_2103301701291052

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

refund_fee

Int

YES

100

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

attach

String(127)

NO

any extra information can be added here.

device_id

String(32)

NO

POS001

terminal id from which the request is sent, assigned by merchant.

operator_id

String(32)

NO

41234

operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier

version

String(32)

NO

API version

Example 11. 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)

NO

"3.0.0"

API version

data Parameters (JSON )

appid

String(32)

YES

mch35000

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

attach

String(127)

NO

any extra information can be added here.

cash_refund_fee

int

YES

the currency Amount refunded to customer, normally in CNY.

channel_order_no

String(32)

YES

1207919130

Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided.

channel_refund_no

String(32)

YES

1207919130

generated by channel(wechat), each refund no. can be used once only.

device_id

String(32)

NO

POS001

terminal id from which the request is sent, assigned by merchant.

fee_type

String(16)

YES

THB

Currency code for total_fee. refer to with ISO 4217. Value range:

THB: Thailand

MYR: Malaysia

JPY: Japan

AED: United Arab Emirates dirham (UAE)

ksher_order_no

String(32)

YES

90020210330180132318847

Order no. generated by Ksher.

ksher_refund_no

String(32)

YES

90020210330180400878914

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

mch_order_no

String(32)

YES

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

mch_refund_no

String(32)

YES

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

nonce_str

String(32)

YES

Random string

operator_id

String(32)

NO

41234

operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier

refund_fee

Int

YES

100

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

result

string(16)

YES

SUCCESS

Value range: SUCCESS

total_fee

Int

YES

total amount of the order and it must be an integer, the unit is cent

Example 12. 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 13. 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 Close

API method

URL

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

Method

POST

Parameter organization format

application/x-www-form-urlencoded

Order Close Request Parameters

Parameter Type Required Example Description

appid

String(32)

YES

mch12345

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

nonce_str

String(32)

YES

ae0e6jm55qlq1o7

Random string, must be unique for signature.

sign

String(256)

YES

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

channel

String(32)

YES

wechat

Value range:

  • airpay

  • wechat

  • alipay

  • alipayplus :only japan merchant

  • ktbcard

mch_order_no

String(32)

YES

order number on merchant side, must be unique

ksher_order_no

String(32)

YES

Order no. generated by Ksher.

channel_order_no

String(32)

YES

Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided.

time_stamp

String(256)

YES

time stamp example: "time_stamp": "20190622131804"

Example 14. Request Example
{
    "code": 0,
    "data": {
        "appid": "mch36591",
        "mch_order_no": "test3",
        "nonce_str": "7a57e84495bfe7abff4ff23591516511",
        "result": "SUCCESS"
    },
    "msg": "ok",
    "sign": "61805f39c7c484d936cbf40c864b11b9fec0b93205fdbc4efe5b71c9c7dfd98152e1ebc9af5866dd54cf58008418b52ea6122e7994f1d3fe5e6d559a8b022e5f",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "2020-12-25T17:44:54.226116+08:00",
    "version": "3.0.0"
}

Order Close SUCCESS Response Parameters

Parameter Type Required Example Description

code

int

YES

0

code msg:

  • 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

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

msg

String(32)

YES

the response message.

status_code

int

YES

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

mch_order_no

String(32)

YES

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

nonce_str

String(32)

YES

Random string

result

string(16)

YES

SUCCESS

Value range: SUCCESS

Example 15. SUCCESS Response Example
{
    "code": 0,
    "data": {
        "appid": "mch36591",
        "mch_order_no": "test3",
        "nonce_str": "7a57e84495bfe7abff4ff23591516511",
        "result": "SUCCESS"
    },
    "msg": "ok",
    "sign": "61805f39c7c484d936cbf40c864b11b9fec0b93205fdbc4efe5b71c9c7dfd98152e1ebc9af5866dd54cf58008418b52ea6122e7994f1d3fe5e6d559a8b022e5f",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "2020-12-25T17:44:54.226116+08:00",
    "version": "3.0.0"
}

Order Query Fail Response Parameters

Parameter Type Required Example Description

code

int

YES

0

Value Range:

  • 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

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

msg

String(32)

YES

the response message.

status_code

int

YES

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

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 16. Fail Response Example
{
    "code": 0,
    "data": {
        "err_code": "KSHER_INVALID_ORDER_NO",
        "err_msg": "failed to find this order no ('mch_order_no:test33,ksher_order_no:,channel_order_no:',).",
        "nonce_str": "7a57e84495bfe7abff4ff23591516511",
        "result": "FAIL"
    },
    "msg": "ok",
    "sign": "01d2436ef5ed44cb77d3594adccc2c92e2a6a8b39cad2bd1abc3dcd9d64b7c00a303355fc47cb61c3862fb116ed7f67b9db73634da95e91a1fcfc6b12a96da59",
    "status_code": "",
    "status_msg": "",
    "time_stamp": "2020-12-25T17:55:25.248752+08:00",
    "version": "3.0.0"
}

Refund Query

Note: Promptpay and Aliapy 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

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

appid

String(32)

YES

mch12345

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

nonce_str

String(32)

YES

ae0e6jm55qlq1o7

Random string, must be unique for signature.

sign

String(256)

YES

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

mch_order_no

String(32)

YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.)

order number on merchant side, must be unique

ksher_order_no

String(32)

YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.)

Order no. generated by Ksher.

channel_order_no

String(32)

YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.)

Order no. generated by payment channel(wechat, alipay etc.)

channel

String(32)

NO

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

THB

Currency code for total_fee. refer to with ISO 4217. Value range:

THB: Thailand

MYR: Malaysia

JPY: Japan

AED: United Arab Emirates dirham (UAE)

mch_refund_no

String(32)

YES

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

refund_fee

Int

YES

100

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

attach

String(127)

NO

any extra information can be added here.

device_id

String(32)

NO

POS001

terminal id from which the request is sent, assigned by merchant.

operator_id

String(32)

NO

41234

operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier

time_stamp

String(256)

YES

time stamp example: "time_stamp": "20190622131804"

version

String(32)

NO

"3.0.0"

API version

Example 17. 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)

NO

"3.0.0"

API version

sign

String(256)

YES

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

data Parameters (JSON )

cash_fee

int

YES

CNY

specifies the total cash payment amount of a transaction.

cash_fee_type

string(16)

YES

CNY

the currency buyer paid, comply with ISO 4217, CNY by default.

channel_order_no

String(32)

YES

Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided.

channel_state

string(16)

YES

SUCCESS

the response state from e-wallet

fee_type

String(16)

YES

THB

Currency code for total_fee. refer to with ISO 4217. Value range:

THB: Thailand

MYR: Malaysia

JPY: Japan

AED: United Arab Emirates dirham (UAE)

ksher_order_no

String(32)

YES

Order no. generated by Ksher.

mch_order_no

String(32)

YES

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

nonce_str

String(32)

YES

"sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y"

Random string

refund_count

int

YES

Total times of refund for this order.

refund_fee

Int

YES

100

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

refund_orders Parameters (JSON )

channel_refund_no

String(32)

YES

generated by channel(wechat), each refund no. can be used once only.

ksher_refund_no

String(32)

YES

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

mch_refund_fee

String(32)

YES

100

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

mch_refund_no

String(32)

YES

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

refund_state

String(32)

YES

SUCCESS

refund status:

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

b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4

Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page

msg

String(32)

YES

the response message.

status_code

int

YES

Value Range:

  • 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 19. 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"
}

Save Card Function

  • Customers can select to save the card for next time purchase, customers don’t have to enter card information again.

  • Available for merchants who do API integration and Plugin only.

    • Link Pay or Ksher Boss pro can not open this function.

  • Any API Online Merchants that want to open this function, have to adding Parameter field of “member_id” when Post to Gateway Order Apply. API can use Save card, Please see.

  • Save Card Function is based on merchants, not customers.

    • For example, "customer A" makes a payment to "Merchants A" by credit card with save card function.

    • The next time when make a payment to Ksher "Merchants A" again, no need to filled card information, customer can select the card to pay directly.

    • If the customer makes a payment to Ksher "Merchants B", he/she still have to fill in credit card information when make a payment.

  • Merchants & Ksher self will not see or collect any customers’ card information.

PC Web scenario User experience

pc checkout
  • In case you’ve never saved card, you can directly click at “credit/debit" to pay

pc checkout savecard01
  • In case you’ve ever saved card, you can click to pay with your saved card or can click at “Other’s credit/debit card to pay

pc checkout savecard02
  • After Selected , It will automatically change to filled card’s information page in which there will be adding to click accept that Customers acknowledge that his/her card information is save in my Ksher account for subsequent transactions.

pc checkout deletecard 01
pc checkout deletecard 02
  • In case you’ve ever saved card, you can click to pay with your saved card or can click at “Other’s credit/debit card to pay

H5/Mobile browser scenario User experience

h5 checkout
  • In case you’ve never saved card, you can directly click at “credit/debit" to pay

h5 checkout savecard01
  • In case you’ve ever saved card, you can click to pay with your saved card or can click at “Other’s credit/debit card to pay

h5 checkout savecard02
  • After Selected , It will automatically change to filled card’s information page in which there will be adding to click accept that Customers acknowledge that his/her card information is save in my Ksher account for subsequent transactions.

h5 checkout deletecard 01
h5 checkout deletecard 02
  • In case you’ve ever saved card, you can also delete saved card

ERROR CODES

Name Description Reason Solution

APPID_NOT_EXIST

APPID not exist

APPID was absent in parameters.

Please check if the APPID is correct.

APPID_MCHID_NOT_MATCH

APPID and MCHID not match

APPID and MCHID not match

please check if the APPID and mchid match.

INVALID_ORDER_NO

invalid order no.

order no. passed in is not correct.

parameter error, please check if the original order no. passed in exist or if the original order is failed.

KSHER_SIGN_ERROR

signature error

merchant signature is not correct

check the signature parameter

KSHER_SYSTEMERROR

Error occurred during handling the request.

Error occurred during handling the request.

Issue the refund request again.

KSHER_VERSION_ERROR

API version used by merchant is not compatible with the API of the vendor

API version used does not match

contact the vendor to confirm current API version

KSHER_ERROR_ORDER_NO

Missing order no parameter

Missing order no parameter

Check the order no.(mch_order_no, ksher_order_no, channel_order_no)

KSHER_REFUND_EXPIRE

Refund can not be made via API by merchant after the order already settled.

Refund can not be made via API by merchant after the order already settled.

Please submit refund request on the Ksher merchant platform.

KSHER_INVALID_MCHINFO

merchant information is not correct

the appid passed in does not exist in the vendor’s system

confirm if the appid passed in is correct, contact the vendor if needed.

KSHER_INVALID_ORDER_NO

order no. does not exist

the order no. passed in cannot be found in vendor’s system

check if the order no. passed in is correct

KSHER_INVALID_REFUND_FEE

invalid amount to refund

amount to refund is greater than the available amount

check if the amount to refund is correct

KSHER_INVALID_REFUND_AMOUNT

Partially refund is not allowed

Partially refund is not allowed

refund completely is allowed.

KSHER_INVALID_REFUND_BALANCE

The balance amount of this order(price fee minus amount already refunded.) is not enough for the amount to refund.

The balance amount of this order(price fee minus amount already refunded.) is not enough for the amount to refund.

Check the amount to refund.

KSHER_INVALID_REFUND_ORDER_NO

invalid refund order no.

the refund order no. passed already used.

check if the refund order no. passed in, use a new one.

KSHER_INVALID_REFUND_FEE_OR_TYPE

Refund currency or amount invalid

Refund currency or amount invalid

Check the currcency or amount to refund.

KSHER_PARAM_OVERLENGTH

Some parameters are too long.

Some paramters are too long

Check the parameters.

KSHER_INVALID_PARAM

Missing parameter(s)

Some parameter(s) invalid

Check parameter(s) is correct

KSHER_DUPLICATED_ORDERNO

The merchant order no already used.

The merchant order no already used.

Use a new order no to make the order again.

KSHER_EXCEED_AMOUNT_LIMIT

the amount to pay exceeds the amount limit configured

the amount to pay exceeds the amount limit configured

make sure if the amount to pay exceeds the limit.

KSHER_FEETYPE_NOT_MATCH

fee type does not match

pricing fee type does not match the registered fee type

merchant needs to modify the program, if merchant is sure that the fee type passed in is correct, contact the vendor.

KSHER_DUPLICATED_ORDERNO

The merchant order no already used.

The merchant order no already used.

Use a new order no to make the order again.

KSHER_DUPLICATED_REFUND_ORDERNO

invalid refund order no

the refund order no. passed already used.

check if the refund order no. passed in, use a new one.

KSHER_AMOUNT_IS_TOO_SMALL

The amount is too small.

The amount is too small

Pass in a larger amount

KSHER_CHANNEL_RESPONSE_ERROR

Error occurred during query operation

Error occurred during query operation

Make an order query again.

LACK_PARAMS

parameter absent

mandatory parameter(s) was absent

please check if the parameters were sufficient

MCHID_NOT_EXIST

MCHID not exist

MCHID was absent in parameters.

please check if the MCHID is correct.

NOAUTH

the merchant has no access to this interface.

the merchant has not yet got the access to this interface.

contact the vendor(Ksher)

NOT_UTF8

coding format error

required coding format was not used.

please use UTF-8 coding

NOTENOUGH

Not enough unsettled fund for refund

There is not enough unsettled fund for refund

This error code means refund request failed due to not enough unsettled fund for refund.Merchants need to contact Ksher to authorise credit for this kind of situation. If unsettled fund is enough ,please call the refund API once there is enough unsettled fund, or retry it continuously.

ORDERPAID

order closed already

the order closed already.

the order no. is already closed, please launch a new order.

ORDERNOTEXISTR

the order no. does not exist

the order does not exist in the system

merchant need to check if the order no. is correct.

OUT_TRADE_NO_USED

repetitive out_trade_no

the same order cannot be submitted for multi times.

please verify whether the out_trade_no. was submitted repetitively

PARAM_ERROR

parameters error

parameters requested are not correct

check the application according to the information returned, contact the vendor if needed.

POST_DATA_EMPTY

post parameters are empty

post parameters should not be empty

please check the paremeters posted in the http request.

REQUIRE_POST_METHOD

please use POST method

the method used to pass the parameters was not POST.

please check if the parameters was passed by POST method

SYSTEMERROR

system error

system timeout

call the order query API immediately to check order status, and decide next step according to the status of the order

SIGNERROR

signature error

the signature parameter is not correct

please check if the signature parameter and method meet the requirements of signature algorithm

TRADE_STATE_ERROR

order state error

there will be latency for the result for refund application, please query later(20 minutes for balance payment, 3 workdays for card payment)

USER_ACCOUNT_ABNORMALE

refund failed

user account is exceptional or unregistered.

this status stands for the failure of the refund operation, merchant can handle the refund by himself.

XML_FORMAT_ERROR

XML format error

XML format error

please check whether the format of XML parameters is correct.

SHOP_ID_ERROR

Invalid merchant information

Invalid merchant information

Please check if the APPID is correct.

CANCEL_ERROR

The cancellation failed

The cancellation failed

Order cannot cancel because of wallet not support or already paid

ORDER_NOT_EXIST

This order does not exist.

Not found this order

Check mch order no is correct or not

USER_NOT_EXIST

This user does not exist.

Not found this order

Check mch order no is correct or not

ORDER_NOT_PAY

This order has not been paid.

This order has not been paid.

Order still not paid

ORDER_ALREADY_REFUND

This order has been refunded.

This order has been refunded.

order has been refunded.

REFUND_FAILED

Refund failed.

Refund failed.

check value is correct

EXPIIRE_ORDER

The order has timed out

The order has timed out

expired time set in order is timeout

ORDER_ERROT

Order number must be unique

Order number must be unique

Check order should be not duplicate or create before

SHOP_NOT_EXIST

This shop does not exist

This shop does not exist

Please check if the APPID is correct.

PRICE_NOT_EXIST

Invalid price

Invalid price

Check amount should be not 0 or create this order before

MCH_ORDER_ERROR

Duplicate order number

Duplicate order number

Check order should be not duplicate or create before

RADIS_DOES_NOT_EXIST

Redis does not exist

Check url is correct

QUERY_ORDER_ERROR

Search for failed not completed transaction

Search for failed not completed transaction

check your value is correct

ORDER_PAYMENT_ERROR

Your payment failed

Your payment failed

Retry to paid again

SMS_CODE_ERROR

Failed to receive OTP code

Failed to receive OTP code

check you mobile phone is correct

CHANNEL_LIST_ERROR

You have not apply for any ewallets nor credit card payment services

You have not apply for any ewallets nor credit card payment services

check your channel value is correct or support

MEMBER_ID_ERROR

member_id cannot be number only

member_id cannot be number only

Please check your member_id not use Real number like 1,1200,00001, but can use string with number like ABC1234.

SAVE_CARD_ERROR

Failed to save card

Failed to save card

Check Bank card channel can support save card function

MEMBER_CARD_ERROR

This card cannot be used

This card cannot be used

This card is not available, please change card to paid

EMPTY_CARD_NO

Card information is incorrect

Card information is incorrect

Check your card input information

DELETE_MEMBER_CARD_ERROR

Failed to delete card

Failed to delete card

Refresh page and try to delete again

MEMBER_CARD_NOT_EXIST

This card does not exists

This card does not exists

check your member_id is correct

MEMBER_ID_LENGTH_OUT_OF_LIMIT

member_id cannot be more than 32 characters

member_id cannot be more than 32 characters

Please check your member_id not use Real number like 1,1200,00001, but can use string with number like ABC1234.

and member_id cannot be more than 32 characters

ORDER_ALREADY_CANCEL

The order has been canceled

The order has been canceled

This order already cancel, Please try to create the new order.

ORDER_ALREADY_CANCEL_OPERATION_CANNOT_BE_PERFORMED

The order has been canceled, this action cannot proceed

The order has been canceled, this action cannot proceed

This order already cancel, Please try to create the new order.

ORDER_ALREADY_PAY_OPERATION_CANNOT_BE_PERFORMED

This order has already been paid, this action cannot proceed

This order has already been paid, this action cannot proceed

This order already paid, Please try to create the new order.

ORDER_ALREADY_PAYMENT_SUCCESS

Order has been completed

Order has been completed

This order already paid, Please try to create the new order.

INSTAL_FEE_PAYER_ERROR

Failed to apply setting of interest-bearing

Failed to apply setting of interest-bearing

check at instal_fee_payer_merchant_channel_list or instal_fee_payer is correct

TRUEMONEY_OPT_CODE_ERROR

Wrong OTP code

Wrong OTP code

check OTP is correct

MANY_OPEN

Someone is paying this bill. DO NOT pay twice.

Someone is paying this bill. DO NOT pay twice.

check on exclusive is turn on or not. if have another person open payment page

LANG_REPEAT_SUBMIT

Repetitive submission

Repetitive submission

order already create before, create the new one.