Website Integration Guide
Overview
Ksher Gateway Pay is an Online e-Payment aggregator service. With our service, you only need to integrate once to have all e-wallets, WeChat Pay, Alipay, PromptPay, AirPay, LINE Pay, True Money and Credit/Debit Card Online Payment available in your website.
It helps merchant to create a checkout page with all Online e-wallets and Card Payment 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.
Ksher provide two method for calling Online e-payment aggregator service:
-
API method. Which allows merchant POST data to API url " https://gateway.ksher.com/api/gateway_pay " to request order.
It’s recommended to use gateway pay for Website integration.
Applicable Cases
Both PC website and H5/mobile payment scenarios are supported by Ksher Gateway Pay. Our payment system automatically recognises user’s device and response the correct page for H5/mobile or PC accordingly.
You can choose to display H5 or PC checkout page version if you prefered.
Payment Flow Sequence Diagram
Merchant can follow this procedure to implement own system follow Online Gateway Pay payment flow.
-
Buyer login merchant’s website to choose product and place an order.
-
Merchant request Ksher PaymentSystem a transaction
-
Ksher Payment System response Ksher aggregator payment page URL.
-
Merchant display Ksher aggregator payment page with response URL.
-
User choose payment E-wallet on Ksher aggregator gateway payment page.
-
Ksher Payment System verify and create an order.
-
Ksher Payment System request transaction to EwalletPaymentSystem
-
Ewallet Payment System response transaction data including: QR Code, etc. to Ksher
-
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.
-
-
User confirm to pay.
-
Merchant polling query payment result from Ksher Payment System.
-
Ksher Payment System polling query payment result from E-wallet Payment System.
-
E-wallet response payment result to Ksher.
-
Ksher response payment result to Merchant.
-
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.
Credit Card
-
Select Card, it will turn to Ksher DIY checkout page.
-
Continue to pay with fill personal card information.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to KTB and your Success page.
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.
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.
Alipay
Select Alipay, it will redirect to Alipay checkout page, continue to pay with open Alipay e-wallte app or login Alipay account browser.
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.
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.
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.
Select TrueMoney and your account is dynamic QR, it will create Ksher checkout page. Continue payment with scan QR code.
Atome
-
Select Thai E-wallets tab and select Atome, will display QR
-
Using Atome app to QR to Scan QR to pay or pay on browser.
-
If select pay on browser, Enter mobile, OTP and click Next.
-
Enter payment method, accept the condition and Confirm payment
-
Click Back to Merchant to go back Merchant page
KTC Installment
-
Select Card tab and select KTC Installment, will redirect to Fill in page.
-
fill card information and select how long installmet term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to KTB and your Success page.
If merchant absort fee will display like this
KBANK Installment
-
Select Card tab and select KBANK Installment, will redirect to Fill in page.
-
fill card information and select how long installmet term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to KTB and your Success page.
If merchant absort fee will display like this
Krungsri Installment
-
Select Card tab and select Krungsri Installment, will redirect to Fill in page.
-
fill card information and select how long installment term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to your Success page.
or if merchant absorb fee will display
First Choice Installment
-
Select Card tab and select First Choice Installment, will redirect to Fill in page.
-
fill card information and select how long installment term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to your Success page.
or if merchant absorb fee will display
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.
Credit Card
-
Select Card, it will turn to Ksher DIY checkout page.
-
Continue to pay with fill personal card information.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to KTB and your Success page.
Alipay
Select Alipay, it will redirect to Alipay payment page, continue to pay with open Alipay e-wallte app or login Alipay account browser.
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.
Open payment link in WeChat browser ,it will create Ksher checkout page. Continue to pay with WeChat app.
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.
Select TrueMoney, it will create Ksher checkout page. Continue payment with scan QR code.
Mobile Atome
-
Select Thai E-wallets tab and select Atome, will display pay by app or pay in browser
-
If merchant select pay by app, will open Atome app on mobile phone
-
Enter coupon card, payment method and pay
-
Click Back to Merchant to go back Merchant page
KTC Installment
-
Select Credit/Debit Card tab and select KTC Installment, will redirect to Fill in page.
-
fill card information and select how long installmet term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to KTB and your Success page.
or if merchant absorb fee will display
KBANK Installment
-
Select Credit/Debit Card tab and select KBANK Installment, will redirect to Fill in page.
-
fill card information and select how long installmet term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to KBANK and your Success page.
or if merchant absorb fee will display
K Installment
-
Select Credit/Debit Card tab and select KBANK Installment, will redirect to Fill in page.
-
fill card information and select how long installmet term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to KBANK and your Success page.
or if merchant absorb fee will display
Mobile Krungsri Installment
-
Select Credit/Debit Card tab and select Krungsri Installment, will redirect to Fill in page.
-
fill card information and select how long installment term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to your Success page.
or if merchant absorb fee will display
Mobile First Choice Installment
-
Select Credit/Debit Card tab and select First Choice Installment, will redirect to Fill in page.
-
fill card information and select how long installment term.
-
It will redirect to card bank OTP website, fill OTP.
-
After correct OTP it redirect back to your Success page.
or if merchant absorb fee will display
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. |
-
Select Mobile Banking tab, and select SCB EASY.
-
Input App PIN.
-
Select your payment method and Click Review to go next page.
-
will summary Information customer have to pay, click Confirm to pay
-
Click Return to Merchant to go back Merchant page
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. |
-
Select Mobile Banking tab, and select Bualuang mBanking.
-
Input App PIN.
-
Select your payment method and Click Next to go next page.
-
will summary Information customer have to pay, click Confirm to pay
-
Click Back to Ksher Payment to go back Merchant page
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. |
-
Select Mobile Banking tab, and select KMA.
-
Input App PIN.
-
Select your payment method and Click Next to go next page.
-
will summary Information customer have to pay, click Confirm to pay
-
Click Back to Ksher Payment to go back Merchant page
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. |
-
Select Mobile Banking tab, and select KPLUS.
-
Input App PIN.
-
If first time customer paid with ksher by using Kplus, will appear Authorized Page.
-
Select your payment method and Click Next to go next page.
-
will summary Information customer have to pay, click Confirm to pay
-
Click Back to KSHER PAYMENT to go back Merchant page
Specifications of Gateway Pay APIs
Order Apply
API method
URL |
|
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 |
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 |
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 |
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 |
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 |
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. |
{
"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
}
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. |
{
"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 |
|
{
"lang": "",
"code": -4,
"msg": "订单号不唯一",
"message": "订单号不唯一"
}
Order Query
API method
URL |
|
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. |
|
{
"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
|
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
|
|
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 |
|
{
"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 |
{'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. |
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":"操作成功"
}
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
or use ksher_order_no to refund
API method
URL |
|
Method |
POST |
Parameter organization format |
application/x-www-form-urlencoded |
Order Refund Request Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
appid |
String(32) |
YES |
mch12345 |
Your Merchant Number. Check on merchant ksher. The format is mch{Merchant No}. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
mch_order_no |
String(32) |
YES |
2103301701291052 |
order number on merchant side, must be unique |
ksher_order_no |
String(32) |
NO |
90020210330180132318847 |
Order no. generated by Ksher. ksher Order no. should be provided when request card payment refund |
channel_order_no |
String(32) |
YES |
1207919130 |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
channel |
String(32) |
NO |
Value range: alipay,wechat,linepay,airpay,promptpay,truemoney |
|
total_fee |
Integer |
YES |
100 |
total amount of the order and it must be an integer, add 00 for decimal.Example 150.50 THB total_fee = 15050 |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
mch_refund_no |
String(32) |
YES |
refund_2103301701291052 |
generated by merchant self, each refund no. can be used once only. |
refund_fee |
Int |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
attach |
String(127) |
NO |
any extra information can be added here. |
|
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
version |
String(32) |
NO |
API version |
|
{
"appid": "mch35005",
"fee_type": "THB",
"mch_order_no": "2103301701291052",
"mch_refund_no": "refund_2103301701291052",
"nonce_str": "9c75d11e7572f887dbbfe374f205d5eb",
"refund_fee": 100,
"sign": "29cb8b5997f5e15e4c15a8caa4c7eb057a4185f1c6ecaa2a5a826b07bd07fe96a86c964abb38dcf5984399974266784cba8214478a6d9eccada4aa64ccb336d0af31aba0e63eaf0b3e972b19578b0116fdafd9c63f0756d15714284b556dbb76761a09291985bcf06319e4da5abda2652d18b8ce56962c0375168205d9abd301",
"time_stamp": "2021033014385656S",
"total_fee": 100
}
or
{
"appid": "mch35005",
"fee_type": "THB",
"ksher_order_no": "90020210330180132318847",
"mch_order_no": "2103301701291052",
"mch_refund_no": "refund_2103301701291052",
"nonce_str": "9c75d11e7572f887dbbfe374f205d5eb",
"refund_fee": 100,
"sign": "0a0efce05ccfbd17d16ae46724a8be7398656177064ac9a71ea3acc6f3fe7a46bebf458d4d15ee4bb6eb750d8cd79dd633a1c13eafd1c8894e45122d3cc4a3f381e4a3874decbdce38b3d3f9de343455bb741f07e019a960e50f577c13b4a6bd0aaf7cc1a47effe38196a64cb730b9d85ef166f3d6c6f7fca6c8edcb1bc87700",
"time_stamp": "2021033014385656S",
"total_fee": 100
}
Order Refund SUCCESS Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range:
|
msg |
String(32) |
YES |
the response message. |
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
status_code |
int |
YES |
1: it only shows the calling of the API is successful, not meaning the target business operation succeed. Non 0: Calling of the API failed, merchant can use the same parameters to launch the request again. |
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(32) |
YES |
2020042015374848S |
the time stamp of request order |
version |
String(32) |
NO |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
appid |
String(32) |
YES |
mch35000 |
Your Merchant Number. Check on how to find your appid/Merchant No.. The format is mch{Merchant No}. |
attach |
String(127) |
NO |
any extra information can be added here. |
|
cash_refund_fee |
int |
YES |
the currency Amount refunded to customer, normally in CNY. |
|
channel_order_no |
String(32) |
YES |
1207919130 |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
channel_refund_no |
String(32) |
YES |
1207919130 |
generated by channel(wechat), each refund no. can be used once only. |
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
ksher_order_no |
String(32) |
YES |
90020210330180132318847 |
Order no. generated by Ksher. |
ksher_refund_no |
String(32) |
YES |
90020210330180400878914 |
generated by Ksher, each refund no. can be used once only. |
mch_order_no |
String(32) |
YES |
generated by merchant self, it must be unique on the merchant side. |
|
mch_refund_no |
String(32) |
YES |
generated by merchant self, each refund no. can be used once only. |
|
nonce_str |
String(32) |
YES |
Random string |
|
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
refund_fee |
Int |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
result |
string(16) |
YES |
SUCCESS |
Value range: SUCCESS |
total_fee |
Int |
YES |
total amount of the order and it must be an integer, the unit is cent |
|
{
"code": 0,
"data": {
"appid": "mch35005",
"attach": "",
"cash_refund_fee": 100,
"channel": "airpay",
"channel_order_no": "1207919130",
"channel_refund_no": "1207919130",
"device_id": "",
"fee_type": "THB",
"ksher_order_no": "90020210330180132318847",
"ksher_refund_no": "90020210330180400878914",
"mch_order_no": "2103301701291052",
"mch_refund_no": "refund_2103301701291052",
"nonce_str": "9c75d11e7572f887dbbfe374f205d5eb",
"operator_id": "",
"refund_fee": 100,
"refund_time": "2021-03-30 17:04:01",
"result": "SUCCESS",
"total_fee": 100
},
"msg": "ok",
"sign": "4e8defe365f08a66b28f40843117268c49c772807196ac0b55591f992a9dcdff5d68f8fec01f029d0922df6795b72e211a3fc2de8056e4b19dc6ceaad86894f1",
"status_code": "",
"status_msg": "",
"time_stamp": "2021-03-30T18:04:01.525337+08:00",
"version": "3.0.0"
}
Order Refund FAIL Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range:
|
msg |
String(32) |
YES |
the response message. |
|
version |
String(32) |
YES |
"3.0.0" |
version of the API |
status_code |
int |
YES |
0: it only shows the calling of the API is successful, not meaning the target business operation succeed. Non 0: Calling of the API failed, merchant can use the same parameters to launch the request again. |
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(32) |
YES |
2020042015374848S |
the time stamp of request order |
data Parameters (JSON ) |
||||
result |
string(16) |
YES |
FAIL |
Value range:
|
err_code |
String(32) |
YES |
SYSTEMERROR |
refer to the error list for the details |
err_msg |
String(128) |
YES |
system error |
the detailed description of the error |
nonce_str |
String(32) |
YES |
Random string |
|
{
"code": 0,
"data": {
"err_code": "KSHER_SYSTEMERROR",
"err_msg": "ksher system error. please retry.",
"nonce_str": "19f47657a679646276f213eb67782763",
"result": "FAIL"
},
"msg": "ok",
"sign": "055ac35d8eede994c67398ede3ce91c3970460b379f26eff58bc4a838a9f1a837e41dc4a9a5c1fe6f1ba8f153459f679cdbfaeec94bcbcb16fe0d54a76b84e59",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-07-14T16:43:41.178834+08:00",
"version": "3.0.0"
}
Order Cancel
Cancel order will close link payment to allow customer access to pay after send API. If customer save QR to their local device. Customer still can make payment.
API method
URL |
|
Method |
POST |
Parameter organization format |
application/x-www-form-urlencoded |
Order Cancel 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}. |
lang |
String(256) |
YES |
The default language is English if no specification. Value range:
|
|
nonce_str |
String(32) |
YES |
Random string, must be unique |
|
time_stamp |
String(256) |
YES |
time stamp example: "time_stamp": "20190622131804" |
|
{
"mch_order_no": "test_mch_order_no",
"appid": "mch35005",
"nonce_str": "472393a69ca0b86522e1ffa98947f6c7",
"time_stamp": "2022091904121212S",
"sign": "2d6dc811009b073d7a7b4a4426cc88abb00d66fa75308211088d3305cfe13c44f49af8c6cc251bcd1351a0e7ef2844a9056386d186f8525b9419b9329eeb863c21d5d1015abdd2aa7df5401e83d856a5be92a2257b24cfcae30abcb6a32a01abaf703cdfa0c8f8fc0bb9a3dff06497506f284b8ab587c02570ab19091cba2147"
}
Order Cancel SUCCESS Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
code msg * 0: Successful operation * -1: Incorrect business information * -2: Failed to verify merchant’s signature * -3: The order does not exist * -4: The order has been paid successfully, this operation cannot be performed * -5: The order has been cancelled and this operation cannot be repeated * -6: Cancel order failed |
message |
String(128) |
Detailed description of result |
||
msg |
String(128) |
YES |
system error |
the detailed description of the error |
{
"code": 0,
"msg": "操作成功",
"data": "取消成功",
"message": "操作成功"
}
after gateway order query again will display like this
{
"sign": "8cc824680208d28c04c9adb1ca2d304958c29846a7b778cf959540899721b5901c72f7360cbd7ccb64ee6b0b57e82f97373d8c90b57343cf5550cd8e03dea306",
"data": {
"cash_fee": "",
"attach": "",
"result": "CLOSED",
"openid": "",
"rate": "",
"channel": "",
"nonce_str": "",
"mch_order_no": "k_20210520_24",
"cash_fee_type": "",
"pay_mch_order_no": "2106021528410423",
"total_fee": 2000,
"fee_type": "THB",
"ksher_order_no": "",
"channel_order_no": "",
"time_end": "",
"appid": "mch29217"
},
"message": "操作成功",
"code": 0,
"msg": "操作成功"
}
Order Cancel Fail Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
code msg * -1: Incorrect business information
|
message |
String(128) |
Detailed description of result |
||
msg |
String(128) |
YES |
system error |
the detailed description of the error |
{ "code": -1, "msg": "商户信息错误", "message": "商户信息错误"}
{ "code": -2, "msg": "验证商户签名失败", "message": "验证商户签名失败"}
{ "code": -3, "msg": "该订单不存在", "message": "该订单不存在"}
{ "code": -4, "msg": "该订单已支付成功,不能进行此操作", "message": "该订单已支付成功,不能进行此操作"}
{ "code": -5, "msg": "该订单已被取消,不能重复进行此操作", "message": "该订单已被取消,不能重复进行此操作"}
{ "code": -6, "msg": "取消订单失败", "message": "取消订单失败"}
Refund Query
Note: Promptpay and Aliapy not support this feature.
API method
URL |
|
Method |
POST |
Parameter organization format |
application/x-www-form-urlencoded |
Refund Query Request Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
appid |
String(32) |
YES |
mch12345 |
Your Merchant Number. Check on merchant ksher. The format is mch{Merchant No}. |
nonce_str |
String(32) |
YES |
ae0e6jm55qlq1o7 |
Random string, must be unique for signature. |
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
mch_order_no |
String(32) |
YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.) |
order number on merchant side, must be unique |
|
ksher_order_no |
String(32) |
YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.) |
Order no. generated by Ksher. |
|
channel_order_no |
String(32) |
YES (mch_order_no, ksher_order_no, channel_order_no not needed to provide all, you can select at least one parameters to to sending.) |
Order no. generated by payment channel(wechat, alipay etc.) |
|
channel |
String(32) |
NO |
Value range: wechat/alipay/linepay/airpay/promptpay/truemoney |
|
total_fee |
Int |
YES |
total amount of the order and it must be an integer, the unit is cent |
|
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
mch_refund_no |
String(32) |
YES |
generated by merchant self, each refund no. can be used once only. |
|
refund_fee |
Int |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
attach |
String(127) |
NO |
any extra information can be added here. |
|
device_id |
String(32) |
NO |
POS001 |
terminal id from which the request is sent, assigned by merchant. |
operator_id |
String(32) |
NO |
41234 |
operator_id number at cashier, using for merchant have muti level account or Cashier. For more information please check at Muti level account or Cashier |
time_stamp |
String(256) |
YES |
time stamp example: "time_stamp": "20190622131804" |
|
version |
String(32) |
NO |
"3.0.0" |
API version |
{
"appid": "mch20163",
"channel": "wechat",
"fee_type": "THB",
"ksher_order_no": "",
"mch_order_no": "1495773587",
"nonce_str": "IeYrVB93dq8JbJbHJq1oZAW4d7PEb4jU",
"sign": "14bc865f1d360210ef9b7551304faa905f2240e1f7eca2ddaadcdc1287cda90f3149dac8aab7163084be4fdf56fe12bdc95ae87a6b4187b94e4118e435f0db23",
"time_stamp": "20170516125822",
"version": "3.0.0"
}
or
{
"appid": "mch28321",
"ksher_order_no": "70020200714124058662887",
"mch_refund_no": "refund1594708697",
"nonce_str": "a42e75d0f3859e31f93146aaf4cf4f48",
"sign": "78f93882b5456bcd3bba29704c820f93f0863c633697322147f60b32eaeb78f4f99b79d65ff48cd1118c1955a05b674fb496b38e29692064608bf511f09141bc",
"time_stamp": "2020071417093939S"
}
Refund Query SUCCESS Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Range :
|
msg |
String(32) |
YES |
the response message. |
|
status_code |
reserved for future use |
|||
status_code |
int |
YES |
1: it only shows the calling of the API is successful, not meaning the target business operation succeed. Non 0: Calling of the API failed, merchant can use the same parameters to launch the request again. |
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(32) |
YES |
2020042015374848S |
the time stamp of request order |
version |
String(32) |
NO |
"3.0.0" |
API version |
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
data Parameters (JSON ) |
||||
cash_fee |
int |
YES |
CNY |
specifies the total cash payment amount of a transaction. |
cash_fee_type |
string(16) |
YES |
CNY |
the currency buyer paid, comply with ISO 4217, CNY by default. |
channel_order_no |
String(32) |
YES |
Order no. generated by payment channel(wechat, alipay etc.) Note: Not all these three parameters(mch_order_no, ksher_order_no, channel_order_no) are needed to provide at one time, but at least one should be provided. |
|
channel_state |
string(16) |
YES |
SUCCESS |
the response state from e-wallet |
fee_type |
String(16) |
YES |
THB |
Currency code for total_fee. refer to with ISO 4217. Value range: THB: Thailand MYR: Malaysia JPY: Japan AED: United Arab Emirates dirham (UAE) |
ksher_order_no |
String(32) |
YES |
Order no. generated by Ksher. |
|
mch_order_no |
String(32) |
YES |
generated by merchant self, it must be unique on the merchant side. |
|
nonce_str |
String(32) |
YES |
"sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y" |
Random string |
refund_count |
int |
YES |
Total times of refund for this order. |
|
refund_fee |
Int |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
refund_orders Parameters (JSON ) |
||||
channel_refund_no |
String(32) |
YES |
generated by channel(wechat), each refund no. can be used once only. |
|
ksher_refund_no |
String(32) |
YES |
generated by Ksher, each refund no. can be used once only. |
|
mch_refund_fee |
String(32) |
YES |
100 |
amount to refund, unit is cent, it must be an integer. refund partly is permitted. |
mch_refund_no |
String(32) |
YES |
generated by merchant self, each refund no. can be used once only. |
|
refund_state |
String(32) |
YES |
SUCCESS |
refund status:
|
refund_time |
String(14) |
YES |
When the refund was made. |
{
"code": 0,
"data": {
"appid": "mch28321",
"cash_fee": 204,
"cash_fee_type": "THB",
"channel_order_no": "509366",
"fee_type": "THB",
"ksher_order_no": "70020200714124058662887",
"mch_order_no": "2007141140508182",
"nonce_str": "a42e75d0f3859e31f93146aaf4cf4f48",
"refund_count": 1,
"refund_fee": 0,
"refund_orders": [
{
"channel_refund_no": "",
"ksher_refund_no": "70020200714143818745766",
"mch_refund_fee": 100,
"mch_refund_no": "refund1594708697",
"refund_state": "FAIL",
"refund_time": "2020-07-14 13:38:18"
}
],
"result": "SUCCESS",
"time_end": "2020-07-14 13:38:18",
"total_fee": 204
},
"msg": "ok",
"sign": "01bc29db4a5d01c0d2a414dd1fc7e8ab122ce48934fd2f9c63e748e9a6b2a2dc52f35bedffda2a42a1eea686dad3fc5af8c481d28bd76fff8870e029094aac76",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-07-14T17:09:40.730470+08:00",
"version": "3.0.0"
}
Refund Query FAIL Response Parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
code |
int |
YES |
0 |
Value Rangne:
|
sign |
String(256) |
YES |
b000e9b6ec3fbda482d96a3d7c75c6956a5864336c3098462525e7229e8e046e490939a3e8b320a6c68eb63795a25b79d8c74f042f0972039bb5fe9b861cefb4 |
Digital signature for verifying the authenticity of digital messages. Please check how to got Signature Algorithm page |
msg |
String(32) |
YES |
the response message. |
|
status_code |
int |
YES |
Value Range:
|
|
status_msg |
String(256) |
NO |
the status message |
|
time_stamp |
String(256) |
YES |
"20190622131804" |
time stamp |
version |
String(32) |
YES |
"3.0.0" |
API version |
data Parameters (JSON ) |
||||
result |
string(16) |
YES |
FAIL |
Value range:
|
nonce_str |
String(32) |
YES |
"sQ8gfSpeeV5Ld8ulW9q7JxUnXSOiZ90Y" |
Random string |
err_code |
String(32) |
YES |
SYSTEMERROR |
Refer to the error list for the details |
err_msg |
String(128) |
YES |
system error |
the detailed description of the error |
{
"code": 0,
"data": {
"err_code": "KSHER_INVALID_ORDER_NO",
"err_msg": "failed to find this order no ('mch_refund_no:refund1594708697i' ).",
"nonce_str": "4d4309ac8556d17238a297ea917b7b81",
"result": "FAIL"
},
"msg": "ok",
"sign": "012cc8f39b1b41857ed2511066ad76c4045c87a98b94e3574064b9ac130e5b56b4a572c96a37644a8b53a7ca25ee5bae051c9b89a8323852e2eb805484a4d399",
"status_code": "",
"status_msg": "",
"time_stamp": "2020-07-14T17:13:32.181825+08:00",
"version": "3.0.0"
}
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
-
In case you’ve never saved card, you can directly click at “credit/debit" to pay
-
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
-
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.
-
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
-
In case you’ve never saved card, you can directly click at “credit/debit" to pay
-
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
-
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.
-
In case you’ve ever saved card, you can also delete saved card
Gateway pay integrated online testing tool
You can use online testing tools. Please get it from https://gateway.ksher.com/demo.html
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. |