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