JP_GLO商户对接文档(1.02)
接入流程
- 获取商户ID(mch_id)、密钥、API域名(API_HOST & CASHIER_HOST)
- 提供贵司下单IP,以开通IP白名单,并提供订单回调地址的
- 依照此文档进行api接口对接
API说明
- 接口采用
HTTP请求的形式
- 签名采用MD5杂凑运算
- 所有的金额单位为「分」
- 请求成功时,返回参数中的status固定为
0且msg为OK,其他情况请参考请求错误状态列表
签名步骤
- 将所有非空值(
null)请求参数按照名称字符ASCII升序排列,轉換為{key}={value}字串並以&拼接,最後将商户密钥作为最后一个参数,参数名为key
- 将待签名字符串进行MD5杂凑运算并转为大写,得到签名
{
"mch_id": 1,
"mch_order_no": "111123456789",
"apply_amount": 10000000,
"pay_type": "bankcard",
"order_type": "normal",
"remark": "",
"user_id": "123456",
"device_type": "ios",
"device_ip": "1.1.1.1",
"real_name": "Thomas",
"bank_code": "VCB",
"timestamp": 1630000000
}
apply_amount=10000000&bank_code=VCB&device_ip=1.1.1.1&device_type=ios&mch_id=1&mch_order_no=111123456789&order_type=normal&pay_type=bankcard&real_name=Thomas&remark=×tamp=1630000000&user_id=123456&key=9ce23be4-a31b-498f-b951-ad7e771c3d73
F916EF22B036E81E122DC647B6E2F243
获取当前收银台下单金额区间
API请求方式
HTTP GET
- Header
{"Content-Type": "application/json"}
- body为JSON字符串
- 注意参数的类型,区分
integer和string
接口地址:
http://<CASHIER_HOST>/api/cashier/valid_amount/
请求参数(非必填参数值可不传)
| 名称 |
含义 |
类型 |
是否必填 |
备注 |
| mch_id |
商户ID |
integer |
YES |
|
| user_id |
用户ID |
string |
YES |
|
| device_type |
设备类型 |
string |
YES |
举例:ios,格式不设限 |
| device_ip |
用户IP地址 |
string |
YES |
|
| device_id |
设备ID |
string |
YES |
|
| brand_code |
品牌代码 |
string |
NO |
品牌须由商户透过接口新增 |
| real_name |
用户真实姓名 |
string |
NO |
不提供则金额区间不包含实名通道 |
| timestamp |
时间戳 |
integer |
YES |
请求时生成 |
| sign |
签名 |
string |
YES |
字符串大写,参考签名步骤 |
{
"mch_id": 1,
"user_id": "123456",
"device_type": "ios",
"device_ip": "1.1.1.1",
"device_id": "EC:51:BC:97:FF:19",
"brand_code": "TEST",
"timestamp": 1657000217,
"sign": "5C8719D3F5448882FE0074E1FD0AF659"
}
返回参数
| 名称 |
含义 |
类型 |
备注 |
| status |
接口状态 |
integer |
0为成功,其它为失败 |
| msg |
接口消息 |
string |
status非0时为错误原因 |
| timestamp |
时间戳 |
string |
返回时生成 |
| data |
金额区间数据 |
dict |
请求成功时返回 |
| data.base_unit |
金额基本单位 |
integer |
下单金额必须为基本单位之整数倍 |
| data.amount_range |
金额区间 |
list(integer) |
|
| data.quota |
定额额度 |
list(integer) |
|
我方系统将支付类型分类为定额/非定额
amount_range统计可用非定额类型上下限并集
quota统计可用定额类型的去重额度
实际quota内的额度可能会超出amount_range
{
"status": 0,
"msg": "OK",
"timestamp": "2022-02-17 14:19:25",
"data": {
"base_unit": 100,
"amount_range": [1000, 1000000],
"quota": [100, 500, 1000, 4000]
}
}
获取各支付类型下单金额区间
HTTP GET
- Header
{"Content-Type": "application/json"}
- body为JSON字符串
- 注意参数的类型,区分
integer和string
接口地址:
http://<CASHIER_HOST>/api/cashier/valid_pay_types/
请求参数(非必填参数值可不传)
| 名称 |
含义 |
类型 |
是否必填 |
备注 |
| mch_id |
商户ID |
integer |
YES |
|
| user_id |
用户ID |
string |
YES |
|
| device_type |
设备类型 |
string |
YES |
举例:ios,格式不设限 |
| device_ip |
用户IP地址 |
string |
YES |
|
| device_id |
设备ID |
string |
YES |
|
| brand_code |
品牌代码 |
string |
NO |
品牌须由商户透过接口新增 |
| real_name |
用户真实姓名 |
string |
NO |
不提供则金额区间不包含实名通道 |
| timestamp |
时间戳 |
integer |
YES |
请求时生成 |
| sign |
签名 |
string |
YES |
字符串大写,参考签名步骤 |
{
"mch_id": 1,
"user_id": "123456",
"device_type": "ios",
"device_ip": "1.1.1.1",
"device_id": "EC:51:BC:97:FF:19",
"brand_code": "TEST",
"timestamp": 1657000217,
"sign": "5C8719D3F5448882FE0074E1FD0AF659"
}
返回参数
| 名称 |
含义 |
类型 |
备注 |
| status |
接口状态 |
integer |
0为成功,其它为失败 |
| msg |
接口消息 |
string |
status非0时为错误原因 |
| timestamp |
时间戳 |
string |
返回时生成 |
| data |
|
dict |
请求成功时返回 |
| data.base_unit |
金额基本单位 |
integer |
下单金额必须为基本单位之整数倍 |
| data.pay_types |
支付类型数据列表 |
list(dict) |
|
| data.pay_types[i] |
单一支付类型数据 |
dict |
|
| data.pay_types[i].code |
支付类型编码 |
string |
請参考支付类型列表 |
| data.pay_types[i].min_amount |
最小金額 |
integer |
定额类型时为0 |
| data.pay_types[i].max_amount |
最大金額 |
integer |
定额类型时为0 |
| data.pay_types[i].quota |
定额额度 |
list(integer) |
非定额类型时为空阵列 |
| data.pay_types[i].with_sub_types |
是否存在子类型 |
bool |
|
| data.pay_types[i].sub_pay_types |
子类型数据列表 |
list(dict) |
支付类型不存在子类时为空阵列 |
| data.pay_types[i].sub_pay_types[j] |
单一子类型数据 |
dict |
|
| data.pay_types[i].sub_pay_types[j].code |
子类型编码 |
string |
|
| data.pay_types[i].sub_pay_types[j].min_amount |
最小金額 |
integer |
定额类型时为0 |
| data.pay_types[i].sub_pay_types[j].max_amount |
最大金額 |
integer |
定额类型时为0 |
| data.pay_types[i].sub_pay_types[j].quota |
定额额度 |
list(integer) |
非定额类型时为空阵列 |
当支付类型包含子类型时,data.pay_types[i]内展示的区间/额度为所有子类型取并集
{
"status": 0,
"msg": "OK",
"timestamp": "2022-02-17 14:19:25",
"data": {
"base_unit": 100,
"pay_types": [
{
"code": "qris",
"with_sub_types": false,
"min_amount": 100,
"max_amount": 150000000,
"quota": [],
"sub_pay_types": []
},
{
"code": "va",
"with_sub_types": true,
"min_amount": 100,
"max_amount": 150000000,
"quota": [],
"sub_pay_types": [
{
"code": "BDIN",
"min_amount": 100,
"max_amount": 150000000
},
{
"code": "BMRI",
"min_amount": 100,
"max_amount": 150000000
},
{
"code": "CENA",
"min_amount": 1000000,
"max_amount": 150000000
}
]
},
{
"code": "bankcard",
"with_sub_types": true,
"min_amount": 3000000,
"max_amount": 150000000,
"quota": [],
"sub_pay_types": [
{
"code": "PDKB",
"min_amount": 3000000,
"max_amount": 150000000
},
{
"code": "PDKT",
"min_amount": 3000000,
"max_amount": 150000000
}
]
},
{
"code": "dana",
"with_sub_types": false,
"min_amount": 100,
"max_amount": 150000000,
"quota": [],
"sub_pay_types": []
},
{
"code": "ovo",
"with_sub_types": false,
"min_amount": 100,
"max_amount": 2000000000,
"quota": [],
"sub_pay_types": []
}
]
}
}
收银台获取接口
API请求方式
HTTP POST
- Header
{"Content-Type": "application/json"}
- body为JSON字符串
- 注意参数的类型,区分
integer和string
接口地址:
http://<CASHIER_HOST>/api/cashier/
请求参数(非必填参数值可不传)
| 名称 |
含义 |
类型 |
是否必填 |
备注 |
| mch_id |
商户ID |
integer |
YES |
|
| mch_order_no |
商户订单号 |
string |
YES |
不可重复 |
| apply_amount |
订单金额 |
integer |
YES |
单位为分 |
| user_id |
用户ID |
string |
YES |
|
| device_type |
设备类型 |
string |
YES |
举例:ios,格式不设限 |
| device_id |
设备ID |
string |
YES |
|
| device_ip |
用户IP地址 |
string |
YES |
|
| pay_type |
支付类型 |
string |
NO |
請参考支付类型列表 |
| sub_pay_type |
支付类型子类 |
string |
NO |
如指定支付类型存在子类则必填 |
| brand_code |
品牌代码 |
string |
NO |
品牌须由商户透过接口新增 |
| real_name |
用户真实姓名 |
string |
NO |
不提供则无法使用实名通道 |
| phone |
用户手机号 |
string |
NO |
需以国码开头(如印度:+91) |
| email |
用户信箱 |
string |
NO |
验证字串中间含有@ |
| address |
用户地址 |
string |
NO |
不验证 |
| pan_code |
印度个人税号 |
string |
NO |
大写5 + 数字4 + 大写1,正则参考:^[A-Z]{5}[0-9]{4}[A-Z]{1}$ |
| user_ext |
用户信息 |
string |
NO |
为JSON字串,解开可得object 内容参考用户个人信息(下单) 注意: 内容若与其他参数重复,则以user_ext为优先 |
| timestamp |
下单时间戳 |
integer |
YES |
下单时生成 |
| sign |
签名 |
string |
YES |
字符串大写,参考签名步骤 |
{
"mch_id": 1,
"mch_order_no": "111123456789",
"apply_amount": 10000000,
"user_id": "123456",
"device_type": "ios",
"device_id": "EC:51:BC:97:FF:19",
"device_ip": "1.1.1.1",
"brand_code": "TEST",
"real_name": "Thomas",
"timestamp": 1656929507,
"sign": "5DC800E8F4AB62C63172CA6C66A0C2D6"
}
返回参数
| 名称 |
含义 |
类型 |
备注 |
| status |
接口状态 |
integer |
0为成功,其它为失败 |
| msg |
接口消息 |
string |
status非0时为错误原因 |
| timestamp |
时间戳 |
string |
返回时生成 |
| data |
订单数据 |
dict |
|
| data.mch_order_no |
商户订单号 |
string |
|
| data.order_no |
平台订单号 |
string |
|
| data.status |
订单状态 |
string |
请求成功后可能为new或commit |
| data.pay_type |
支付类型 |
string |
data.status为new时必定为null |
| data.sub_pay_type |
支付子类型 |
string |
data.status为new时必定为null |
| data.open_type |
打开方式 |
string |
data.status为new时固定为sys_url,表示可使用浏览器打开 |
| data.url |
收银台/支付链接 |
string |
data.status为commit时会是支付链接 |
{
"status": 0,
"msg": "OK",
"timestamp": "2022-02-17 12:38:50",
"data": {
"order_no": "2202171238501159",
"mch_order_no": "111123456789",
"status": "new",
"pay_type": null,
"sub_pay_type": null,
"open_type": "sys_url",
"url": "http://test.cashier.com/?token=9af14fec-1a15-4230-b809-ef5e582ab989"
}
}
获取用户订单查询入口(使用此接口前需要事前申请)
API请求方式
HTTP POST
- Header
{"Content-Type": "application/json"}
- body为JSON字符串
- 注意参数的类型,区分
integer和string
接口地址:
http://<CASHIER_HOST>/api/cashier/orders/
请求参数(非必填参数值可不传)
| 名称 |
含义 |
类型 |
是否必填 |
备注 |
| mch_id |
商户ID |
integer |
YES |
|
| user_id |
用户ID |
string |
YES |
|
| brand_code |
品牌代码 |
string |
NO |
品牌须由商户透过接口新增 |
| timestamp |
下单时间戳 |
integer |
YES |
下单时生成 |
| sign |
签名 |
string |
YES |
字符串大写,参考签名步骤 |
{
"mch_id": 1,
"user_id": "123456",
"brand_code": "TEST",
"timestamp": 1656947588,
"sign": "4BD9AC2BF58503E389A3E916E33F3227"
}
返回参数
| 名称 |
含义 |
类型 |
备注 |
| status |
接口状态 |
integer |
0为成功,其它为失败 |
| msg |
接口消息 |
string |
status非0时为错误原因 |
| timestamp |
时间戳 |
string |
返回时生成 |
| data |
订单数据 |
dict |
|
| data.mch_id |
商户ID |
integer |
|
| data.user_id |
用户ID |
string |
|
| data.brand_code |
品牌代码 |
string |
品牌须由商户透过接口新增 |
| data.url |
收银台订单查询入口 |
string |
|
{
"status": 0,
"msg": "OK",
"timestamp": "2022-02-17 12:38:50",
"data": {
"mch_id": 1,
"user_id": "123456",
"brand_code": "TEST",
"url": "http://test.cashier.com/order_history/?token=9af14fec-1a15-4230-b809-ef5e582ab989"
}
}
代收补单接口(商户用)
API请求方式
HTTP POST
- Header
{"Content-Type": "application/json"}
- body为JSON字符串
- 注意参数的类型,区分
integer和string
接口地址:
http://<API_HOST>/api/order/replenish/
请求参数(非必填参数值可不传)
| 名称 |
含义 |
类型 |
是否必填 |
备注 |
| mch_id |
商户ID |
integer |
YES |
|
| mch_order_no |
商户订单号 |
string |
YES |
不可重复 |
| apply_amount |
订单金额 |
integer |
YES |
单位为分 |
| user_id |
用户ID |
string |
YES |
|
| pay_type |
支付类型 |
string |
NO |
請参考支付类型列表 |
| sub_pay_type |
子类代码 |
string |
NO |
部分支付类型需要,請参考支付类型列表 |
| brand_code |
商户品牌代码 |
string |
NO |
品牌须由商户透过接口新增 |
| real_name |
用户真实姓名 |
string |
NO |
|
| timestamp |
下单时间戳 |
integer |
YES |
下单时生成 |
| sign |
签名 |
string |
YES |
字符串大写,参考签名步骤 |
{
"mch_id": 1,
"mch_order_no": "111123456789",
"apply_amount": 10000000,
"pay_type": "pix",
"user_id": "123456",
"real_name": "Thomas",
"timestamp": 1657003362,
"sign": "B9BBBB222845C00E30AD38DEB6393AC5"
}
补单流程
- 补单由商户代替用户向JP提出
- 我方运营人员处理补单
- 订单完成后JP自动发起回调请求
- 商户收到补单成功的回调后,补发用户充值金
返回参数
| 名称 |
含义 |
类型 |
备注 |
| status |
接口状态 |
integer |
0为成功,其它为失败 |
| msg |
接口消息 |
string |
接口状态非0时为错误原因 |
| timestamp |
时间戳 |
string |
返回时生成 |
| data |
订单数据 |
dict |
|
| data.mch_order_no |
商户订单号 |
string |
|
| data.order_no |
平台订单号 |
string |
|
| data.status |
订单状态 |
string |
下单成功后固定为new |
| data.pay_type |
支付类型 |
string |
原样返回 |
| data.sub_pay_type |
子类代码 |
string |
原样返回 |
| data.apply_amount |
订单金额 |
integer |
原样返回 |
| data.real_amount |
实际支付金额 |
integer |
下单成功后固定为null |
| data.remark |
订单说明 |
string |
下单成功后固定为null |
{
"status": 0,
"msg": "OK",
"timestamp": "2022-05-04 09:06:40",
"data": {
"order_no": "2205040906401871",
"mch_order_no": "111123456789",
"status": "new",
"pay_type": "pix",
"sub_pay_type": null
"apply_amount": 10000000,
"real_amount": null,
"remark": null
}
}
{
"status": 2012,
"msg": "商户订单ip不在白名单中",
"timestamp": "2022-02-17 12:41:25"
}
支付回调
- 支付结果会以
HTTP POST JSON形式从平台服务器发往贵司提供的回调地址
- 贵司收到通知处理成功后回复
{"status": 0}
- 回复内容可加上msg以具体描述处理情形(非必填)
- 示例
{
"status": 0,
"msg": "处理成功"
}
- 我司在没有收到贵司成功响应前,会通过一定的策略定期重新发起通知
注意
- 請同时校验商户订单号及订单金额是否正确。
- 建议商户添加回调IP白名单。
- 一个订单可能会多次发送给接入方系统,接入方系统必须能够正确处理重复的通知。
例如:商户手动处理为成功的订单,可能会再收到来自JP的成功回调
回调参数
| 名称 |
含义 |
类型 |
备注 |
| mch_order_no |
商户订单号 |
string |
|
| order_no |
平台订单号 |
string |
|
| status |
订单状态 |
string |
订单成功(success)/失败(fail);通常只回调成功订单 |
| pay_type |
支付类型 |
string |
|
| sub_pay_type |
子类代码 |
string |
|
| apply_amount |
下单金额 |
integer |
|
| real_amount |
实际支付金额 |
integer |
|
| remark |
订单说明 |
string |
|
| user_ext |
用户信息 |
string |
为JSON字串,解开可得object 内容参考用户个人信息 |
| timestamp |
时间戳 |
integer |
|
| sign |
签名 |
string |
字符串大写,参考签名步骤 |
{
"order_no": "2202171238501159",
"mch_order_no": "111123456789",
"status": "success",
"apply_amount": 10000000,
"real_amount": 10000000,
"pay_type": "pix",
"sub_pay_type": null,
"remark": null,
"timestamp": 1656945134,
"sign": "DCB154D0C14F1B8803B1224A8DCC82D1"
}
订单查询(商户用)
API请求方式
HTTP GET
- Header
{"Content-Type": "application/json"}
- 注意参数的类型,区分
integer和string
接口地址:
http://<API_HOST>/api/order/query/<str:mch_order_no>/
请求参数(非必填参数值可不传)
| 名称 |
含义 |
类型 |
是否必填 |
备注 |
| mch_id |
商户ID |
integer |
YES |
|
| timestamp |
时间戳 |
integer |
YES |
请求时生成 |
| sign |
签名 |
string |
YES |
字符串大写 |
http://<API_HOST>/api/order/query/111123456789/?mch_id=1×tamp=1657003725&sign=2DB6CA61B12EAC901B15E76C014F0B01
返回参数
| 名称 |
含义 |
类型 |
备注 |
| status |
接口状态 |
integer |
0为成功,其它为失败 |
| msg |
接口消息 |
string |
接口状态非0时为错误原因 |
| timestamp |
时间戳 |
string |
返回时生成 |
| data |
订单数据 |
dict |
请求成功时返回,以下参数为data内数据 |
| data.mch_order_no |
商户订单号 |
string |
|
| data.order_no |
平台订单号 |
string |
|
| data.status |
订单状态 |
string |
参考订单状态列表 |
| data.pay_type |
支付类型 |
string |
|
| data.sub_pay_type |
子类代码 |
string |
|
| data.apply_amount |
下单金额 |
integer |
|
| data.real_amount |
实际支付金额 |
integer |
订单状态非success時為null |
| data.remark |
订单说明 |
string |
|
| data.user_ext |
用户信息 |
string |
为JSON字串,解开可得object 内容参考用户个人信息 |
{
"status": 0,
"msg": "OK",
"timestamp": "2022-04-08 16:15:39",
"data": {
"mch_order_no": "111123456789",
"order_no": "2203240014034824",
"status": "new",
"pay_type": null,
"sub_pay_type": null,
"apply_amount": 60000,
"real_amount": null,
"remark": null,
"user_ext": "{\"user_id\":\"123456\"}"
}
}
{
"status": 0,
"msg": "OK",
"timestamp": "2022-04-08 16:15:39",
"data": {
"mch_id": 1,
"mch_order_no": "111123456789",
"order_no": "2203240014034824",
"status": "commit",
"pay_type": "pix",
"sub_pay_type": null,
"apply_amount": 60000,
"real_amount": null,
"remark": null,
"user_ext": "{\"user_id\":\"123456\"}"
}
}
{
"status": 5001,
"msg": "订单不存在",
"timestamp": "2022-04-08 16:33:16"
}
代收申訴接口(商户用)
API请求方式
HTTP POST
- Header
{"Content-Type": "application/json"}
- body为JSON字符串
- 注意参数的类型,区分
integer和string
接口地址:
http://<API_HOST>/api/order/inquiry/
请求参数(非必填参数值可不传)
| 名称 |
含义 |
类型 |
是否必填 |
备注 |
| mch_id |
商户ID |
integer |
YES |
|
| order_no |
平台订单号 |
string |
YES |
|
| mch_inquiry_no |
商户申訴单号 |
string |
YES |
|
| inquiry_amount |
申诉金额 |
integer |
YES |
单位为分 |
| user_id |
用户ID |
string |
YES |
|
| user_real_name |
用户真实姓名 |
string |
YES |
|
| notify_url |
回调地址 |
string |
YES |
申诉回调使用 |
| receipt |
凭证 |
list(string) |
YES |
充值证明 |
| user_remark |
用户备注 |
string |
NO |
|
| vip_level_last_month |
上月VIP等级 |
integer |
NO |
|
| vip_level_current_month |
本月VIP等级 |
integer |
NO |
|
| timestamp |
时间戳 |
integer |
YES |
请求时生成 |
| sign |
签名 |
string |
YES |
字符串大写,参考签名步骤 |
{
"mch_id": 1,
"order_no": "2203240014034824",
"mch_inquiry_no": "111234567890",
"inquiry_amount": 1000000,
"user_id": "123456",
"user_real_name": "Ida Bagus Sudjana",
"notify_url": "http://test_inquiry.com/v3/trade/appeal_notify/jp/",
"receipt": [
"https://imgur.com/gallery/VWjRf"
],
"user_remark": "I've paid!",
"timestamp": 1657004710,
"sign": "0AF3ED4FEF59843AE7027F5D86869927"
}
返回参数
| 名称 |
含义 |
类型 |
备注 |
| status |
接口状态 |
integer |
0为成功,其它为失败 |
| msg |
接口消息 |
string |
接口状态非0时为错误原因 |
| timestamp |
时间戳 |
string |
返回时生成 |
| data |
支付类型数据 |
dict |
请求成功时返回 |
| data.mch_order_no |
商户充值订单号 |
string |
|
| data.order_no |
平台充值订单号 |
string |
|
| data.mch_inquiry_no |
商户申诉单号 |
string |
|
| data.inquiry_order_no |
平台申诉单号 |
string |
|
| data.status |
订单状态 |
string |
请求成功后固定为new |
| data.inquiry_amount |
申诉金额 |
integer |
|
| data.user_remark |
用户备注 |
string |
原样返回,未传则为null |
| data.reason |
申诉成功/失败原因 |
string |
请求成功后固定为null |
{
"status": 0,
"msg": "OK",
"timestamp": "2022-05-04 11:33:42",
"data": {
"mch_order_no": "1234567890",
"order_no": "2203240014034824",
"mch_inquiry_no": "111234567890",
"inquiry_order_no": "2205041133420031",
"status": "new",
"inquiry_amount": 1000000,
"user_remark": "I've paid!",
"reason": null
}
}
{
"status": 5100,
"msg": "申诉订单已存在",
"timestamp": "2022-05-04 11:27:16"
}
{
"status": 5001,
"msg": "订单不存在",
"timestamp": "2022-05-04 12:15:24"
}
申诉回调
- 申诉结果会以
HTTP POST JSON形式从平台服务器发往申诉请求时提供的回调地址(notify_url)
- 贵司收到通知处理成功后回复
{"status": 0}
- 回复内容可加上
msg以具体描述处理情形(非必填)
- 示例
{
"status": 0,
"msg": "处理成功"
}
- 我司在没有收到贵司成功响应前,会通过一定的策略定期重新发起通知
回调参数
| 名称 |
含义 |
类型 |
备注 |
| mch_order_no |
商户充值订单号 |
string |
|
| order_no |
平台充值订单号 |
string |
|
| mch_inquiry_no |
商户申诉单号 |
string |
|
| inquiry_order_no |
平台申诉单号 |
string |
|
| status |
订单状态 |
string |
success/fail |
| inquiry_amount |
申诉金额 |
integer |
|
| user_remark |
用户备注 |
string |
|
| reason |
申诉成功/失败原因 |
string |
|
| timestamp |
时间戳 |
integer |
|
| sign |
签名 |
string |
字符串大写,参考签名步骤 |
{
"mch_order_no": "1234567890",
"order_no": "2203240014034824",
"mch_inquiry_no": "111234567890",
"inquiry_order_no": "2205041133420031",
"status": "success",
"inquiry_amount": 1000000,
"user_remark": "I've paid!",
"reason": "已完成充值",
"timestamp": 1651648963,
"sign": "FE4117A73E8EA77784DE4FFF1FDAD64B"
}
新增商户品牌(或更新品牌名稱)
API请求方式
HTTP PUT
- Header
{"Content-Type": "application/json"}
- body为JSON字符串
- 注意参数的类型,区分
integer和string
接口地址:
http://<API_HOST>/api/mch/brand/
请求参数(非必填参数值可不传)
| 名称 |
含义 |
类型 |
是否必填 |
备注 |
| mch_id |
商户ID |
integer |
YES |
|
| brand_code |
品牌代号 |
string |
YES |
|
| brand_name |
品牌名稱 |
string |
YES |
|
| timestamp |
时间戳 |
integer |
YES |
请求时生成 |
| sign |
签名 |
string |
YES |
字符串大写,参考签名步骤 |
{
"mch_id": 1,
"brand_code": "TEST",
"brand_name": "测试品牌",
"timestamp": 1656314694,
"sign": "DC322F75136CE3B0A43E93321B1A8B8D"
}
{
"status": 0,
"msg": "OK",
"timestamp": "2022-06-27 14:31:05",
"data": {}
}
订单状态列表
| 状态 |
含义 |
| new |
已产生平台订单号,用户尚未选择支付类型 |
| commit |
已匹配充值资源,等待用户进行支付 |
| success |
訂單成功 |
| fail |
訂單失败 |
请求错误状态列表
| status |
描述 |
| -1 |
内部错误,请联系管理员 |
| 1 |
参数错误 |
| 2001 |
商户不存在 |
| 2012 |
商户订单ip不在白名单中 |
| 2020 |
商户支付类型不可用 |
| 2201 |
用户已在黑名单 |
| 2202 |
用户下单过于频繁 |
| 2302 |
商户品牌不存在 |
| 5001 |
订单不存在 |
| 5002 |
暂无充值资源可用 |
| 5003 |
订单状态冲突 |
| 5012 |
该支付类型需要指定子类 |
| 5009 |
通道异常 |
| 5013 |
商户订单号重复 |
| 5020 |
用户个人信息格式有误 |
| 5100 |
申诉订单已存在 |
| 5106 |
无法申诉该订单(订单不可能被支付) |
支付类型列表
| 地区 |
名称 |
代码 |
定额 |
存在子类型 |
子类型列表 |
| 巴西 |
PIX支付 |
pix |
NO |
NO |
|
| 印度 |
UPI |
upi |
NO |
NO |
|
| 印度 |
UPI(GooglePay) |
upi_gpay |
NO |
NO |
|
| 印度 |
UPI(BHIM) |
upi_bhim |
NO |
NO |
|
| 印度 |
UPI(paytm) |
upi_paytm |
NO |
NO |
|
| 印度 |
UPI(phonepe) |
upi_phonepe |
NO |
NO |
|
| 印度 |
UPI(Amazon) |
upi_amazon |
NO |
NO |
|
| 印度 |
UPI(Original) |
upi_original |
NO |
NO |
|
| 印度 |
银行卡 |
bankcard |
NO |
YES |
參考印度银行编码列表 |
| 印尼 |
银行卡 |
bankcard |
NO |
YES |
參考印尼银行编码列表 |
| 印尼 |
网银VA |
va |
NO |
YES |
參考印尼银行编码列表 |
| 印尼 |
QRIS钱包 |
qris |
NO |
NO |
|
| 印尼 |
OVO钱包 |
ovo |
NO |
NO |
|
| 印尼 |
DANA钱包 |
dana |
NO |
NO |
|
| 印尼 |
GOPAY钱包 |
gopay |
NO |
NO |
|
| 印尼 |
AirPay钱包 |
airpay |
NO |
NO |
|
| 印尼 |
银行扫码QRPay |
bankcard_qrpay |
NO |
YES |
參考印尼银行编码列表 |
| 印尼 |
SHOPEE钱包 |
shopee |
NO |
NO |
|
| 印尼 |
LINKAJA钱包 |
linkaja |
NO |
NO |
|
| 印尼 |
Alfamart |
alfamart |
NO |
NO |
|
印度银行编码列表
| 银行名称 |
代码 |
| Abhyudaya Cooperative Bank |
ABHY |
| Aditya Birla Idea Payments Bank |
ABPB |
| Airtel Payments Bank |
AIRP |
| Allahabad Bank |
ALLA |
| Andhra Bank |
ANDB |
| Andhra Pragathi Grameena Bank |
APGB |
| The AP Mahesh Cooperative Urban Bank |
APMC |
| APNA Sahakari Bank |
ASBL |
| Au Small Finance Bank |
AUBL |
| Bassein Catholic Cooperative Bank |
BACB |
| Bank Of Baroda |
BARB |
| Bandhan Bank |
BDBL |
| Dena Bank |
BKDN |
| Bank of India |
BKID |
| BNP Paribas |
BNPA |
| Central Bank Of India |
CBIN |
| City Union Bank |
CIUB |
| Capital Small Finance Bank |
CLBL |
| Canara Bank |
CNRB |
| Corporation Bank |
CORP |
| Cosmos Cooperative Bank |
COSB |
| Catholic Syrian Bank |
CSBK |
| Development Credit Bank |
DCBL |
| Dombivli Nagari Sahakari Bank |
DNSB |
| Equitas Small Finance Bank |
ESFB |
| ESAF Small Finance Bank |
ESMF |
| Federal Bank |
FDRL |
| Fino Payments Bank |
FINO |
| Fincare Small Finance Bank |
FSFB |
| Greater Bombay Cooperative Bank |
GBCB |
| HDFC Bank |
HDFC |
| IDBI Bank |
IBKL |
| ICICI Bank |
ICIC |
| IDFC Bank |
IDFB |
| Indian Bank |
IDIB |
| IndusInd Bank |
INDB |
| Indian Overseas Bank |
IOBA |
| India Post Payment Bank |
IPOS |
| Jammu and Kashmir Bank |
JAKA |
| Janaseva Sahakari Bank |
JANA |
| Janata Sahakari Bank |
JSBP |
| Karnataka Bank |
KARB |
| Kalupur Commercial Cooperative Bank |
KCCB |
| Kalyan Janata Sahakari Bank |
KJSB |
| Kotak Mahindra Bank |
KKBK |
| Kerala Gramin Bank |
KLGB |
| Karur Vysya Bank |
KVBL |
| Karnataka Vikas Grameena Bank |
KVGB |
| Lakshmi Vilas Bank |
LAVB |
| Bank Of Maharashtra |
MAHB |
| Maharashtra Gramin Bank |
MAHG |
| Mehsana Urban Cooperative Bank |
MSNU |
| North East Small Finance Bank |
NESF |
| NKGSB Cooperative Bank |
NKGS |
| The Nainital Bank |
NTBL |
| Oriental Bank of Commerce |
ORBC |
| GP Parsik Bank |
PJSB |
| Pragathi Krishna Gramin Bank |
PKGB |
| Punjab and Maharashtra Cooperative Bank |
PMCB |
| Punjab And Sind Bank |
PSIB |
| Punjab National Bank |
PUNB |
| PAYTM Payments Bank |
PYTM |
| RBL Bank |
RATN |
| Reserve Bank Of India |
RBIS |
| State Bank of India |
SBIN |
| Standard Chartered Bank |
SCBL |
| Surat District Cooperative bank |
SDCB |
| South Indian Bank |
SIBL |
| Small Industries Development Bank Of India |
SIDB |
| Suryoday Small Finance Bank |
SURY |
| Syndicate Bank |
SYNB |
| Tamilnad Mercantile Bank |
TMBL |
| Union Bank of India |
UBIN |
| UCO Bank |
UCBA |
| Ujjivan Small Finance Bank |
UJVN |
| United Bank Of India |
UTBI |
| Axis Bank |
UTIB |
| Utkarsh Small Finance Bank |
UTKS |
| Yes Bank |
YESB |
印尼银行编码列表
| 银行名称 |
代码 |
| Bank Central Asia |
CENA |
| Bank Rakyat Indonesia |
BRIN |
| Bank Mandiri |
BMRI |
| Bank Negara Indonesia |
BNIN |
| CIMB Niaga |
BNIA |
| Maybank |
IBBK |
| Permata Bank |
BBBA |
| Panin Bank |
PINB |
| Bank Danamon Indonesia |
BDIN |
| Bank Neo Commerce |
BBYB |
用户个人信息(下单)
| 名称 |
地区 |
含义 |
类型 |
验证用正则表达式 |
| real_name |
- |
用户真实姓名 |
string |
.* |
| email |
- |
用户信箱 |
string |
^.+@.+$ |
| phone |
印度 |
用户手机号 |
string |
^\+91[0-9]{10}$ 或 ^91[0-9]{10}$ |
| phone |
巴西 |
用户手机号 |
string |
^\+55[0-9]{11}$ 或 ^55[0-9]{11}$ |
| phone |
印尼 |
用户手机号 |
string |
^\+62[0-9]{9,11}$ 或 ^62[0-9]{9,11}$ |
| phone |
越南 |
用户手机号 |
string |
^\+84[0-9]{9}$ 或 ^84[0-9]{9}$ |
| address |
- |
用户地址 |
string |
.* |
| upi_account |
印度 |
用户UPI帐号 |
string |
^.+@.+$ |
| pan_code |
印度 |
印度个人税号 |
string |
^[A-Z]{5}[0-9]{4}[A-Z]{1}$ |
| cpf |
巴西 |
巴西CPF |
string |
^[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]{2}$ 或 ^[0-9]{11}$ |
| cnpj |
巴西 |
巴西CNPJ |
string |
^[0-9]{2}\.[0-9]{3}\.[0-9]{3}/[0-9]{4}-[0-9]{2}$ 或 ^[0-9]{14}$ |
| cep |
巴西 |
巴西邮政编码 |
string |
^[0-9]{8}$ |
用户个人信息(回调&查询)
| 名称 |
地区 |
含义 |
类型 |
是否必填 |
备注 |
| user_id |
- |
用户ID |
string |
YES |
与商户收银台下单请求参数的user_id一致 |
| real_name |
- |
用户真实姓名 |
string |
NO |
|
| email |
- |
用户信箱 |
string |
NO |
为完整格式 |
| phone |
印度 |
用户手机号 |
string |
NO |
为完整格式 |
| phone |
巴西 |
用户手机号 |
string |
NO |
为完整格式 |
| phone |
印尼 |
用户手机号 |
string |
NO |
为完整格式 |
| phone |
越南 |
用户手机号 |
string |
NO |
为完整格式 |
| address |
- |
用户地址 |
string |
NO |
|
| upi_vpa |
印度 |
用户UPI付款帐号 |
string |
NO |
用户实际付款使用的UPI帐号 |
| upi_account |
印度 |
用户UPI帐号 |
string |
NO |
由收银台采集的UPI帐号 |
| pan_code |
印度 |
印度个人税号 |
string |
NO |
|
| cpf |
巴西 |
巴西CPF |
string |
NO |
为完整格式 |
| cnpj |
巴西 |
巴西CNPJ |
string |
NO |
为完整格式 |
| cep |
巴西 |
巴西邮政编码 |
string |
NO |
|