diff --git a/docs/扫呗接入指引/README.md b/docs/扫呗接入指引/README.md new file mode 100644 index 0000000..86e20be --- /dev/null +++ b/docs/扫呗接入指引/README.md @@ -0,0 +1,7 @@ +# 扫呗(乐刷)开发文档 + +- [接入指引](接入指引.md) +- [普通支付2.0 API](普通支付2.0-API.md) + +- 接入指引来源: +- 普通支付2.0来源: diff --git a/docs/扫呗接入指引/接入指引.md b/docs/扫呗接入指引/接入指引.md new file mode 100644 index 0000000..2727650 --- /dev/null +++ b/docs/扫呗接入指引/接入指引.md @@ -0,0 +1,217 @@ +# 接入指引 + +> 来源: + +## 开始接入 + +![](http://lifedy.oss-cn-hangzhou.aliyuncs.com/docs/1596015084762-1747c446-c928-4749-a422-f284c19369c4.png) + +**温馨提示**:阅读本文档之前,请认真仔细的确认您已经执行了下面的三步操作,并获得了有效的扫呗接入资料: + +1. 签订合作协议。 +2. 联系业务BD提交扫呗内部接口对接申请。 +3. 开发人员与扫呗技术支持建立联系。 +4. 联系业务BD或者运营同事,提交资料进行商户开户。 +5. 对接支持同事基于正式商户映射测试商户,或提供其它对接测试参数。 + +## 测试环境准备 + +**⑴测试服务地址** + +具体测试地址以对接支持同事邮件内提供的地址为准。 + +**⑵测试账号** + +测试账号统一由我司技术同学分配。因支付需要真实扣款,若对接的是支付接口,需先联系业务同事或者项目运营同事,创建商户同主体的正式商户后,才能提供测试商户。 + +- 对接商户接口需以下参数: + - 机构号`inst_no` + - 令牌`key` +- 对接支付接口需以下参数: + - 商户号`merchant_no` + - 终端号`terminal_id` + - 令牌`access_token` + +拿到测试环境后,合作方即可进入测试联调阶段,有问题可在相关对接群中咨询技术同学,由于支持群较多,在咨询问题时,最好是@对应对接支持同事。 + +## 对接测试辅助工具 + +测试工具页:[http://test2.lcsw.cn:8117/demo/](http://test2.lcsw.cn:8117/demo/) + +使用该页面设置好商户号、终端号、终端密钥,可测试接口的调用,查看请求报文、返回报文、请求签名串等,常用工具中还可拼接字典序签名串。字典序通用请求中,可请求字典序的接口,获取签名串。 + +注意:如果是正式环境商户信息,注意将接口地址切换到正式。 + +## 生产环境 + +注意: + +接口联调必须先在测试环境联调,由技术同学验收通过后,才可正式 + +接入线上生产环境。 + +生产环境账号参数:由商务或运营同事提供 + +生产环境域名:统一由技术同学提供 + +> 以上资料在测试环境中和生产环境中并不相同,准备调试和切换环境时请认真核对并确认无误。 +> + +## 开通支付通道 + +- 微信公众号 合作商如需对接公众号支付接口,需提供**微信应用ID(AppID)**、**应用密钥(AppSecret)**以及**支付授权目录**,在相关参数配置完毕后,再联系扫呗技术人员,获取测试商户号、测试终端号以及测试接口域名。 +- QQ钱包 合作商如需使用QQ钱包支付通道,需要提供**QQ钱包商户号**、**QQ钱包key**、**QQ钱包证书密码**以及**QQ钱包退款密码**,在后台配置好相关参数后,方可开通QQ钱包支付通道。 +- 京东钱包 合作商如需使用京东钱包支付通道,需要提供**京东钱包商户号**、**京东钱包密钥**,在后台配置好相关参数后,方可开通京东钱包支付通道。 +- 微信及支付宝的刷卡支付、扫码支付 合作商如需对接微信、支付宝的预支付、扫码支付的接口,可直接联系扫呗技术人员,获取测试商户号、测试终端号以及测试接口域名。 + +## 通信协议 + +本文档中的所有接口,未明确说明的,均采用HTTP标准通信协议,请求和响应的`Content-type`均为`application/json`,字符编码统一为`UTF-8`。 + +`注:"商户回调通知"接口、"交易通知"接口、"交易实时同步"接口Content-type为text/xm`。 + +## 签名算法 + +`httpclient方式发起的接口请求,请求和接收数据均需要校验签名。`[签名测试工具](http://test2.lcsw.cn:8117/demo/index1.html) + +`拼接串说明`:接口中每一个字段(key_sign字段除外),以字典顺序(字母顺序)排序之后,按照a=value1&b=value2.....&`令牌标识`="密钥"的顺序,进行拼接。对得到的字符串进行MD5签名/验签; + +`示例请求参数`: + +``` +{ +"pay_ver": "201", +"pay_type": "010", +"service_id": "010", +"merchant_no": "839305812000286", +"terminal_id": "30616969", +"device_no":"202011261843460000", +"terminal_trace": "201811231154130000", +"terminal_time": "20181123115413", +"auth_no": "xxxxxxxx", +"total_fee": "1", +"order_body": "", +"attach": "", +"goods_detail": "", +"key_sign": "" +} +``` + +`对应签名串`: string1="attach=&auth_no=xxxxxxxx&device_no=202011261843460000&goods_detail=&merchant_no=839305812000286&order_body=&pay_type=010 &pay_ver=201&service_id=010&terminal_id=30616969&terminal_time=20181123115413& terminal_trace=201811231154130000&total_fee=1" ; + +> ❗ +> +> 特别注意: +> +> 1. 赋值的空字符串需参与签名;如"attach": "",需要拼接***&attach=&*** +> 2. 接口中包含terminal_id(终端号)字段的,令牌标识为“access_token”这个单词,待签名字符串格式:string2=string1+"&access_token=终端密钥"; +> 3. 接口中包含inst_no(机构号)字段的,令牌标识为“key”这个单词,待签名字符串格式: string2=string1+"&key=机构密钥"; +> + +通过MD5取得签名字符串: key_sign=md5(string2) + +## JAVA-SDK + +### SDK下载 + +SDK文件:[java-sdk-1.2.1](https://open.lcsw.cn/document/支付2.0java-sdk-1.2.1.zip) + +> ❗ +> +> 特别注意: +> +> SDK主要提供普通支付2.0的接口方法,暂未提供其它接口的实体类以及请求方法。其它接口可使用SDK内的签名工具,并自行编写实体类和请求方法。 +> + +### SDK引入方式参考 + +1. 方式一:IDEA或者Eclipse引入本地jar包的方式。具体操作可网上搜索对应开发工具添加jar包的步骤。 +2. 方式二:使用maven的方式,将jar包安装到本地仓库后,通过pom引入,具体步骤和maven命令请自行网上搜寻。 + +``` +//请自行根据电脑系统类型修改-Dfile指定的jar包所在路径格式,注意将命令中的-Dversion指定的jar包版本换成所下载的版本 +mvn install:install-file -Dfile=D:\saobei-open-sdk-1.2.1.jar -DgroupId=com.lcsw.opensdk -DartifactId=saobei-open-sdk -Dversion=1.2.1 -Dpackaging=jar +//安装到本地仓库后,在pom中添加如下引入,注意version修改成所安装的版本号 + + com.lcsw.opensdk + saobei-open-sdk + 1.2.1 + +``` + +1. 方式三:在pom.xml文件中,你可以使用dependency标签的systemPath属性来指定本地JAR包的路径 ,maven具体操作可自行网上搜索。 + +``` +//version注意换成所使用的版本,systemPath换成jar所在目录 + + + com.lcsw.opensdk + saobei-open-sdk + 1.2.1 + system + ${project.basedir}/lib/saobei-open-sdk-1.2.1.jar + + +``` + +### 工具类 + +> ❗ +> +> 特别说明: +> +> 1. SDK主要提供工具类,便于对请求参数进行签名或者返回参数验签。 +> 2. SDK内有部分接口的实体类,若在SDK内没找到对应实体类,请自行定义实体类。 +> 3. 若SDK内存在的实体类字段与接口内字段不一致的,可自行创建子类定义属性,并继承原实体类。 +> + +`注:目前只提供java语言的SDK,其它开发语言请自行按照签名算法要求进行拼接签名` + +**ApiUtil工具类**:主要提供构建请求参数和返回参数,可自动进行签名和验签。 + +``` +//构造请求参数并对报文自动加签,t为设置好请求参数的实体对象。使用了该方法,不需要再使用SignBeanUtil工具类进行签名 +JSONObject request = ApiUtil.convertRequest(t,"填机构密钥或者终端密钥","填令牌标识,请看《签名算法》章节-特别注意-的说明"); + +//转换返回(或回调)参数并对报文自动验签,response为接口返回参数,t为创建好的返回参数接收对象。使用了该方法,不需要再使用SignBeanUtil工具类进行签名 +t = ApiUtil.convertResponse(response,t,"填机构密钥或者终端密钥","填令牌标识,请看《签名算法》章节-特别注意-的说明"); +``` + +**SignBeanUtil工具类**:主要提供参数的字典序排序后的签名方法。 + +``` +//参数签名方法,若使用了ApiUtil工具类的封装参数方法,无需使用该方法在签名。t为请求参数,key_sign和utf-8为固定字符串不用修改。 +SignBeanUtil.FilterNullSign(t, "填令牌标识,请看《签名算法》章节-特别注意-的说明","填机构密钥或者终端密钥", "key_sign", "utf-8"); +``` + +**HttpClientUtil工具类**:主要提供post请求方法。 + +``` +//serviceUrl为接口完整url地址,request为请求参数(可用ApiUtil工具转换请求参数),timeout为接口超时时间(单位ms),response为返回参数(可用ApiUtil工具转换成返回实体) +String response = HttpClientUtil.post(serviceUrl,JSON.toJSONString(request), timeout,"application/json","utf-8"); +``` + +### 通用方法 + +以下方法,可应用与所有post请求,且使用字典序签名的接口。方法内会自动进行签名,故不需要为接口中的key_sign字段赋值。 + +``` +OpenParameters.Builder builder=new OpenParameters.Builder(); +builder.apiName("接口地址");//对应接口上的url部分地址,如/pay/open/query +builder.apiUrl("接口域名");//请使用对应接口域名,将和apiName拼接成完整接口地址。如http://www.lcsw.cn/lcsw +builder.param(json.toString());//按照接口字段要求为实体对象属性赋值后转json并toString。 +OpenParameters openParameters = builder.build();//实例化对象 +//创建client +SaobeiApiClient client = new DefaultSaobeiApiClient<>("终端密钥或机构密钥"); +String execute = client.execute(openParameters);//返回参数已自动进行了验签 +``` + +## 警告 + +**密钥**是一个非常重要的数据,请您必须小心谨慎的确保此数据保存在足够安全的地方。您从扫呗官方获得此数据的同时,即表明您保证不会被用于非法用途和不会在没有得到您授权的情况下被盗用,一旦因此数据保管不善而导致的经济损失及法律责任,均由您独自承担。 + +## 支付流程 + +![](http://lifedy.oss-cn-hangzhou.aliyuncs.com/docs/1608098709084-497487dd-561d-4bba-b4bd-7c73f00404b5.png) + +![](http://lifedy.oss-cn-hangzhou.aliyuncs.com/docs/1592895005071-d403cf18-6765-4131-b2d0-f5b6051d6111.png) diff --git a/docs/扫呗接入指引/普通支付2.0-API.md b/docs/扫呗接入指引/普通支付2.0-API.md new file mode 100644 index 0000000..38995c4 --- /dev/null +++ b/docs/扫呗接入指引/普通支付2.0-API.md @@ -0,0 +1,1500 @@ +# 普通支付2.0 + +> 来源: + +更新日志: + +| 日期 | 章节 | 内容 | +| --- | --- | --- | +| 2022-07-11 | 所有章节 | 所有章节增加java sdk使用说明 | +| 2022-07-12 | 4.1付款码支付 4.4小程序支付接口 4.5支付查询 4.10回调通知 | pay_ver增加202版本,该版本支持支付成功后返回优惠字段 | +| 2022-07-12 | 4.3公众号支付接口 4.4小程序支付接口 | 补充接口文字描述 | +| 2022-07-14 | 一、接入必看 二、接入指南 | 增加接入必看章节,优化 2.5签名算法 文字说明 增加2.5支付流图章节 | +| 2022-07-29 | 4.1付款码支付 4.2扫码支付(预支付) 4.3公众号支付接口 4.4小程序支付接口 4.14刷脸支付 | 新增terminal_ip字段,实时交易终端IP(银联侧风控主要依据,请真实填写) | +| 2025-06-26 | 4.1付款码支付(B扫C) 4.3公众号支付接口 4.4小程序支付接口 4.16获取服务商公众号下openid | 新增090抖音支付 | + +## 一、接入必看 + +请仔细阅读第二章接入指南,尤其是[2.3判断逻辑](#title-node5)、[2.5签名算法](#title-node6) + +## 二、接入指南 + +### 2.1 B扫C场景支付说明 + +**B扫C场景**主要是收银员使用扫码枪、扫码盒子等扫码设备扫消费者的付款码(条形码或二维码),进行收款。 + +对应本文档中需使用的支付接口为:4.1付款码支付(B扫C) + +配合使用的接口有:4.5支付查询接口,在交易状态不明确时,查询交易状态;4.6退款申请,有全额退款或者部分退款需求时使用,配合4.9退款订单查询接口,查询退款订单状态;4.7撤销交易,在需要终止订单继续支付,或者对消费者已经成功支付,而收银系统没有拿到支付成功结果的订单,进行撤销使用; + +### 2.2 C扫B场景支付说明 + +**C扫B场景**主要是收银员在收银机上生成收款二维码,或者自助大屏等收款设备上生成收款二维码后,由消费者扫码进行支付。 + +对用文档中需使用的支付接口为:4.11聚合码接口(C扫B) + +配合使用的接口有:4.10回调通知,C扫B为异步支付场景,需要通过回调通知的方式,接收用户支付结果;4.5支付查询接口,在交易状态不明确时,或一直没接收到回调通知时,查询交易状态;4.6退款申请,有全额退款或者部分退款需求时使用,配合4.9退款订单查询接口,查询退款订单状态。 + +### 2.3 公众号/小程序场景支付说明 + +**公众号场景**主要是商户或者品牌有自己的公众号H5页面,在页面上有收款需求。 + +对应文档中需使用的支付接口为:4.3公众号下单接口 + +配合使用的接口有:4.10回调通知,公众号收款为异步支付场景,需要通过回调通知的方式,接收用户支付结果;4.5支付查询接口,在交易状态不明确时,或一直没接收到回调通知时,查询交易状态;4.6退款申请,有全额退款或者部分退款需求时使用,配合4.9退款订单查询接口,查询退款订单状态。4.8关闭订单,对已经不想再让用户支付,或者已经到了订单超时时间的订单,进行关闭处理。 + +**小程序场景**主要是商户或者品牌有自己的小程序,用户在小程序里进行下单支付的需求。 + +对应文档中需使用的支付接口为:4.4小程序下单接口 + +配合使用的接口有:4.10回调通知,小程序收款为异步支付场景,需要通过回调通知的方式,接收用户支付结果;4.5支付查询接口,在交易状态不明确时,或一直没接收到回调通知时,查询交易状态;4.6退款申请,有全额退款或者部分退款需求时使用,配合4.9退款订单查询接口,查询退款订单状态。4.8关闭订单,对已经不想再让用户支付,或者已经到了订单超时时间的订单,进行关闭处理。 + +### 2.4 判断逻辑 + +1.先判断协议字段(return_code)返回,再判断业务(result_code)返回,最后判断交易状态。 + +2.小程序和公众号支付时,当return_code和result_code两个值都返回01时,才能取值去请求微信支付。否则会由于取不到参数,微信支付报缺少参数错误。 + +### 2.5 签名算法 + +``` +注意: +1.使用java SDK对接的接口,不需要做签名,SDK会自动处理。 +2.httpclient方式发起的接口请求,请求和接收数据均需要校验签名。 +``` + +**拼接串说明:** + +接口中每一个字段(key_sign字段除外),以字典顺序(字母顺序)排序之后,按照a=value1&attach=&b=value2.....&z=value3的顺序进行拼接,并在最后拼接上access_token=终端密钥。对得到的字符串进行MD5签名/验签(赋值的空字符串也参与签名)。 + +**示例请求参数:** + +``` +{ + "pay_ver": "201", + "pay_type": "010", + "service_id": "010", + "merchant_no": "839305812000286", + "terminal_id": "30616969", + "device_no":"202011261843460000", + "terminal_trace": "201811231154130000", + "terminal_time": "20181123115413", + "auth_no": "xxxxxxxx", + "total_fee": "1", + "order_body": "", + "attach": "", + "goods_detail": "", + "key_sign": "" +} +``` + +对应签名串: + +``` +string1="attach=&auth_no=xxxxxxxx&device_no=202011261843460000&goods_detail=&merchant_no=839305812000286&order_body=&pay_type=010&pay_ver=201&service_id=010&terminal_id=30616969&terminal_time=20181123115413&terminal_trace=201811231154130000&total_fee=1". +``` + +拼接上终端密钥后的待签名字符串: + +``` +string2=string1+"&access_token=终端密钥"; +``` + +通过MD5取得签名值: + +``` +key_sign=md5(string2); +``` + +### 2.6 支付流图 + +![](http://lifedy.oss-cn-hangzhou.aliyuncs.com/docs/1608098709084-497487dd-561d-4bba-b4bd-7c73f00404b5.png)![](http://lifedy.oss-cn-hangzhou.aliyuncs.com/docs/1592895005071-d403cf18-6765-4131-b2d0-f5b6051d6111.png) + +## 三、支付接口SDK + +### 3.1 SDK下载 + +--- + +❗**特殊说明:** + +> 目前只提供java语言的SDK,其它开发语言请使用API请求的方式调用api接口,http请求方式不受开发语言限制,可跨平台调用 +> + +| 更新时间 | java sdk文件 | 版本说明 | +| --- | --- | --- | +| 2022-03-30 | java-sdk-1.1.4 | 部分支付接口新增par_ver为202时返回优惠信息字段 | +| 2022-08-10 | java-sdk-1.1.5 | 部分支付接口新增terminal_ip字段 | +| 2022-10-31 | java-sdk-1.1.6 | 增加退款申请和退款查询接口中pay_ver为202时返回的几个参数 | +| 2022-11-18 | java-sdk-1.1.7 | 优化网络超时时,result_code返回支付中 | +| 2022-12-22 | java-sdk-1.1.8 | 公众号预支付增加云闪付返回字段 | +| 2023-12-15 | java-sdk-1.1.9 | 优化网络请求,增加4.17付款码查询openid接口 | +| 2024-07-09 | java-sdk-1.2.0 | 4.12wap收银台接口增加传递产业支付相关字段 | +| 2025-04-14 | java-sdk-1.2.1 | 4.4小程序支付接口、4.14聚合码接口,增加timeout_express字段。 | + +[**点击跳转到最新版SDK下载地址**](https://help.lcsw.cn/xrmpic/q6imdiojes7iq5y1/qg52lx#title-node8) + +### 3.2 demo使用说明 + +❗**完整demo示例:** + +> [TestMain下载](https://lcsw.yuque.com/kt1e2v/hvtp8m/qk0cy2?singleDoc#%20《TestMain》)对应接口请查阅demo示例里对应的方法,demo内各接口的字段值请按各自接口要求修改。 +> + +1. SDK内默认使用的是正式环境,对接需要使用测试环境地址,在方法前对地址重新赋值: + +``` +ApiConstants.service_url_pay="技术人员邮件内发送的测试环境地址"; +``` + +`若未重新赋值,会报"终端信息不存在或已关闭!".` + +`切换到正式环境时,删除修改地址的这行代码。` + +1. 创建对应接口的client,每个接口上有对应的client创建方法。 + +``` +SaobeiApiClient client = new DefaultSaobeiApiClient<>(ACCESS_TOKEN); +``` + +1. 创建对应接口请求的对象实体,并按照接口传参要求,给属性赋值(若接口中的属性在sdk的对象实体中没有,请自己创建实体类新增属性,并继承sdk内原实体类) + +``` +//实体类可使用自己创建的子类(需继承原实体类) +SaobeiBarcodePayRequest requst = new SaobeiBarcodePayRequest(); +requst.setPay_ver("202"); +...... +``` + +1. 引用execute方法 + +``` +SaobeiBarcodePayResponse response = client.execute(requst); +``` + +## 四、支付相关API + +### 4.1付款码支付(B扫C) + +**应用场景** + +收银员使用扫码设备读取用户微信、支付宝、云闪付(银行app)等支付钱包的付款码以后,将二维码或条码信息会传送至商户收银台,由商户收银台或者商户后台调用该接口发起支付。 + +--- + +❗**特殊说明:** + +> 付款码没有回调通知接口,如果返回订单状态为支付中,请调用4.5支付查询接口确认订单状态。 +> + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiBarcodePayRequest**, **SaobeiBarcodePayResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/barcodepay` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`202` | +| pay_type | String | 3 | Y | 支付方式, `000` 自动识别类型 `010` 微信, `020` 支付宝, `060` qq钱包, `090` 抖音支付, `100` 翼支付, `110` 银联云闪付, `120` 龙支付(建行通道可用), `140` 和包支付(和包通道可用), `160` 数字人民币, `170` 招行APP(招行通道可用), | +| service_id | String | 3 | Y | 接口类型, 当前类型 `010` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| terminal_ip | String | 16 | Y | 收银机、POS机等收款设备的公网IP 特殊说明:IPV4格式 ,人行侧风控主要依据,请真实填写。有网络的设备都会有ip,服务端可以从网络请求中获取到交互设备的ip | +| terminal_location | String | 128 | N | 受理终端设备实时经纬度信息,格式为(纬度/经度):+31.2579921/-120.729388 +表示北纬、东经, -表示南纬、西经。 经度是向东到180°或向西到180° 纬度是0至90度之间 | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 终端流水号,可填写商户系统的业务订单号(扫呗不做该值的验重,若多次请求使用同一个值,会导致一个单号有多条订单记录)。该值可对应用在4.5支付查询、4.6退款申请、4.7撤销交易接口的pay_trace字段。 | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式。该值可对应用在4.5支付查询、4.6退款申请、4.7撤销交易接口的pay_time字段。 | +| auth_no | String | 128 | Y | 微信、支付宝等支付方式里的付款码(条形码或者二维码对应的数字) | +| total_fee | String | 10 | Y | 金额,单位分,小于*2147483647* | +| sub_appid | String | 16 | N | 微信侧商户主体一致的公众号或小程序appid,(有支付后通过返回的用户标识,匹配会员信息需求的可传) | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息,`禁止使用+,空格,/,?,%,#,&,=,【这几类特殊符号` | +| attach | String | 128 | N | 附加数据,原样返回 | +| goods_detail | String | 2048 | N | 订单包含的商品列表信息,Json数组格式。`pay_type`为`010`、`020`、`110`时,可选填此字段[《字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#etskU) | +| goods_tag | String | 32 | N | 微信侧订单优惠标记(需提前配置),代金券或立减优惠功能的参数 | +| custom_store_id | String | 32 | N | 微信门店编号和支付宝外部自定义门店编号,透传。微信对应scene_info(场景信息)中的门店id。 `支付宝自定义门店编号不能随便传,在确认门店编号存在的情况下传值,否则影响支付` | +| official_store_id | String | 32 | N | 支付宝官方门店编号,透传 | +| food_order_type | String | 32 | N | 点餐场景类型: `qr_order`(店内扫码点餐)、 `pre_order`(预点到店自提)、 `home_delivery` (外送到家)、 `direct_payment`(直接付款)、 `other`(其他) | +| coupon_no | String | 128 | N | 优惠券串码 | +| coupon_credential | String | 255 | N | 优惠券凭证 | +| sence_no | String | 64 | N | 支付宝外部业务号,用于标识这笔解码请求。若使用了支付宝付款码查询过用户标识,该参数必传。若付款码没有查询过用户标识,请勿传递该参数,否则会导致提示付款码需刷新。 | +| timeout_express | String | 3 | N | 订单交易关闭时间,单位分。默认120min,上限:360min。该字段只有部分通道和部分支付方式支持,若设置后不生效,即为通道侧或者支付方式不支持,可自行调用4.7撤销交易接口。 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +`goods_detail`的内容说明:`称重商品数量请传1或其它整数,价格传重量*单价后的总价` + +| 参数名称 | 类型 | 必填 | 说明 | +| --- | --- | --- | --- | +| goods_id | String | Y | 商品编号(若要匹配单品活动,需与发布的活动商品编号一致) | +| goods_name | String | Y | 商品名称 | +| quantity | String | Y | 商品数量,需为整数,不要带小数点 | +| price | String | Y | 商品单价,单位为分 | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“支付成功”,“支付中”,“请求受限”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果: `01`成功 `02`失败 , `03`支付中, `99`该条码暂不支持支付类型自动匹配 | +| pay_type | String | 3 | N | 支付方式: `010` 微信, `020` 支付宝, `060` qq钱包, `090` 抖音支付, `100` 翼支付, `110` 银联云闪付, `120` 龙支付(建行通道可用), `140` 和包支付(和包通道可用), `160` 数字人民币, `170` 招行APP(招行通道可用) | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号(商户自定义,如门店编号),必须在平台已配置过 | +| terminal_trace | String | 32 | N | 终端流水号,商户系统的支付订单号,系统原样返回 | +| terminal_time | String | 14 | N | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式,系统原样返回 | +| total_fee | String | 10 | N | 金额,单位分 | +| receipt_fee | String | 12 | N | 商家实收金额(分) | +| buyer_pay_fee | String | 12 | N | 买家实付金额(分)pay_ver为`202`时返回 | +| platform_discount_fee | String | 12 | N | 平台优惠金额(分)pay_ver为`202`时返回 | +| merchant_discount_fee | String | 12 | N | 商家优惠金额(分)pay_ver为`202`时返回 | +| end_time | String | 14 | N | 支付完成时间,yyyyMMddHHmmss,全局统一时间格式 | +| out_trade_no | String | 32 | N | 扫呗订单号 | +| channel_trade_no | String | 32 | N | 微信订单号、支付宝订单号等(建议系统方取值后入库) | +| channel_order_no | String | 32 | N | 收单通道侧订单号(建议系统方取值后入库) | +| user_id | String | 32 | N | 付款方用户id,服务商appid下的“微信openid”、“支付宝账户” | +| attach | String | 128 | N | 附加数据,原样返回 | +| bank_type | String | 16 | N | 银行类型,采用字符串类型的银行标识。微信官方提供:[银行类型对照表](https://gtimg.wechatpay.cn/resource/xres/mmpaydoc/static/attachment/4ed679b5250e8ba231b90c2e40064b26/银行类型对照表.xlsx) | +| promotion_detail | String | 255 | N | 官方营销详情,pay_ver为`202`时返回. 本交易支付时使用的所有优惠券信息 ,单品优惠功能字段,详情见[《优惠字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#U8ELM) | +| order_body | String | 128 | N | 订单描述,pay_ver为`202`时返回 | +| sub_openid | String | 32 | N | 微信子商户sub_appid对应的用户标识,pay_ver为`202`时返回 | + +### ~~4.2扫码预支付(已停用)~~ + +❗**注意:** + +> 1. 因微信政策调整【微信间联服务商关闭APP支付和Native支付通知】,`部分通道不支持该接口的调用,或不支持通过微信扫本接口返回的链接进行支付`。 +> 2. 该接口返回的链接为指定支付方式(指定了微信支付方式就只能用微信扫),需使用指定的支付方式扫码支付。 +> 3. 本接口已停止维护,请移步到4..11聚合码支付接口,实现C扫B的支付场景。 +> + +**API请求** + +- URL:`请移步到`[4.11聚合码支付接口](#title-node24) +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`201` | +| pay_type | String | 3 | Y | 支付方式, `010`微信, `020` 支付宝, `060`qq钱包, `100`翼支付 | +| service_id | String | 3 | Y | 接口类型,当前类型`011` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| terminal_ip | String | 16 | N | 收银机、POS机等设备的公网IP(IPV4格式 ,人行侧风控主要依据,请真实填写) | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 终端流水号,可填写商户系统的业务订单号(扫呗不做该值的验重,若多次请求使用同一个值,会导致一个单号有多条订单记录) | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| total_fee | String | 10 | Y | 金额,单位分,小于*2147483647* | +| sub_appid | String | 16 | N | 微信侧商户公众号appid | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息。`禁止使用+,空格,/,?,%,#,&,=,【这几类特殊符号` | +| notify_url | String | 255 | N | 支付结果接收地址,请按4.10回调通知接口编写接口接收。 注:该字段若不传递,需要通过4.5支付查询接口确认订单支付状态 | +| attach | String | 128 | N | 附加数据,原样返回 | +| goods_detail | String | 2048 | N | 订单包含的商品列表信息,Json数组格式。`pay_type`为`010`,`020`,可选填此字段 | +| goods_tag | String | 32 | N | 微信订单优惠标记(需提前配置),代金券或立减优惠功能的参数 | +| custom_store_id | String | 32 | N | 微信门店编号和支付宝外部自定义门店编号,透传。微信对应scene_info(场景信息)中的门店id。 `支付宝自定义门店编号不能随便传,在确认门店编号存在的情况下传值,否则影响支付` | +| official_store_id | String | 32 | N | 支付宝官方门店编号,透传 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +`goods_detail`的内容说明:`称重商品数量请传1或其它整数,价格传重量*单价后的总价` + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| goods_id | String | 32 | Y | 商品编号 | +| goods_name | String | 128 | Y | 商品名称 | +| quantity | String | 11 | Y | 商品数量,需为整数,不要带小数点 | +| price | String | 11 | Y | 商品单价,单位为分(注:`pay_type`为`010`时,此字段类型为int) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“预支付请求成功”,“预支付请求失败”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果:`01`成功 ,`02`失败 | +| pay_type | String | 3 | N | 支付方式, `010`微信, `020` 支付宝, `060`qq钱包, `100`翼支付 | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号(商户自定义,如门店编号),必须在平台已配置过 | +| terminal_trace | String | 32 | N | 终端流水号,商户系统的订单号,系统原样返回 | +| terminal_time | String | 14 | N | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式,系统原样返回 | +| total_fee | String | 12 | N | 金额,单位分 | +| out_trade_no | String | 32 | N | 扫呗订单号 | +| qr_code | String | 128 | N | 二维码码串 | + +### 4.3公众号下单接口 + +**应用场景** + +商户系统先调用该接口,在支付服务后台生成预支付交易单,返回正确的预支付交易参数后,再按官方JSAPI场景生成交易串调起支付。 + +--- + +❗**注意:** + +> - 只有`当result_code返回值为01时`,才可取接口返回的参数,去调微信/支付宝的JSAPI收银台。 +> - 调用微信和支付宝JSAPI收银台时,该接口`返回的参数不能修改`,否则会报“支付验证签名失败”等问题。 +> - 该接口只支持微信和支付宝内的H5页面调用,`不支持浏览器端H5页面调用`。 +> - 若公众号内的页面是商城形式的H5(多商户入驻收款,商户主体与公众号主体不一致时),且商户入驻在利楚扫呗服务商下(需收单渠道给利楚开通渠道服务商),可使用扫呗服务商appid代发起支付申请。即:先调用4.17获取服务商公众号下openid接口,得到服务商appid下的openid,再调用该4.3公众号支付接口,调用时sub_appid可不传(会默认取服务商appid),open_id传4.17获取服务商公众号下openid接口中获取的openid。 +> + +**获取用户标识及调起js支付的官方参考文档:** **微信** + +- 获取openid: [https://developers.weixin.qq.com/doc/service/guide/h5/auth.html](https://developers.weixin.qq.com/doc/service/guide/h5/auth.html) +- 调jsapi支付:[https://pay.weixin.qq.com/doc/v3/partner/4012069855](https://pay.weixin.qq.com/doc/v3/partner/4012069855) + +**支付宝** + +- 获取userid: [https://opendocs.alipay.com/mini/02xtl8?pathHash=253bc790](https://opendocs.alipay.com/mini/02xtl8?pathHash=253bc790) 具体获取方式可在支付宝官网搜索。 +- 调jsapi支付:[https://alipay.open.taobao.com/docs/doc.htm?&docType=1&articleId=105591](https://alipay.open.taobao.com/docs/doc.htm?&docType=1&articleId=105591) + +**云闪付** + +- 获取userid: [4.17获取服务商公众号下openid](#title-node29) + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiJsPayRequest**, **SaobeiJsPayResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/jspay` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`202` | +| pay_type | String | 3 | Y | 支付方式, `010`微信, `020`支付宝, `060`qq钱包, `090` 抖音支付, `100`翼支付, `110`银联云闪付 | +| service_id | String | 3 | Y | 接口类型,当前类型`012` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| terminal_ip | String | 16 | N | 用户手机端IP(IPV4格式 ,人行侧风控主要依据,请真实填写) | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 终端流水号,可填写商户系统的业务订单号(扫呗不做该值的验重,若多次请求使用同一个值,会导致一个单号有多条订单记录)。该值可对应用在4.5支付查询、4.6退款申请、4.8关闭订单接口的pay_trace字段。 | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式。该值可对应用在4.5支付查询、4.6退款申请、4.8关闭订单接口的pay_time字段。 | +| total_fee | String | 10 | Y | 金额,单位分,小于*2147483647* | +| sub_appid | String | 16 | Y | `传商户自己的微信公众号appid,或支付宝生活号appid。`(即获取open_id所使用的appid)。 `pay_type`为`010`及`020`时必填 | +| open_id | String | 128 | Y | 用户标识(微信openid,支付宝userid) | +| timeout_express | String | 3 | N | 订单交易关闭时间(单位分,不传默认120)。 `如果公众号有设置订单失效时间的,建议和订单失效时间设置一致`。该字段部分收单通道支持,若遇到不生效的情况,即为收单通道不支持。 | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息。`禁止使用+,空格,/,?,%,#,&,=,【这几类特殊符号` | +| notify_url | String | 255 | N | 支付结果接收地址,请按4.10回调通知接口编写接口接收。 注:该字段若不传递,需要通过4.5支付查询接口确认订单支付状态 | +| attach | String | 128 | N | 附加数据,原样返回 | +| goods_detail | String | 2048 | N | 订单包含的商品列表信息,Json数组格式。`pay_type`为`010`,`020`,可选填此字段 | +| goods_tag | String | 32 | N | 订单优惠标记(需提前配置),代金券或立减优惠功能的参数 | +| custom_store_id | String | 32 | N | 微信门店编号和支付宝外部自定义门店编号,透传。微信对应scene_info(场景信息)中的门店id。 `支付宝自定义门店编号不能随便传,在确认门店编号存在的情况下传值,否则影响支付` | +| official_store_id | String | 32 | N | 支付宝官方门店编号,透传 | +| food_order_type | String | 32 | N | 点餐场景类型: `qr_order`(店内扫码点餐)、 `pre_order`(预点到店自提)、 `home_delivery` (外送到家)、 `direct_payment`(直接付款)、 `other`(其他) | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +`goods_detail`的内容说明:`称重商品数量请传1或其它整数,价格传重量*单价后的总价` + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| goods_id | String | 32 | Y | 商品编号 | +| goods_name | String | 128 | Y | 商品名称 | +| quantity | String | 11 | Y | 商品数量,需为整数,不要带小数点 | +| price | String | 11 | Y | 商品单价,单位为分(注:`pay_type`为`010`时,此字段类型为int) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“预支付请求成功”,“预支付请求失败”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果:`01`成功 ,`02`失败 | +| pay_type | String | 3 | N | 支付时传递的支付方式 | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号(商户自定义,如门店编号),必须在平台已配置过 | +| terminal_trace | String | 32 | N | 终端流水号,商户系统的支付订单号,系统原样返回 | +| terminal_time | String | 14 | N | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| total_fee | String | 12 | N | 金额,单位分 | +| out_trade_no | String | 32 | N | 扫呗订单号 | +| appId | String | 16 | N | 微信公众号支付返回字段,公众号id | +| timeStamp | String | 32 | N | 微信公众号支付返回字段,时间戳,示例:1414561699,标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数。注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字)。 | +| nonceStr | String | 32 | N | 微信公众号支付返回字段,随机字符串 | +| package_str | String | 128 | N | 微信公众号支付返回字段,订单详情扩展字符串,示例:prepay_id=123456789,统一下单接口返回的prepay_id参数值,提交格式如:prepay_id= | +| signType | String | 32 | N | 微信公众号支付返回字段,签名方式,示例:MD5,RSA | +| paySign | String | 512 | N | 微信公众号支付返回字段,签名 | +| ali_trade_no | String | 32 | N | 支付宝JSAPI支付返回字段用于调起支付宝JSAPI | +| redirect_uri | String | 512 | N | 云闪付支付或一些银行通道会返回。若该字段有值,请取该字段的链接做重定向跳转,不需要按照正常jsapi方式调用。 | +| token_id | String | 32 | N | qq钱包公众号支付 | + +### 4.4小程序下单接口 + +**应用场景** + +商户在小程序中先调用该接口,在支付服务后台生成预支付交易单,返回正确的预支付交易参数后,再按官方JSAPI场景生成交易串调起支付。 + +--- + +❗**注意:** + +> - 只有`当result_code返回值为01时`,才可取接口返回的参数,去调微信小程序/支付宝小程序的JSAPI收银台。 +> - 请求完这个接口,得到的返回参数直接去调微信的“**wx.requestPayment**”/支付宝的“**my.tradePay**”方法拉起收银台发起支付,`接口返回的参数值一个都不能修改,否则会报“支付验证签名失败”、“商户传入的appid参数不正确”等问题` +> - 若报“`预支付失败sub_mch_id与sub_appid不匹配`”,请联系运营同事,并提供小程序appid,在正式商户的对应通道关注配置里添加appid,`appid主体需与商户主体一致`,否则无法配置。 +> - 该接口为预支付接口,还未进行支付,`故该接口不返回优惠字段`。优惠字段会在支付完成后,通过回调接口返回,或者通过查询接口获取。 +> + +**获取用户标识及调起收银台支付文档:** **微信小程序** + +- 获取openid: [https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html) +- 微信官方“**wx.requestPayment**”接口:[https://pay.weixin.qq.com/doc/v3/partner/4012085827](https://pay.weixin.qq.com/doc/v3/partner/4012085827) + +**支付宝小程序** + +- 获取userid: [https://opendocs.alipay.com/mini/05dxgc?pathHash=1a3ecb13](https://opendocs.alipay.com/mini/05dxgc?pathHash=1a3ecb13) +- 支付宝官方“**my.tradePay**”接口: [https://opendocs.alipay.com/mini/api/openapi-pay](https://opendocs.alipay.com/mini/api/openapi-pay) + +**抖音小程序** + +**间连通道** + +- 获取openid:[https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-interface/log-in/tt-login](https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-interface/log-in/tt-login) +- 调起jsapi支付:[https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-interface/pay/tt-pay](https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-interface/pay/tt-pay) + +**直连通道** + +- 抖音目前为邀约制:[https://partner.douyinpay.com/wiki/682c7a8e82b07604fd4deccb/6845bb884cec380517567654](https://partner.douyinpay.com/wiki/682c7a8e82b07604fd4deccb/6845bb884cec380517567654) + +--- + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiMiniPayRequest**, **SaobeiMiniPayResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/minipay` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`202` | +| pay_type | String | 3 | Y | 支付方式, `010`微信, `020`支付宝, `090` 抖音支付 | +| service_id | String | 3 | Y | 接口类型,当前类型`015` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| terminal_ip | String | 16 | N | 用户手机端IP(IPV4格式 ,人行侧风控主要依据,请真实填写) | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 终端流水号,可填写商户系统的业务订单号(扫呗不做该值的验重,若多次请求使用同一个值,会导致一个单号有多条订单记录)。该值可对应用在4.5支付查询、4.6退款申请、4.8关闭订单接口的pay_trace字段。 | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式。该值可对应用在4.5支付查询、4.6退款申请、4.8关闭订单接口的pay_time字段。 | +| total_fee | String | 10 | Y | 金额,单位分,小于*2147483647* | +| sub_appid | String | 16 | Y | `传商户自己的小程序appid`。(即获取open_id所使用的appid)。`pay_type`为`010`及`020`时必填 | +| open_id | String | 128 | Y | 用户标识(微信openid,支付宝userid) | +| timeout_express | String | 3 | N | 订单交易关闭时间(单位分,不传默认120)。 `如果小程序有设置订单失效时间的,建议和订单失效时间设置一致`。该字段部分收单通道支持,若遇到不生效的情况,即为收单通道不支持。 | +| goods_detail | String | 2048 | N | 订单包含的商品列表信息,Json数组格式。`pay_type`为`010`,`020`时,可选填此字段,详情见[《字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#etskU) | +| goods_tag | String | 32 | N | 订单优惠标记(需提前配置),代金券或立减优惠功能的参数 | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息。`禁止使用+,空格,/,?,%,#,&,=,【这几类特殊符号` | +| notify_url | String | 255 | N | 支付结果接收地址,请按4.10回调通知接口编写接口接收。 注:该字段若不传递,需要通过4.5支付查询接口确认订单支付状态 | +| attach | String | 128 | N | 附加数据,原样返回 | +| coupon_no | String | 128 | N | 优惠券串码 | +| coupon_credential | String | 255 | N | 优惠券凭证 | +| custom_store_id | String | 32 | N | 微信门店编号和支付宝外部自定义门店编号,透传。微信对应scene_info(场景信息)中的门店id。 `支付宝自定义门店编号不能随便传,在确认门店编号存在的情况下传值,否则影响支付` | +| official_store_id | String | 32 | N | 支付宝官方门店编号,透传 | +| food_order_type | String | 32 | N | 微信点餐场景类型: qr_order(店内扫码点餐)、 pre_order(预点到店自提)、home_delivery (外送到家)、direct_payment(直接付款)、 other(其他) 支付宝点餐场景类型: QR_FOOD_ORDER(点餐先付)、 P_QR_FOOD_ORDER(点餐后付)、 SELF_PICK(门店自提)、 TAKE_OUT(餐饮外卖) | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +`goods_detail`的内容说明:`称重商品数量请传1或其它整数,价格传重量*单价后的总价` + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| goods_id | String | 32 | Y | 商品编号 | +| goods_name | String | 128 | Y | 商品名称 | +| quantity | String | 11 | Y | 商品数量,需为整数,不要带小数点 | +| price | String | 11 | Y | 商品单价,单位为分(注:`pay_type`为`010`时,此字段类型为`int`) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“预支付请求成功”,“预支付请求失败”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果:`01`成功 ,`02`失败 | +| pay_type | String | 3 | N | 支付时传递的支付方式 | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号(商户自定义,如门店编号),必须在平台已配置过 | +| terminal_trace | String | 32 | N | 终端流水号,商户系统的支付订单号,系统原样返回 | +| terminal_time | String | 14 | N | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式,系统原样返回 | +| total_fee | String | 12 | N | 金额,单位分 | +| out_trade_no | String | 32 | N | 扫呗订单号 | +| appId | String | 16 | N | 微信小程序支付返回字段,公众号id | +| timeStamp | String | 32 | N | 微信小程序支付返回字段,时间戳,示例:1414561699,标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数。注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字)。 | +| nonceStr | String | 32 | N | 微信小程序支付返回字段,随机字符串 | +| package_str | String | 128 | N | 微信小程序支付返回字段,订单详情扩展字符串,示例:prepay_id=123456789,统一下单接口返回的prepay_id参数值,提交格式如:prepay_id= | +| signType | String | 32 | N | 微信小程序支付返回字段,签名方式,示例:MD5,RSA | +| paySign | String | 512 | N | 微信小程序支付返回字段,签名 | +| ali_trade_no | String | 32 | N | 支付宝交易号,用于调用my.tradePay | + +### 4.5支付查询 + +**应用场景** + +该接口提供所有微信支付订单的查询,商户可以通过该接口主动查询订单状态,完成下一步的业务逻辑。 + +需要调用查询接口的情况: + +- 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知; +- 调用支付接口后,返回系统错误或未知交易状态情况; +- 调用被扫支付API,返回USERPAYING的状态; +- 调用关单或撤销接口API之前,需确认支付状态; + +**查询方式** + +- 方式一:使用利楚订单号进行查询:用支付下单接口返回的out_trade_no值,传在支付查询接口的out_trade_no字段。若没有获取到该字段的值,请使用方式二查询。 +- 方式二:使用商户自己订单号进行查询:把支付下单请求接口里的terminal_trace字段值传在支付查询接口的pay_trace字段,和支付下单请求接口里的terminal_time字段值传在支付查询接口的pay_time字段。使用该方式时,out_trade_no不需要传值。 + +推荐优先方式一,拿不到out_trade_no时用方式二。 + +--- + +❗**注意:** + +> 1. 建议每次查询间隔3-5s。付款码支付的情况下,若查询多次还是支付中,可在确定没有资金损失的情况下调用4.7撤销交易接口(支付成功的会退款),关闭订单。 +> 2. 若支付接口或者查询接口返回了终态的(如支付成功、支付失败、已退款、已关闭),无需继续查询。 +> 3. 若出现网络超时,拿不到out_trade_no时,可使用方式二进行查询。 +> + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiTradeQueryRequest**, **SaobeiTradeQueryResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/query` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`202` | +| pay_type | String | 3 | Y | 支付方式:`000`自动识别类型 | +| service_id | String | 3 | Y | 接口类型,当前类型`020` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 请求流水号,每次请求新生成(不是传要查询的单号,要查询的单号传在pay_trace或者out_trade_no) | +| terminal_time | String | 14 | Y | 实时时间,yyyyMMddHHmmss,全局统一时间格式 | +| pay_trace | String | 32 | 可选 | 需要查询的业务订单号,`请使用支付请求里的终端流水号(terminal_trace)`,与pay_time同时传递 | +| pay_time | String | 14 | 可选 | 业务订单号的支付时间,`请使用支付请求里的终端交易时间(terminal_time)`,yyyyMMddHHmmss,全局统一时间格式,与pay_trace同时传递 | +| out_trade_no | String | 64 | 可选 | 需要查询的扫呗订单号,传支付请求里返回的out_trade_no(也可使用支付接口返回的channel_trade_no或channel_order_no) | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做轮询操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“支付成功”,“支付中”,“请求受限”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果:`01`成功 ,`02`失败 (无需继续查询),`03`支付中。`支付失败`和`退款成功`状态均返回`02`,具体状态和原因会在`return_msg`中给出解释 | +| pay_type | String | 3 | N | 支付方式: `010` 微信, `020` 支付宝, `060` qq钱包, `090` 抖音支付, `100` 翼支付, `110` 银联云闪付, `120` 龙支付(建行通道可用), `140` 和包支付(和包通道可用), `160` 数字人民币, `170` 招行APP(招行通道可用), `180` 微企付, `190` 支付宝商转 , `200` 微信B2b | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号(商户自定义,如门店编号),必须在平台已配置过 | +| terminal_trace | String | 32 | N | 终端流水号,商户系统的查询流水号,系统原样返回 | +| terminal_time | String | 14 | N | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| total_fee | String | 12 | N | 金额,单位分 | +| receipt_fee | String | 12 | N | 商家实收金额,单位分 | +| buyer_pay_fee | String | 12 | N | 买家实付金额(分)pay_ver为`202`时返回 | +| platform_discount_fee | String | 12 | N | 平台优惠金额(分)pay_ver为`202`时返回 | +| merchant_discount_fee | String | 12 | N | 商家优惠金额(分)pay_ver为`202`时返回 | +| sub_openid | String | 32 | N | 微信子商户appid下用户唯一标识,如需返回则请求时需要传sub_appid。pay_ver为`202`时返回 | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息。pay_ver为`202`时返回 | +| end_time | String | 14 | N | 支付完成时间,yyyyMMddHHmmss,全局统一时间格式 | +| out_trade_no | String | 32 | N | 扫呗订单号 | +| trade_state | String | 10 | N | 交易订单状态, `SUCCESS`支付成功,(无需继续查询) `REFUND`转入退款,(无需继续查询) `NOTPAY`未支付, `CLOSED`已关闭,(无需继续查询) `USERPAYING`用户支付中, `REVOKED`已撤销,(无需继续查询) `NOPAY`未支付支付超时, `PAYERROR`支付失败(无需继续查询) | +| channel_trade_no | String | 32 | Y | 微信订单号、支付宝订单号等(建议系统方取值后入库) | +| channel_order_no | String | 32 | N | 收单通道侧订单号(建议系统方取值后入库) | +| user_id | String | 32 | N | 付款方用户id,“微信openid”、“支付宝账户”、“qq号”等 | +| pay_trace | String | 32 | N | 当前支付终端流水号 | +| pay_time | String | 14 | N | 当前支付终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| bank_type | String | 16 | N | 银行类型,采用字符串类型的银行标识。微信官方提供:[银行类型对照表](https://gtimg.wechatpay.cn/resource/xres/mmpaydoc/static/attachment/4ed679b5250e8ba231b90c2e40064b26/银行类型对照表.xlsx) | +| promotion_detail | String | 6000 | N | 本交易支付时使用的所有优惠券信息 ,单品优惠功能字段,详情见[《优惠字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#U8ELM)pay_ver为`202`时返回 | +| attach | String | 128 | N | 附加数据,原样返回 | + +### 4.6退款申请 + +**应用场景** + +当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付机构将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家账号上。退款资金到账会有一定延时,资金具体到账时间以各支付端或者银行卡到账时效为准。 + +**退款方式** + +- 方式一:使用利楚订单号进行退款:用支付下单接口返回的out_trade_no值,传在退款申请接口的out_trade_no字段。 +- 方式二:使用商户自己订单号进行退款:把支付下单请求接口里的terminal_trace字段值传在退款申请接口里的pay_trace字段,和支付下单请求里的terminal_time字段值传在退款申请接口的pay_time字段。使用该方式时,out_trade_no不需要传值。 + +推荐优先方式一,拿不到out_trade_no时用方式二。 + +--- + +❗**注意:** + +> - 需要商户当天有收单,或者商户账户内有大于退款金额的余额,否则会造成余额不足,退款失败; +> - 退款接口实时返回结果,没有回调通知。退款到账情况,以各钱包或者银行卡到账时效为准。 +> + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiTradeRefundRequest**, **SaobeiTradeRefundResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/refund` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`202` | +| pay_type | String | 3 | Y | 支付方式:`000`自动识别类型 | +| service_id | String | 3 | Y | 接口类型,当前类型`030` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 退款流水号(`不要和支付单号或者要退款的单号用一样的值`),可填写商户系统的退款流水号,每次请求需新生成。该值可对应用在4.9退款订单查询接口的pay_trace字段。 | +| terminal_time | String | 14 | Y | 实时时间,yyyyMMddHHmmss,全局统一时间格式,每次请求新生成。该值可对应用在4.9退款订单查询接口的pay_time字段。 | +| repeated_trace | String | 1 | N | 是否允许订单重复 `1`:terminal_trace不允许重复,即多次退款时不管成功还是失败,值只能使用一次 `2`:terminal_trace+terminal_time不允许重复,即其中一个值发生改变即可,如多次退款时terminal_trace重复使用,而terminal_time值改变 `0或不传`:同一个terminal_trace值允许重复 | +| refund_fee | String | 10 | Y | 退款金额,单位分,小于*2147483647* | +| out_trade_no | String | 64 | O | 要退款的扫呗订单号,传支付请求里返回的out_trade_no(也可使用支付接口返回的channel_trade_no或channel_order_no) | +| pay_trace | String | 32 | O | 需要退款的业务订单号,请使用`支付请求里的`终端流水号(terminal_trace),与pay_time同时传递 | +| pay_time | String | 14 | O | 退款订单的支付时间,请使用`支付请求里的`终端交易时间,yyyyMMddHHmmss,与pay_trace同时传递 | +| order_body | String | 80 | N | 退款订单备注 | +| attach | String | 128 | N | 附加数据 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,需调用退款订单查询接口,确认退款状态。 | +| return_msg | String | 128 | Y | 返回信息提示,“退款成功”、“订单不存在”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果: `01`成功 , `02`失败 , `03`处理中(状态异常或微信B2b时返回) | +| pay_type | String | 3 | N | 支付方式: `010` 微信, `020` 支付宝, `060` qq钱包, `090` 抖音支付, `100` 翼支付, `110` 银联云闪付, `120` 龙支付(建行通道可用), `140` 和包支付(和包通道可用), `160` 数字人民币, `170` 招行APP(招行通道可用), `180` 微企付, `190` 支付宝商转 , `200` 微信B2b | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 32 | N | 终端流水号,商户系统的退款流水号,系统原样返回 | +| terminal_time | String | 14 | N | 终端退款时间,yyyyMMddHHmmss,全局统一时间格式 | +| refund_fee | String | 12 | N | 退款金额,单位分 | +| refund_receipt_fee | String | 12 | N | 退商家实收金额(分)pay_ver为`202`时返回 | +| refund_buyer_pay_fee | String | 12 | N | 退买家实付金额(分)pay_ver为`202`时返回 | +| refund_platform_discount_fee | String | 12 | N | 退平台优惠金额(分)pay_ver为`202`时返回 | +| refund_merchant_discount_fee | String | 12 | N | 退商家优惠金额(分)pay_ver为`202`时返回 | +| refund_promotion_detail | String | 6000 | N | 退优惠明细,详情见[《优惠字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#U8ELM)pay_ver为`202`时返回 | +| end_time | String | 14 | N | 退款完成时间,yyyyMMddHHmmss,全局统一时间格式 | +| out_trade_no | String | 32 | N | 扫呗原支付订单号 | +| out_refund_no | String | 32 | N | 扫呗侧退款单号 | +| channel_refund_no | String | 32 | N | 通道侧退款单号 | + +### 4.7撤销交易 + +**应用场景** + +付款码支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,支付系统会将此订单关闭;如果用户支付成功,支付系统会将此订单资金退还给用户。 + +**撤销方式** + +- 方式一:用支付下单接口返回的out_trade_no值,传在撤销交易接口的out_trade_no字段。 +- 方式二:把支付下单请求接口里的terminal_trace字段值传在撤销交易接口的pay_trace字段,和支付下单请求里的terminal_time字段值传在撤销交易接口的pay_time字段。使用该方式时,out_trade_no不需要传值。 + +推荐优先方式一,拿不到out_trade_no时用方式二。 + +--- + +❗**注意:** + +> 1. 撤销接口只适用于B扫C的付款码支付场景。 +> 2. 撤销接口会对已经支付的订单进行退款,**程序要在不会有资金损失的情况下调用撤销接口;或者由人工确认确实可撤销后,再手动调用撤销接口**。 +> 3. 请勿在没有收银员确认的情况下自动调用撤销接口,这样可能会出现资损。 +> + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiTradeCancelRequest**, **SaobeiTradeCancelResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/cancel` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`201` | +| pay_type | String | 3 | Y | 支付方式:`000`自动识别类型 | +| service_id | String | 3 | Y | 接口类型,当前类型`040` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 请求流水号,每次请求新生成(不是传要撤销的支付单号,要撤销的单号传在pay_trace或者out_trade_no) | +| terminal_time | String | 14 | Y | 实时时间,yyyyMMddHHmmss,全局统一时间格式 | +| out_trade_no | String | 32 | N | 要撤销的扫呗订单号,传支付请求里返回的out_trade_no | +| pay_trace | String | 32 | N | 要撤销的业务订单号,传支付请求里的terminal_trace终端流水号,与pay_time同时传递 | +| pay_time | String | 14 | N | 撤销订单的支付时间,传支付请求里的terminal_time终端交易时间,与pay_trace同时传递 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,需调用支付查询接口,确认订单状态。 | +| return_msg | String | 128 | Y | 返回信息提示,“退款成功”、“订单不存在”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | "业务结果,“01”成功,表示撤销成功,此笔订单不能再发起支付;若已支付完成,则会发起退款;“02”失败,表示撤销接口异常 | +| pay_type | String | 3 | N | 支付方式: `010` 微信, `020` 支付宝, `090` 抖音支付, `110` 银联云闪付 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号(商户自定义,如门店编号),必须在平台已配置过 | +| terminal_trace | String | 32 | N | 终端流水号 | +| terminal_time | String | 14 | N | 终端撤销时间,yyyyMMddHHmmss,全局统一时间格式 | +| recall | String | 1 | N | 废弃字段 | +| merchant_name | String | 40 | N | 商户名称 | + +### 4.8关闭订单 + +**应用场景** + +商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时或未支付,系统退出不再受理后,避免用户继续支付。 + +**关单方式** + +- 方式一:使用利楚订单号进行关单:用支付下单接口返回的out_trade_no值,传在关闭订单接口的out_trade_no字段。 +- 方式二:使用商户自己订单号进行关单:把支付下单请求接口里的terminal_trace字段值传在关闭订单接口的pay_trace字段,和支付下单请求里的terminal_time字段值传在关闭订单接口的pay_time字段。使用该方式时,out_trade_no不需要传值。 + +推荐优先方式一,拿不到out_trade_no时用方式二。 + +--- + +❗**注意:** + +> 使用聚合码、公众号和小程序支付接口发起的订单,可以通过该接口关闭。 +> + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiTradeCloseRequest**, **SaobeiTradeCloseResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/close` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`201` | +| pay_type | String | 3 | Y | 支付方式:`000`自动识别类型 产业支付关单时,需指定支付方式 `180`微企付 `190`支付宝商转 `200`微信B2b | +| service_id | String | 3 | Y | 接口类型,当前类型`041` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 请求流水号,每次请求新生成(不是传要关闭的支付单号,要关闭的单号传在pay_trace或者out_trade_no) | +| terminal_time | String | 14 | Y | 实时时间,yyyyMMddHHmmss,全局统一时间格式,每次请求新生成 | +| out_trade_no | String | 32 | N | 要关闭的扫呗订单号,传支付请求里返回的out_trade_no | +| pay_trace | String | 32 | N | 要关闭的业务订单号,传支付请求里的terminal_trace终端流水号,与pay_time同时传递 | +| pay_time | String | 14 | N | 关闭订单的支付时间,传支付请求里的terminal_time终端交易时间,与pay_trace同时传递 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,需调用支付查询接口,确认订单状态。 | +| return_msg | String | 128 | Y | 返回信息提示,“关单成功”、“订单不存在”等 | +| key_sign | String | 32 | Y | 签名串 | +| result_code | String | 2 | N | 业务结果, `01`成功,表示关单成功,此笔订单不能再发起支付; `02`失败,表示关单失败 | +| pay_type | String | 3 | N | 支付方式: `010` 微信, `020` 支付宝, `060` qq钱包, `090` 抖音支付, `110` 银联云闪付, `180` 微企付, `190` 支付宝商转 , `200` 微信B2b | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号(商户自定义,如门店编号),必须在平台已配置过 | +| terminal_trace | String | 32 | N | 终端流水号(socket协议:长度为6位,Http协议:长度为32位) | +| terminal_time | String | 14 | N | 关单请求时间,yyyyMMddHHmmss,全局统一时间格式 | + +### 4.9退款订单查询 + +**应用场景** + +提交退款申请后,通过调用该接口查询退款状态。 + +**退款方式** + +- 方式一:用退款申请接口返回的out_refund_no值,传在退款订单查询接口的out_refund_no字段。 +- 方式二:把退款申请请求接口里的terminal_trace字段值传在退款订单查询接口里的pay_trace字段,和退款申请请求里的terminal_time字段值传在退款订单查询接口的pay_time字段。使用该方式时,out_trade_no不需要传值。 + +推荐优先方式一,拿不到out_trade_no时用方式二。 + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiTradeQueryRefundRequest**, **SaobeiTradeQueryRefundResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/queryrefund` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`202` | +| pay_type | String | 3 | Y | 支付方式:`000`自动识别类型 | +| service_id | String | 3 | Y | 接口类型,当前类型`031` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| device_no | String | 32 | N | 商户侧门店或者终端编号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 请求流水号,每次请求新生成(不是传要查询的退款单号,要查询的退款单号传在pay_trace或者out_refund_no) | +| terminal_time | String | 14 | Y | 退款查询时间,yyyyMMddHHmmss,全局统一时间格式 | +| out_refund_no | String | 32 | 可选 | 平台唯一退款订单号,退款请求里返回的out_refund_no | +| pay_trace | String | 32 | 可选 | 退款申请接口里的终端退款流水号( terminal_trace),与pay_time同时传递 | +| pay_time | String | 14 | 可选 | 退款申请接口里的终端交易时间( terminal_time),与pay_trace同时传递 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息, 返回错误原因 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果:`01`成功 ,`02`失败,`03`处理中 | +| pay_type | String | 3 | N | 支付方式: `010` 微信, `020` 支付宝, `060` qq钱包, `090` 抖音支付, `100` 翼支付, `110` 银联云闪付, `120` 龙支付(建行通道可用), `140` 和包支付(和包通道可用), `160` 数字人民币, `170` 招行APP(招行通道可用), `180` 微企付, `190` 支付宝商转 , `200` 微信B2b | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户终端设备号(商户自定义,如门店编号),必须在平台已配置过 | +| terminal_trace | String | 32 | N | 当前终端退款查询流水号,扫呗系统原样返回 | +| terminal_time | String | 14 | N | 当前终端退款查询时间,扫呗系统原样返回 | +| refund_fee | String | 12 | N | 退款金额,单位分 | +| refund_receipt_fee | String | 12 | N | 退商家实收金额(分) | +| refund_buyer_pay_fee | String | 12 | N | 退买家实付金额(分) | +| refund_platform_discount_fee | String | 12 | N | 退平台优惠金额(分) | +| refund_merchant_discount_fee | String | 12 | N | 退商家优惠金额(分) | +| refund_promotion_detail | String | 6000 | N | 退优惠明细,详情见[《优惠字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#U8ELM) | +| end_time | String | 14 | N | 退款完成时间,yyyyMMddHHmmss,全局统一时间格式 | +| out_refund_no | String | 32 | N | 扫呗退款订单号 | +| out_trade_no | String | 32 | N | 原支付扫呗订单号 | +| trade_state | String | 10 | N | 退款订单状态: `SUCCESS`退款成功, `FAIL`退款失败, `REFUNDING`退款中, `NOREFUND`退款超时等, `PAYERROR`余额不足 | +| channel_trade_no | String | 32 | N | 微信订单号、支付宝订单号等 | +| channel_order_no | String | 32 | N | 收单通道侧订单号 | +| user_id | String | 32 | N | 退款方用户id,“微信openid”、“支付宝账户”、“qq号”等 | +| attach | String | 128 | N | 附加数据,原样返回 | +| pay_trace | String | 32 | N | 退款终端流水号 | +| pay_time | String | 14 | N | 退款终端交易时间 | + +### 4.10回调通知 + +**应用场景** 支付完成后,将该笔订单的变更信息,沿着商户调用预下单请求时所传入的异步通知地址 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商户系统,商户需要接收处理,并按文档规范返回应答,返回格式:`{"return_code":"01","return_msg":"success"}`。 + +--- + +❗**注意:** + +> 1、只有支付成功才有回调。支付失败和退款是接口实时返回结果,没有回调。 2、接收到推送报文后,需在3s内返回响应结果。若不返回,或返回报文格式错误,不进行重推。 3、当回调地址访问超时或者地址请求异常时,会重推3次,若还失败,不再重推。建议商户主动调用【4.5支付查询】确认订单状态。 +> + +--- + +**协议要求** + +- Method:`POST` +- Content-type:`application/json` +- URL:`下单传入的notify_url` + +**推送参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,返回值`201`、`202` | +| return_code | String | 2 | Y | 响应码:`01`成功 | +| return_msg | String | 128 | Y | 返回信息提示,“支付成功” | +| result_code | String | 2 | Y | 业务结果:`01`成功 | +| pay_type | String | 3 | Y | 支付方式: `010`微信, `020` 支付宝, `060`qq钱包, `090` 抖音支付, `100`翼支付, `110`云闪付, `180` 微企付, `190` 支付宝商转, `200` 微信B2b | +| user_id | String | 32 | Y | 服务商appid下的付款方用户id,“微信openid”、“支付宝账户”、“qq号”等 | +| merchant_name | String | 40 | Y | 商户名称 | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| device_info | String | 32 | N | 商户侧门店或者终端编号,`支付请求传递了device_no时返回。` | +| terminal_trace | String | 32 | Y | 终端流水号,此处传商户发起预支付或公众号支付时所传入的交易流水号 | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式(01时参与拼接) | +| pay_trace | String | 32 | N | 当前支付终端流水号,与pay_time同时传递 | +| pay_time | String | 14 | N | 当前支付终端交易时间,yyyyMMddHHmmss,全局统一时间格式,与pay_trace同时传递 | +| end_time | String | 14 | Y | 支付完成时间,yyyyMMddHHmmss,全局统一时间格式 | +| out_trade_no | String | 32 | Y | 扫呗订单号 | +| channel_trade_no | String | 32 | Y | 微信订单号、支付宝订单号等(建议系统方取值后入库) | +| channel_order_no | String | 32 | N | 收单通道侧订单号,pay_ver为`202`时返回(建议系统方取值后入库) | +| attach | String | 128 | Y | 附加数据,原样返回 | +| sub_openid | String | 32 | Y | 微信子商户appid(对应微信sub_appid字段)下的付款方用户id, pay_ver为`202`时返回 | +| total_fee | String | 12 | Y | 金额,单位分 | +| receipt_fee | String | 12 | N | 商家实收金额,单位分 | +| buyer_pay_fee | String | 12 | N | 买家实付金额(分)pay_ver为`202`时返回 | +| platform_discount_fee | String | 12 | N | 平台优惠金额(分)pay_ver为`202`时返回 | +| merchant_discount_fee | String | 12 | N | 商家优惠金额(分)pay_ver为`202`时返回 | +| bank_type | String | 16 | N | 银行类型,采用字符串类型的银行标识。微信官方提供:[银行类型对照表](https://gtimg.wechatpay.cn/resource/xres/mmpaydoc/static/attachment/4ed679b5250e8ba231b90c2e40064b26/银行类型对照表.xlsx) | +| promotion_detail | String | 6000 | N | 本交易支付时使用的所有优惠券信息 ,单品优惠功能字段,详情见[《优惠字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#U8ELM) | +| order_body | String | 128 | N | 订单标题描述 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**需返回参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01` 成功 | +| return_msg | String | 128 | Y | 返回信息提示 | + +### 4.11聚合码接口(C扫B) + +**应用场景** + +该接口调用完后只是返回了一个收银台链接,并未产生支付订单。使用方式有两种: + +1. `方式一:`把链接转换成二维码后,用户使用微信、支付宝、云闪付扫码打开收银台页面,发起支付,不支持浏览器扫码打开。 +2. `方式二:`在微信、支付宝内的H5页面中(不支持手机浏览器访问的H5页面),使用页面跳转的方式打开链接,发起支付。 + +--- + +❗**注意:** + +> 1. **码失效和订单失效的区别:**该接口请求后只是生成了一个收银台链接,并不是支付请求,故调用该接口设置的timeout_express失效时间,只是链接的失效时间,并不是订单的关闭时间,该接口无法控制订单的关闭时间。若消费者在链接即将失效的时候,扫了码(扫码后才生成待支付订单),链接失效后,订单仍然可以支付。 +> 2. **如何查询订单:**该接口因不是支付请求,所以没有返回out_trade_no订单号,但可以通过端流水号+终端交易时间做为查询值(支付查询接口的方式二),调用4.5支付查询接口发起订单查询。 +> 3. **如何判断用户是否扫码:**设置auto_pay值为1,扫码时会自动生成订单,并拉起JSAPI支付。通过订单查询接口进行订单状态查询,返回订单信息,说明用户扫码了;若返回"订单信息不存在!",说明用户没有扫码。 +> 4. **如何关闭订单:**扫码后没有完成支付的订单,默认两个小时后自动关闭。若想主动关闭订单,可调用4.5支付查询接口,当查询请求返回订单信息后,可使用查询接口返回的out_trade_no或终端流水号+终端交易时间,调用4.8关闭订单接口发起订单关闭。 +> 5. **当前页面的URL未注册:**报 [http://wxpay.lcsw.cn/test/pay_sdk.html](http://wxpay.lcsw.cn/test/pay_sdk.html) 或其它地址未注册时,请联系运营同事,在正式商户上对应通道的关注配置里,添加支付授权目录地址:[http://wxpay.lcsw.cn/test/](http://wxpay.lcsw.cn/test/) 或对应提示的地址。 +> + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiQrPayRequest**, **SaobeiQrPayResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/qrpay` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,当前版本`202` | +| pay_type | String | 3 | Y | 请求类型:`000` | +| service_id | String | 3 | Y | 接口类型,当前类型`016` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| terminal_trace | String | 6至32 | Y | 终端流水号,可填写商户系统的业务订单号 **特殊说明:** 1.若repeated_trace设置1,多次请求时不可使用同一个值)。 2.该值可对应用在4.5支付查询、4.6退款申请、4.8关闭订单接口的pay_trace字段。 | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式。该值可对应用在4.5支付查询、4.6退款申请、4.8关闭订单接口的pay_time字段。 | +| total_fee | String | 12 | Y | 金额,单位分 | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息。`禁止使用+,空格,/,?,%,#,&,=,【这几类特殊符号` | +| notify_url | String | 255 | N | 支付结果接收地址,请按4.10回调通知接口编写接口接收((请勿传递localhost、http地址或127.0.0.1等ip地址))。 注:该字段若不传递,需要通过4.5支付查询接口确认订单支付状态 | +| attach | String | 128 | N | 附加数据,原样返回(请勿传递localhost、http地址或127.0.0.1等ip地址) | +| timeout_express | String | 4 | N | 链接失效时间,非订单关闭时间,具体请看注意事项。单位s。取值范围:1~7200的整数,不传默认7200s。 | +| repeated_trace | String | 2 | Y | 是否允许重复扫码或支付 `0`或不传:允许重复扫码或支付。(说明:同一终端流水号和终端交易时间会出现多笔交易) `1`:不允许重复扫码或支付。(说明:取消支付后也不可重新支付) `2`:允许terminal_trace(业务订单号)值不变,但terminal_time(交易发起时间)值变化时,多次请求该接口生成收款码(说明:用于订单重新发起收款或者一个单号分不同时间多次收款) `3`:允许terminal_trace(业务订单号)+terminal_time(交易发起时间)只支付成功一次,失败情况下可重复(说明:多次扫码或者收银台多次点击支付时,只能支付成功一次) | +| auto_pay | String | 1 | N | 扫码后是否自动生成订单 `1`:自动拉起支付并生成订单, `0`或不传:手动点击页面支付按钮后生成订单 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码:`01`成功 ,`02`失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“预支付请求成功”,“预支付请求失败”等 | +| result_code | String | 2 | Y | 业务结果:`01`成功 ,`02`失败 | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| terminal_trace | String | 32 | N | 终端流水号,商户系统的订单号,扫呗系统原样返回 | +| terminal_time | String | 14 | N | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| total_fee | String | 12 | N | 金额,单位分 | +| qr_url | String | 128 | N | 短链接,需调用方自己转换成二维码或直接在微信和支付宝、云闪付内打开链接 | +| key_sign | String | 32 | N | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +### 4.12WAP支付 + +--- + +❗**注意:** + +> 1. 该接口是拼接一个长链接的请求地址,故没有返回参数,拼接后的链接可转换成二维码,或者在页面内直接访问。 +> 2. 生成的链接只可在微信、支付宝、云闪付、QQ钱包、翼支付等支付应用内访问,不支持手机浏览器、自研app应用或小程序内打开。 +> 3. 当repeated_trace字段传1时,会同时根据传递的terminal_time来限制此链接有效时间为两小时,例如链接传递terminal_time=20190510101409,那么20190510121409以后访问此链接会返回链接失效,此时需要重新生成wapsdk链接。 +> + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiWapPayRequest**, **String**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**拼接地址** + +- URL:`/open/wap/110/pay` +- Method:`GET` +- 拼接格式:http://接口域名/open/wap/110/pay?auto_pay=0&merchant_no=¬ify_url=&其它参数=key_sign=签名验证串 + +--- + +**拼接参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| company_flag | String | 2 | N | 是否使用产业付产品: 0:否(默认0) 1:产业付和普通支付混合 2:只能产业付 (即pay_type只能使用180或者190) | +| pay_type | String | 4 | N | 支付类型 `000` 自动判断(不填默认000) `010` 微信 `020` 支付宝 `110` 银联云闪付 `180` 微企付 `190` 支付宝商转 `company_flag 为2时,设置180、190可限制只能使用产业付。或者传000可实现自动识别` `注意: 此字段不参与签名` | +| terminal_trace | String | 6至32 | Y | 终端流水号,可填写商户系统的业务订单号(若repeated_trace设置1,多次请求时不可使用同一个值) | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| total_fee | String | 12 | Y | 金额,单位分 | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息。`禁止使用+,空格,/,?,%,#,&,=,【这几类特殊符号`,`中文需要urlencode,签名拼接不需要urlencode` | +| notify_url | String | 255 | N | 支付结果接收地址,通知数据请查看4.10回调通知接口,支付宝商转不支持回调。 注:该字段若不传递,需要通过4.5支付查询接口确认订单支付状态 (get请求拼接需要urlencode,签名拼接不需要urlencode) | +| auto_pay | String | 1 | N | 扫码后是否自动生成订单 `1`:自动拉起支付并生成订单, `0`或不传:手动点击页面支付按钮后生成订单 | +| attach | String | 128 | N | 附加数据,原样返回,`中文需要urlencode,签名拼接不需要urlencode` | +| repeated_trace | String | 2 | Y | 是否允许重复扫码或支付 `0`或不传:允许重复扫码或支付。(说明:同一终端流水号和终端交易时间会出现多笔交易) `1`:不允许重复扫码或支付。(说明:取消支付后也不可重新支付) `2`:允许terminal_trace(业务订单号)值不变,但terminal_time(交易发起时间)值变化时,多次请求该接口生成收款码(说明:用于订单重新发起收款或者一个单号分不同时间多次收款) `3`:允许terminal_trace(业务订单号)+terminal_time(交易发起时间)只支付成功一次,失败情况下可重复(说明:多次扫码或者收银台多次点击支付时,只能支付成功一次) | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +### 4.13(刷脸)自助收银SDK调用凭证获取接口 + +微信刷脸说明: + +[https://pay.weixin.qq.com/wiki/doc/wxfacepay/develop/android/facepay.html#微信刷脸支付场景说明](https://pay.weixin.qq.com/wiki/doc/wxfacepay/develop/android/facepay.html) + +![](http://lifedy.oss-cn-hangzhou.aliyuncs.com/docs/1725618208139-4a1070c4-7be5-4e73-bda2-ca61b02407ac.png) + +第一步:使用官方流程中的第一步和第二步中的获取数据接口,得到rawdata。 + +第二步:拿着获取到的rawdata调用本文档的“自助收银sdk调用凭证获取”接口可获取到SDK调用凭证authinfo(该接口替代官方流程中第二步中的“获取SDK调用凭证”接口)。 + +第三步:使用上一步接口获取到的authinfo、 sub_serv_no(对应官方接口mch_id字段)、sub_serv_appid(对应官方接口的appid字段) 再去调用官方流程中的“5、进行人脸识别”接口,得到返回值face_code。 + +第四步:使用上一步中获取的face_code值,调用本文档中“(刷脸)自助收银支付接口”传递在auth_no字段或者使用“付款码支付”接口传在auth_no字段。这样就可以完成刷脸支付。 + +支付宝刷脸说明: + +[https://opendocs.alipay.com/open/20180402104715814204/cgxcze#支付宝刷脸支付场景说明](https://opendocs.alipay.com/open/20180402104715814204/cgxcze) + +![](http://mdn.alipayobjects.com/afts/img/A*pdcNQI1ifksAAAAAAAAAAAAAAa8wAA/original?bz=openpt_doc&t=zFwcyveHCY8ZbPWzuL1VkAAAAABkMK8AAAAA) + +按照官方流程: + +第一步:使用官方“1.2.1获取刷脸所需的设备信息”接口(接口所需值由设备提供),得到返回结果。 + +第二步:将第一步返回结果对象转换成json传入到本文档的【4.13自助收银sdk调用凭证获取】接口的rawdata字段,从而得到authinfo值(对应的是支付宝返回的zim_id的值);当上游通道不支持这一步时,可使用第一步接口返回的参数,自行调用官方“1.2.2刷脸初始化”接口,得到zim_id。 + +第三步:调用官方“1.2.3唤起人脸识别”接口,将上一步返回的authinfo字段或zim_id(自行调用官方接口获得)的值传入到接口所需的zimId字段,得到返回值ftoken。 + +第四步:使用上一步返回的ftoken字段,调用本文档中的【4.14(刷脸)自助收银支付接口】传在auth_no字段,这样就可以完成刷脸支付。 + +两个刷脸支付流程均为四步,第一和第三步调用官方接口,第二步和第四步调用扫呗。支付宝刷脸时的第二步也可自行调用官方接口。 + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiFaceInfoRequest**, **SaobeiFaceInfoResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/faceinfo` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`201` | +| pay_type | String | 3 | Y | 支付方式, `010` 微信, `020` 支付宝 | +| sub_appid | String | 16 | N | 子商户绑定的公众号/小程序 appid(服务商模式) | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_no | String | 8 | Y | 终端号 | +| rawdata | String | 2048 | Y | 微信、支付宝人脸识别SDK初始化数据 | +| trace_no | String | 32 | Y | 请求流水号,不可重复 | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码: `01` 成功 ,`02` 失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“凭证获取成功”,“凭证获取失败”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果: `01` 成功 , `02` 失败 | +| pay_type | String | 3 | N | 支付方式, `010` 微信, `020` 支付宝 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_no | String | 8 | N | 终端号 | +| authinfo | String | 4096 | N | 微信、支付宝人脸识别SDK调用凭证 | +| trace_no | String | 32 | N | 请求流水号 | +| out_trade_no | String | 32 | N | 扫呗订单号,用于调起微信刷脸SDK | +| terminal_time | String | 14 | N | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| expires_in | int | 14 | N | 微信人脸识别返回有效时间,单位:秒 | +| zim_init | String | 4096 | N | 支付宝ZimInitClientData | +| auth_no_type | String | 2 | N | 支付预下单支持的授权码类型:1纯数字形式,2非纯数字形式(版本号为`120`时返回) | +| sub_mchid_info | String | 512 | N | 商户信息 (版本号为`120`时返回) | + +**sub_mchid_info参数:** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| type | String | 3 | N | 支付方式, `010` 微信 | +| sub_mchid | String | 15 | N | 子商户号 | +| sub_serv_no | String | 18 | N | 服务商商户号,对应传在微信官方`getWxpayfaceCode接口的 mch_id 字段` | +| sub_serv_appid | String | 18 | N | 服务商应用appid,对应传在微信官方`getWxpayfaceCode接口的 appid 字段` | +| sub_appid | String | 18 | N | 微信子商户号appid | + +### 4.14(刷脸)自助收银支付接口 + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiFacePayRequest**, **SaobeiFacePayResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/facepay` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`202` | +| pay_type | String | 3 | Y | 支付方式, `010` 微信 `020` 支付宝 | +| service_id | String | 3 | Y | 接口类型,当前类型`016` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| terminal_ip | String | 16 | Y | 交易终端公网IP(IPV4格式 ,人行侧风控主要依据,请真实填写) | +| device_no | String | 32 | N | 商户侧门店编号或者终端设备号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 6至32 | Y | 终端流水号,可填写商户系统的业务订单号,多次请求时不可使用同一个值 | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| auth_no | String | 4096 | Y | 微信、支付宝人脸凭证(微信为 face_code值,支付宝为ftoken值) | +| out_trade_no | String | 32 | N | 扫呗订单号,来自 `自助收银SDK调用凭证获取接口` ,仅微信刷脸支付必传。 | +| open_id | String | 128 | N | 用户标识(微信openid),用于调起微信刷脸SDK | +| total_fee | String | 12 | Y | 金额,单位分 | +| goods_detail | String | 2048 | N | 订单包含的商品列表信息,Json数组格式。`pay_type`为`010`、`020`、`110`时,可选填此字段[《字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#etskU) | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息。`禁止使用+,空格,/,?,%,#,&,=,【这几类特殊符号` | +| attach | String | 128 | N | 附加数据,原样返回 | +| custom_store_id | String | 32 | N | 外部自定义门店编号,透传 | +| official_store_id | String | 32 | N | 支付宝和微信系统官方门店编号,透传 | +| device_type | String | 2 | N | 新增字段,解决不同刷脸设备不需要传产品协议问题 设备类型,1支付宝自助收银设备【传协议】、2微信自助收银设备 、3支付宝蜻蜓设备、 4微信青蛙刷脸设备 5银联刷脸设备6.支付宝海马S1离线刷脸 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +`goods_detail`的内容说明:`称重商品数量请传1或其它整数,价格传重量*单价后的总价` + +| 参数名称 | 类型 | 必填 | 说明 | +| --- | --- | --- | --- | +| goods_id | String | Y | 商品编号(若要匹配单品活动,需与发布的活动商品编号一致) | +| goods_name | String | Y | 商品名称 | +| quantity | String | Y | 商品数量,需为整数,不要带小数点 | +| price | String | Y | 商品单价,单位为分 | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码: `01` 成功 ,`02` 失败 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“预支付请求成功”,“预支付请求失败”等 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | +| result_code | String | 2 | N | 业务结果: `01` 成功 , `02` 失败, `03` 支付中 | +| pay_type | String | 3 | N | 支付方式, `010` 微信, `020` 支付宝 | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| device_no | String | 32 | N | 商户侧门店编号或者终端设备号,`请先与运营同事确认是否在扫呗平台配置过映射,若没有配置映射,请勿传值,否则支付会报错。` | +| terminal_trace | String | 32 | N | 终端流水号,填写商户系统的订单号 | +| terminal_time | String | 14 | N | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式 | +| total_fee | String | 12 | N | 金额,单位分 | +| receipt_fee | String | 12 | N | 商家实收金额(分) | +| buyer_pay_fee | String | 12 | N | 买家实付金额(分) | +| platform_discount_fee | String | 12 | N | 平台优惠金额(分) | +| merchant_discount_fee | String | 12 | N | 商家优惠金额(分) | +| end_time | String | 128 | N | 支付完成时间 | +| out_trade_no | String | 32 | N | 扫呗订单号 | +| order_body | String | 128 | N | 订单描述(官方账单里显示为商品名称) | +| attach | String | 128 | N | 附加数据,原样返回 | +| user_id | String | 32 | N | 付款方用户id,“微信openid”、“支付宝账户”、“qq号”等,返回时不参与签名 | +| sub_openid | String | 32 | N | 子商户appid下用户唯一标识,如需返回则请求时需要传sub_appid | +| channel_trade_no | String | 32 | N | 通道订单号,微信订单号、支付宝订单号等 | +| channel_order_no | String | 64 | N | 银行渠道订单号,微信支付时显示在支付成功页面的条码,可用作扫 | +| bank_type | String | 16 | N | 银行类型,采用字符串类型的银行标识。微信官方提供:[银行类型对照表](https://gtimg.wechatpay.cn/resource/xres/mmpaydoc/static/attachment/4ed679b5250e8ba231b90c2e40064b26/银行类型对照表.xlsx) | +| promotion_detail | String | 6000 | N | 本交易支付时使用的所有优惠券信息 ,单品优惠功能字段,详情见[《优惠字段说明》](https://lcsw.yuque.com/docs/share/d3cbe606-4d43-4dd4-ad97-0812be845349?#U8ELM) | + +### 4.15交易实时同步 + +**应用场景** + +当商户使用我们的产品(如台卡、pos等硬件设备),但不走我们的支付接口时,如果想要在设备完成收款后,使用方得到交易数据,可按照该接口要求,编写接收回调地址,提供给扫呗侧配置(需运营同事提邮件配置申请)。设备收款后,扫呗侧会根据配置的推送内容,将支付结果作为参数推送到商户提供的回调地址上,商户需要接收处理, + +并按规范返回应答,返回格式:{"return_code":"01","return_msg":"success"} + +。 + +--- + +❗**注意:** + +> 1. 交易实时同步是基于代理商配置,会推送代理商下所有商户的所有交易和退款。 +> 2. 接收到推送报文后,需在3s内返回响应结果,若未返回或者返回错误,该接口不进行重推。 +> 3. 若出现网络问题导致推送失败,或者接收方内部错误导致数据处理失败,该接口不会重新推送。若不确定数据是否接收完整,可第二天通过[4.16收单对账单下载](#title-node29)接口,下载对账单文件进行对账补单 +> 4. 接口开发完后,可将地址提供给技术支持人员,由技术人员配合进行联调验证,并告知运营同事提交配置申请邮件,需提供代理商名称以及交易实时同步地址。 +> 5. 扫呗聚合支付平台第三方回调通知接口目前仅支持 HTTPs 1.1 通信协议 TLSv1.2 加密套件,非必要情况下可使用http地址接收 +> + +--- + +**协议要求** + +- Method:POST +- Content-Type:application/json(文本格式的json) + +**通知参数** + +| **参数名称** | **类型** | **长度** | **必填** | **说明** | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值240 | +| card_type | String | 2 | N | 用户银联卡类型 0 储蓄卡, 1 信用卡, 2 未知 | +| merchant_no | String | 15 | Y | 商户号 | +| merchant_name | String | 40 | Y | 商户名称 | +| terminal_id | String | 8 | Y | 终端号 | +| terminal_time | String | 14 | Y | 终端交易时间,yyyyMMddHHmmss,全局统一时间格式(01时参与拼接) | +| terminal_trace | String | 32 | Y | 终端流水号,此处传商户发起预支付或公众号支付时所传入的交易流水号 | +| out_trade_no | String | 32 | Y | 扫呗订单号(pay_status_code=5退款时,该字段为退款单号) | +| out_refund_no | String | 32 | Y | pay_status_code=5退款时,该字段对应原支付数据里的out_trade_no字段值。 | +| total_fee | String | 12 | Y | 订单金额,单位分 | +| pay_type | String | 3 | Y | 支付方式: 010 微信, 020 支付宝, 030 刷银行卡, 060 qq钱包, 080 京东钱包, 090 口碑, 100 翼支付, 110 银联二维码 | +| end_time | String | 14 | Y | 支付完成时间,yyyyMMddHHmmss,全局统一时间格式 | +| attach | String | 128 | Y | 附加数据,原样返回 | +| user_id | String | 32 | Y | 付款方用户id,“微信openid”、“支付宝账户”、“qq号”等 | +| channel_trade_no | String | 32 | Y | 微信订单号、支付宝订单号等 | +| channel_order_no | String | 32 | N | 收单通道侧订单号。推送版本配置240时返回 | +| pay_status_code | int | 2 | Y | 支付状态, 1 支付成功, 2 支付失败, 3 支付中, 4 已撤销, 5 退款成功, 6 退款失败 | +| ~~sub_openid~~ | ~~String~~ | ~~32~~ | ~~N~~ | ~~子商户appid下用户唯一标识,如需返回则请求时需要传sub_appid~~ | +| order_body | String | 128 | N | 订单描述,显示在消费者账单详情页面的商品信息。 | +| buyer_pay_fee | String | 12 | N | 买家实付金额(分) | +| platform_discount_fee | String | 12 | N | 平台优惠金额(分) | +| merchant_discount_fee | String | 12 | N | 商家优惠金额(分) | +| bank_type | String | 16 | N | 银行类型,采用字符串类型的银行标识。微信官方提供:[银行类型对照表](https://gtimg.wechatpay.cn/resource/xres/mmpaydoc/static/attachment/4ed679b5250e8ba231b90c2e40064b26/银行类型对照表.xlsx) | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +### 4.16收单对帐单下载 + +**应用场景:** + +商户可以通过该接口下载前一天的交易明细,进行核单或者数据分析筛选。比如掉单、系统错误等导致商户侧和微信侧数据不一致,通过对账单核对后可校正支付状态。 + +--- + +❗**使用注意:** + +> - 对账单只能获取生产环境数据,测试环境测试数据无法获取。 +> - 有对账单下载需求的机构,请先联系利楚商务或者项目运营同事,开通机构号,并开启对账单下载功能,开通后第二天可发起下载。 +> - 接口中需要使用机构号和密钥,请联系运营同事指导获取。 +> - 只能下载“对账单下载”功能开启后的对账单,无法下载开启功能之前的对账单,开通当天也无法下载到账单。 +> - 未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账单中,跟原支付单订单号一致; +> - 接口不能下载当天的对账单,在次日9点启动生成前一天的对账单,建议商户10点后再获取;只能下载三个月以内的账单。 +> - 若页面显示内容包含“ The specified key does not exist. ”错误描述,并不是说密钥不对,可能是对账单开通当天并没有对账单文件,或者对账单还没生成(如:没到生成时间、前一天没有交易),或者拼接的签名串有不对。 +> - 目前只允许以**机构**为单位的对账单下载,从对账单中解析单个商户的对账单。 +> + +**下载地址** + +- 格式:`https://example.com/order/day/inst_no/key_sign/inst_no_day.txt` +- Method:`GET` + +请求路径中`example.com`只是个示例,`请联系对接人员获取真实域名(请勿使用支付接口或者商户接口域名)`。请求路径中除了`/`、`order`和`.txt`,其它全部是**变量名**,在实际请求中需要替换成**变量的值**,示例如下: + +> [https://example.com/order/20170208/00000001/a988b4b22559754ffe5c32e227872a7a/00000001_20170208.txt](https://example.com/order/20170208/00000001/a988b4b22559754ffe5c32e227872a7a/00000001_20170208.txt) +> + +--- + +**签名算法** + +``` +MD5加密,utf-8格式转小写,加密后得到key_sign的值,并替换url中的key_sign。 +String key_sign = MD5.encode(day=日期值&inst_no=机构号值&key=机构密钥值); +``` + +**签名参数:** + +| 参数名称 | 说明 | +| --- | --- | +| day | 日期,yyyyMMdd,例如:`20170208` | +| inst_no | 机构号 | +| key | 机构号对应的令牌 | + +**示例数据:** + +``` +852105399000001,34336428,2021-12-14 19:45:13,,1,0,0,1,1,6,1,343364289921621121419450800017,,2905925869105,154553154,2021-12-14,o12Tt4h_4jwghavcSYoN5VjLWNDE,0,3,0,1,1,0,微信小程序订单支付,,OTHERS,测试门店,1 +``` + +请求结果中,每一行表示一条交易记录,记录中各参数以`,`号分隔。各参数含义如下所示: + +``` +商户号,终端号,交易时间,退款完成时间,交易金额(分),手续费金额(分),退款金额(分),结余金额(分),支付方式,支付类型,交易状态,交易单号,退款原单号,终端流水号,渠道订单号,交易日期,用户标识,银行卡类型,附加数据,商家优惠金额(分),商家实收金额(分),用户实付金额(分),平台优惠金额(分),订单备注,自定义设备编号,支付银行标识,门店名称,通道类型 +``` + +**以下为参数解释:** + +| **参数名称** | **说明** | +| --- | --- | +| 支付方式 | 1微信 2支付宝 3银行卡 4 现金 5无卡支付 6qq钱包 7百度钱包 8京东钱包 10翼支付 11云闪付 12龙支付 16数字人民币 17招行支付 18微企付 19支付宝商转 20微信B2b | +| 交易金额 | 下单传入的订单金额,单位分 | +| 支付类型 | 1付款码支付(或银行卡刷卡),2扫码支付,3公众号支付,4wap支付, 5app支付,6小程序支付,7刷脸支付 | +| 交易状态 | 支付状态,支付成功1,已撤销4, 退款成功5 | +| 手续费 | 支付成功为正值 退款为负值,单位分 | +| 结余金额 | 到账金额:商家实收-手续费,单位分 | +| 银行卡类型 | 0储蓄卡,1信用卡 | +| 商家优惠优惠金额 | 订单金额-到账金额+手续费金额,单位分,特指商户出资的 | +| 用户实付金额 | 消费者实际支付金额,若无优惠,默认是订单金额;单位分; | +| 平台优惠优惠金额 | 平台活动补贴金额,支付宝红包,立减金,预充值类营销活动补贴金额,商家正常到账。单位分; | +| 订单备注 | 客户交易上送的订单order_body信息,未上传平台会有默认值 | +| 自定义设备编号 | 自定义设备编号device_no字段 | +| 支付银行标识 | 消费者交易的银行卡标识,如ICBC_DEBIT、PAB_DEBIT。微信官方提供:[银行类型对照表](https://gtimg.wechatpay.cn/resource/xres/mmpaydoc/static/attachment/4ed679b5250e8ba231b90c2e40064b26/银行类型对照表.xlsx) | +| 门店名称 | 交易门店名称 | +| 通道类型 | 通道类型, 1:利楚直连, 2:富友,42:易宝,43:国通,49:中投,其它值对应通道,可联系技术人员获取。 | + +### 4.17获取服务商公众号下openid + +**应用场景** + +商户没有自己的公众号,需要使用公众号支付时,使用该接口可以获取服务商公众号appid下的用户标识,并调用公众号支付接口 + +--- + +❗**注意:** + +> 该接口用于服务商模式的公众号支付,即4.3公众号支付接口不传appid,默认使用服务商appid时,4.3公众号支付接口中所需的open_id通过该接口获取。 +> + +**使用说明** + +- 该接口的key_sign参数生成规则为: `key_sign=md5(merchant_no=xxxxxx&redirect_uri=xxxxxx&terminal_no=xxxxxx&access_token=xxxxxx);` +- redirect_uri若有参数,需要在url地址后面+?+参数名+参数值(避免格式不对无法解析),若跳转时报错`403forbidden`,请提供收银台的具体URL(不包含GET参数)给对接人员**配置白名单**,否则将无法正常进入收银台 +- 请求授权的示例链接为: `https://xxxxxx/wx/jsapi/authAccessToken?merchant_no=xxxxxx&terminal_no=xxxxxx&redirect_uri=https%3A%2F%2Fwww.example.com%2Fpay.html%3Fa%3D123&key_sign=xxxxxx` +- 成功授权后回到收银台时的地址: `https://www.example.com/pay.html?openid=xxxxxxxxxxxxxxxxxxxx` + +**API请求** + +- URL:`/wx/jsapi/authAccessToken` +- Method:`GET` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_no | String | 8 | Y | 终端号 | +| redirect_uri | String | 255 | Y | 您的收银台的完整路径,并urlEncode(get请求拼接需要urlEncode,签名拼接不需要urlEncode),带参数则会原样返回 | +| pay_type | String | 3 | N | 支付方式,不传默认获取微信 `010` 微信 `110` 云闪付 `090` 抖音支付 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| openid | String | 64 | Y | 微信(云闪付)公众号用户唯一标识,成功授权后取得,用于微信支付JSAPI接口统一下单 | +| access_token | String | 512 | Y | access_token是公众号的全局唯一接口调用凭据 | + +### 4.18付款码查询 OPENID 接口 + +**应用场景** + +通过付款码查询用户标识后,使用标识在自有会员系统内查询会员信息,实现无感会员支付。 + +--- + +❗**注意:** + +- 通过授权码查询用户openid后,该授权码只能由此商户号发起扣款,直至授权码更新。 + +**Java-SDK工具** + +- client:SaobeiApiClient<**SaobeiAuthCodeOpenidRequest**, **SaobeiAuthCodeOpenidResponse**> client = new DefaultSaobeiApiClient<>(终端token密钥); +- 方法:`client.execute方法` +- 使用说明:[3.2 SDK使用说明](#title-node11) + +**API请求** + +- URL:`/pay/open/authcodetoopenid` +- Method:`POST` + +**请求参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| pay_ver | String | 3 | Y | 接口内业务逻辑兼容号,可用值`201` | +| pay_type | String | 3 | Y | 支付方式: `010` 微信, `020` 支付宝, `000` 自动识别 | +| service_id | String | 3 | Y | 接口类型,当前类型`080` | +| merchant_no | String | 15 | Y | 商户号 | +| terminal_id | String | 8 | Y | 终端号 | +| terminal_trace | String | 32 | Y | 终端流水号,填写商户系统的订单号 | +| terminal_time | String | 14 | Y | 终端发起时间,yyyyMMddHHmmss,全局统一时间格式 | +| auth_no | String | 128 | Y | 微信、支付宝等支付方式里的付款码(条形码或者二维码对应的数字) | +| sub_appid | String | 32 | N | 微信子商户appid(可返回appid下对应的用户标识),支付宝不需要传。 | +| sence_no | String | 128 | N | 支付宝条码解码时必填,用于标识这笔解码请求,且需要与付款码支付接口中的sence_no保持一致,否则支付时会提示需刷新条码 | +| attach | String | 128 | N | 附加数据,原样返回 | +| key_sign | String | 32 | Y | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | + +**响应参数** + +| 参数名称 | 类型 | 长度 | 必填 | 说明 | +| --- | --- | --- | --- | --- | +| return_code | String | 2 | Y | 响应码: `01` 成功 ,`02` 失败。 说明:先判断该字段,再判断result_code,若该字段返回02,无需再做其它操作。 | +| return_msg | String | 128 | Y | 返回信息提示,“查询成功”,“请求受限”等 | +| result_code | String | 2 | N | 业务结果: `01` 成功 `02` 失败 | +| pay_type | String | 3 | N | 支付方式, `010` 微信,`020` 支付宝 | +| merchant_name | String | 40 | N | 商户名称 | +| merchant_no | String | 15 | N | 商户号 | +| terminal_id | String | 8 | N | 终端号 | +| terminal_trace | String | 32 | N | 终端流水号,商户系统的订单号,扫呗系统原样返回 | +| terminal_time | String | 14 | N | 终端发起时间,yyyyMMddHHmmss,全局统一时间格式 | +| appid | String | 32 | N | 服务商的公众账号ID | +| sub_appid | String | 32 | N | 子商户的appid | +| openid | String | 128 | N | 用户在服务商appid下的唯一标识,或支付宝下的唯一标识user_id | +| sub_openid | String | 128 | N | 用户在子商户appid下的唯一标识 | +| attach | String | 128 | N | 附加数据,原样返回 | +| key_sign | String | 32 | N | 签名验证串《[2.5签名算法](#title-node6)》 [签名测试页](http://test2.lcsw.cn:8117/demo/index1.html) | diff --git a/docs/联合收单接口文档/04-代理商维度接入-这里可点.md b/docs/联合收单接口文档/04-代理商维度接入-这里可点.md new file mode 100644 index 0000000..11a1c94 --- /dev/null +++ b/docs/联合收单接口文档/04-代理商维度接入-这里可点.md @@ -0,0 +1,150 @@ +# 代理商维度接入 <-这里可点 + +> 来源: + +## 接入指南(须知) + +**!注意:【商户交易】文档内接口为独立内容,无需参考此接入指南,按照【商户交易】文档描述对接即可** + +## 1.1 参数格式与调用方式 + +(1)接口传输的所有参数使用 UTF-8 编码格式,包括签名。接口以 https的POST方式进行调用。 + +(2)Content-Type为application/json + +(3)域名: + +测试环境:[https://t-uts.lepass.cn](http://t-uts.lepass.cn) + +生产环境:[https://uts.leshuazf.com](https://uts.leshuazf.com) + +## 1.2 报文结构 + +**请求报文** + +请求报文由一级服务商编号、当前代理商编号、版本号、请求流程号、签名串、验签方式、报文主体7个参数组成。说明如下: + +**注意: ****M:must,必须;** + +**C:condition,条件必填;** + +**O:option,可选;** + +| **参数名称** | **类型** | **长度限制** | **是否必输** | **说明** | +| --- | --- | --- | --- | --- | +| agentId | String | 无 | M | 服务商编号,由乐刷分配的接入方唯一标识,明文传输。 | +| currentAgentId | String | 无 | M | 当前代理商编号(操作来源) | +| version | String | 无 | O | 目前固定值1.0 | +| reqSerialNo | String | 无 | O | 请求流水号(yyyyMMddHHmmssSSSXXXXX,其中 XXXXX为5位顺序号,禁止使用UUID等无意义数据) | +| sign | String | 无 | M | 签名串 | +| algorithm | boolean | 无 | O | 默认true-国密验签,false-MD5验签 | +| data | Object | 无 | M | 业务数据 | + +> 💡 注意,请求列表时,每页最多请求50条 +> + +**返回报文** + +返回报文由error_code、error_msg、count、业务数据报文主体4个参数组成。说明如下: + +| **参数名称** | **类型** | **长度限制** | **是否必输** | **说明** | +| --- | --- | --- | --- | --- | +| error_code | String | 无 | M | 业务响应码 0-成功 | +| error_msg | String | 无 | O | 错误信息 | +| count | long | 无 | O | 记录总数 | +| data | Object | 无 | O | 业务数据 | + +## 1.3 数据签名 + +签名算法(sign)如下: + +**(1)国密验签:** + +**sign=SMUtil**.**encryptBySM3WithSalt(渠道商固定key值, ****JSON.toJSONString****(data))** + +例: key=XXXXXXXXXXXXXXXXXX,请求报文中,data={"merchantId":"0123456789"} + +sign=SMUtil.encryptBySM3WithSalt("XXXXXXXXXXXXXXXXXX", "{"merchantId":"0123456789"}") + +SMUtil工具类见文末 + +**(2)MD5验签:** + +**sign= md5(渠道商固定key值+****JSON.toJSONString****(data)).toUpperCase())** + +例: 请求报文中,data={"merchantId":"0123456789"} + +待签名串为: XXXXXXXXXXXXXXXXXX{"merchantId":"0123456789"} + +MD5后转大写: A4A5BF63CADF23F4AA78A3D642B75B8E ​ + +> 💡 注意,使用JSON.toJSONString的目的是将data转化成内容为ascii码排序键值对的字符串,例如{"a":{"d":"D","e":"E"},"b":"B","c":"C"} +> +> 💡 fastjson版本需为1.2.27或更高版本,如果单独使用JSON.toJSONString无法实现排序效果,可添加参数MapSortField,例如:JSON.toJSONString(data, SerializerFeature.MapSortField),如果开发语言非java,也可手动拼接再转字符串 +> +> 💡 加签时data中的字段可以少传,不能多传,并且类型需与文档说明完全一致,例如手机号虽为全数字,但为String类型 +> + +## 签名工具类 + +**验签工具类**SignUtil,注意:此工具类不适用【商户交易】接口 + +```java +package test; + +import cn.hutool.core.codec.Base64; +import cn.hutool.crypto.digest.MD5; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import org.bouncycastle.crypto.digests.SM3Digest; +import org.bouncycastle.crypto.macs.HMac; +import org.bouncycastle.crypto.params.KeyParameter; + +public class SignUtil { + + + public static void main(String[] args) { + // 渠道商固定key值 + String key = "ZDJMY2EYOTETNDDJMI00YZAZLWIYNMETMZZLNDEZZTYXMJLM"; + + // 业务数据 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("merchantId", "3131014839"); + jsonObject.put("currentAgentId", "315605362"); + + String sm3Sign = "1rONut2RbElyf949MbtoohlWqtjFTeVzmgJs88kC2P0="; + String realSm3Sign = SM3Encrypt(key, JSON.toJSONString(jsonObject, SerializerFeature.MapSortField)); + System.out.println("国密验签结果:" + sm3Sign.equals(realSm3Sign) + ",真实sign:" + realSm3Sign + ",传入sign:" + sm3Sign); + + String md5Sign = "E5FACB67B9904FC21F2D60325A3F5034"; + String realMd5Sign = MD5Encrypt(key, JSON.toJSONString(jsonObject, SerializerFeature.MapSortField)); + System.out.println("MD5验签结果:" + md5Sign.equals(realMd5Sign) + ",真实sign:" + realMd5Sign + ",传入sign:" + md5Sign); + } + + // 国密验签,推荐使用 + public static String SM3Encrypt(String key, String srcData) { + System.out.println("SM3Encrypt,待加密数据:" + srcData); + return Base64.encode(hmac(key.getBytes(), srcData.getBytes())); + } + + public static byte[] hmac(byte[] key, byte[] srcData) { + KeyParameter keyParameter = new KeyParameter(key); + SM3Digest digest = new SM3Digest(); + HMac mac = new HMac(digest); + mac.init(keyParameter); + mac.update(srcData, 0, srcData.length); + byte[] result = new byte[mac.getMacSize()]; + mac.doFinal(result, 0); + return result; + } + + // MD5验签 + public static String MD5Encrypt(String key, String srcData) { + System.out.println("MD5Encrypt,待加密数据:" + srcData); + return MD5.create().digestHex(key + srcData).toUpperCase(); + } + +} +``` diff --git a/docs/联合收单接口文档/05-基础接口.md b/docs/联合收单接口文档/05-基础接口.md new file mode 100644 index 0000000..91c3a23 --- /dev/null +++ b/docs/联合收单接口文档/05-基础接口.md @@ -0,0 +1,457 @@ +# 基础接口 + +> 来源: + +### 上传图片 + +通过此接口上传商户的活体图片。 + +> - **URL**:`/open-api/common/uploadPic` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| `ext` | String | M | 扩展名,限制jpg/png/jpeg | +| `picData` | String | M | base64编码的图片数据,2M以内 | + +> 💡 注意,目前只支持jpg、jpeg、png格式的图片 +> + +#### 请求示例 + +```json +{ + "sign": "123456789abcde", + "agentId": "1234567", + "data": { + "ext": "jpg", + "picData": "/9j/4QkDRXhpZgAATU0AKgBBBBg……" + } +} +``` + +#### 返回值 + +| 参数 | 类型 | 说明 | +| --- | --- | --- | +| `path` | String | 图片路径 | + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "path": "picture/M00/07/5E/rBQhymPXhGCATiPIHNGomYn0Pz3215.jpg" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 图片格式错误。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "请上传jpg/png/jpeg文件", + "count": 0, + "data": null +} +``` + +### 获取行业编码 + +通过此接口获取行业编码,按层级、编码获取。 + +> - **URL**:`/open-api/mcc/mccList` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| level | Integer | M | 行业层级,1:大类,2:子类,3:细类 | +| fatherCode | String | O | 父级行业编码 | +| mccCode | String | O | 行业编码 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| data | List | M | data为list,故在此特别列出 | +| mccCode | Integer | M | 行业编码 | +| mccTxt | Integer | M | 行业名称 | +| fatherCode | Integer | O | 父级行业编码 | +| fatherTxt | Integer | O | 父级行业名称 | +| subMcc | List | O | 子行业列表,结构同外部 | + +#### 请求示例 + +```json +{ + "sign": "8IXdaoFNBV6NbVDSngPlvItD4//0yYcxmkfdyCDnH5M=", + "agentId": "1923721", + "currentAgentId": "1923721", + "data": { + "level": 1, + "fatherCode": "", + "mccCode": "" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": [ + { + "mccCode": "A001", + "mccTxt": "住宿、餐饮和休闲娱乐业", + "fatherCode": "1", + "fatherTxt": null, + "subMcc": null + } + ] +} +``` + +#### 错误响应 + +> **条件**:参数错误 。 +> +> 状态码:`1 失败` +> +> 响应示例: +> + +```json +{ + "error_code": "400", + "error_msg": "参数错误", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +### 获取地区编码 + +通过此接口获取地区编码,按层级、编码获取。 + +> **不支持跨层级查询**,areaLevel=2 | 3 时,必须传递其他入参(根据需要任选)。 +> + +> - **URL**:`/open-api/base/areaCode` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| areaLevel | String | M | 地区层级,1:省,2:市,3:区 | +| parentCode | String | O | 父级地区编码 | +| areaCode | String | O | 地区编码 | +| areaName | String | O | 地区名称 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| data | List | M | data为list,故在此特别列出 | +| areaLevel | String | M | 地区层级,1:省,2:市,3:区 | +| parentCode | String | M | 父级地区编码 | +| areaCode | String | M | 地区编码 | +| areaName | String | M | 地区名称 | + +#### 请求示例 + +```json +{ + "sign": "WJV87eXjlFHe0rrrwtcdfaYHsOH1MxKRglSbqDpuAAg=", + "agentId": "1923721", + "currentAgentId": "1923721", + "data": { + "areaLevel": 1, + "parentCode": "", + "areaCode": "", + "areaName": "" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": [ + { + "id": 105311, + "areaLevel": "1", + "parentCode": "0", + "areaCode": "130000", + "areaName": "河北省" + }, + { + "id": 6657, + "areaLevel": "1", + "parentCode": "0", + "areaCode": "140000", + "areaName": "山西省" + } + ] +} +``` + +#### 错误响应 + +> **条件**:参数错误 。 +> +> 状态码:`1 失败` +> +> 响应示例: +> + +```json +{ + "error_code": "400", + "error_msg": "参数错误", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +### 获取银行列表 + +通过此接口获取银行列表。 + +> - **URL**:`/open-api/base/bankList` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| bankName | String | O | 银行名称 | +| bankCode | String | O | 银行编码 | +| pageNo | Integer | M | 页数 | +| pageSize | Integer | M | 每页数量 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| data | List | M | data为list,故在此特别列出 | +| name | String | M | 银行名称 | +| code | String | M | 银行编码 | + +#### 请求示例 + +```json +{ + "sign": "xqwUm+EQCBflHSZJhsRRmxLSb8VNivqXAJhRFOMGo84=", + "agentId": "1923721", + "currentAgentId": "1923721", + "data": { + "bankName": "", + "bankCode": "", + "pageNo": 1, + "pageSize": 5 + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 4480, + "data": [ + { + "name": "中国工商银行", + "code": "C1010211000012" + }, + { + "name": "测试银行123", + "code": "test43511" + }, + { + "name": "测试银行789", + "code": "test987" + }, + { + "name": "交通银行", + "code": "C1030131001288" + }, + { + "name": "小琦", + "code": "C1030131001290" + } + ] +} +``` + +#### 错误响应 + +> **条件**:参数错误 。 +> +> 状态码:`1 失败` +> +> 响应示例: +> + +```json +{ + "error_code": "400", + "error_msg": "参数错误", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +### 获取银行网点列表 + +通过此接口获取行业编码,按层级、编码获取。 + +> - **URL**:`/open-api/base/branchList` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| provinceCode | String | M | 省份编码 | +| cityCode | String | M | 城市编码 | +| bankCode | String | M | 银行编码 | +| bankSiteName | String | O | 网点名称 | +| pageNo | Integer | M | 页数 | +| pageSize | Integer | M | 每页数量 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| data | List | M | data为list,故在此特别列出 | +| name | String | M | 网点名称(对应bankSite) | +| code | String | M | 网点编码(对应unionpayCode) | + +#### 请求示例 + +```json +{ + "sign": "Q/AhuHPQYEKjWrlBeS98KJQtNdxg6iA0j5ADmpuenGM=", + "agentId": "1923721", + "currentAgentId": "1923721", + "data": { + "provinceCode": "130000", + "cityCode": "130100", + "bankCode": "C1010211000012", + "bankSiteName": "", + "pageNo": 1, + "pageSize": 10 + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 73, + "data": [ + { + "name": "中国工商银行河北省分行营业部业务处理中心", + "code": "102121000029" + }, + { + "name": "中国工商银行股份有限公司石家庄东风支行", + "code": "102121000037" + } + ] +} +``` + +#### 错误响应 + +> **条件**:参数错误 。 +> +> 状态码:`1 失败` +> +> 响应示例: +> + +```json +{ + "error_code": "400", + "error_msg": "参数错误", + "count": 0, + "data": null +} +``` + +### diff --git a/docs/联合收单接口文档/06-商户进件.md b/docs/联合收单接口文档/06-商户进件.md new file mode 100644 index 0000000..face2cc --- /dev/null +++ b/docs/联合收单接口文档/06-商户进件.md @@ -0,0 +1,3002 @@ +# 商户进件 + +> 来源: + +## 商户信息 + +### 获取证件类型列表 + +通过此接口获取身份证类型列表。 + +> - **URL**:`/open-api/agentManager/getIdCardTypes` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| firstType | String | O | 证件类型大类 1-商户个人证件类型 2-通道个人证件类型;不填时默认1 | +| secondType | String | O | 证件类型小类 (对应运营平台配置页面的字段来源);不填时默认1 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| type | String | M | 证件类型 | +| name | String | M | 证件名称 | + +#### 请求示例 + +```json +{ + "sign": "JsY0MZGpJN+s71xZmMfjU3cbUQN/JUycvcsZJ4fJeJ4=", + "agentId": "2888568", + "currentAgentId": "2888568" + "data": { + "firstType": "", + "secondType ": "" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": [ + { + "name": "身份证", + "type": "1" + }, + { + "name": "护照", + "type": "6" + }, + { + "name": "港澳居民来往内地通行证(回乡证)", + "type": "10" + }, + { + "name": "台湾同胞来往内地通行证(台胞证)", + "type": "11" + }, + { + "name": "外国人永久居留身份证", + "type": "12" + }, + { + "name": "港澳居民居住证", + "type": "13" + }, + { + "name": "台湾居民居住证", + "type": "14" + }, + { + "name": "执行事务合伙人", + "type": "15" + }, + { + "name": "其他法定证件", + "type": "9" + } + ] +} +``` + +#### 注意事项 + +> 💡 注意, +> +> 1.firstType、secondType为预留字段,默认直接传空字符串即可。 +> +> 2.获取证件类型的逻辑由写死的枚举改为调该接口获取最新的证件类型。 +> +> 3.出于系统兼容问题性的考虑,文末补充全量枚举,后续会陆续下掉旧的枚举。 +> + +### 商户注册 + +通过此接口注册商户。 + +> - **URL**:`/open-api/merchant/register` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| **affiliateHeadMerchant** | boolean | **M** | 是否使用总店商户信息进行交易(**必传否则会导致异常**) | +| **channelTypes** | List | C | 注册分店商户时,分店挂靠的交易类型:1-微信 2-支付宝 3-银联扫码,affiliateHeadMerchant为true时必传 | +| **userRegistrationInfo** | Object | M | 注册信息 | +| userName | String | M | 用户名, 8~20位,字母或数字 | +| password | String | C | 密码,注册分店时必填,为保密性需上送MD5加密后的值,总店会生成默认密码,具体生成规则请咨询客服,密码会在注册成功后通过短信发送到注册手机号 | +| phone | String | M | 手机号 | +| **legalPerson** | Object | M | 法人信息 | +| legalPersonName | String | M | 法人姓名,长度30位以内 | +| certificateType | Integer | M | 证件类型,调获取证件类型列表接口 | +| certificateNo | String | M | 身份证号 | +| certificateStartDate | String | M | 身份证有效期开始日期,格式如2023-01-01 | +| certificateEndDate | String | M | 身份证有效期结束日期,格式如2023-01-01,长期则填"长期" | +| certificatesFrontPic | String | M | 身份证人像面照片地址 | +| certificatesBackPic | String | M | 身份证国徽面照片地址 | +| idcardHandPic | String | O | 手持身份证照片地址 | +| **businessLicense** | Object | M | 营业执照信息 | +| businessLicenseNo | String | C | 营业执照编号,15位或18位 | +| businessLicenseName | String | C | 营业执照名称**merchantType!=1时必填** | +| businessLicenseStartDate | String | C | 营业执照有效期开始日期,格式如2023-01-01 | +| businessLicenseEndDate | String | C | 营业执照有效期结束日期,格式如2023-01-01,长期则填"长期" | +| businessCreditLicensePic | String | C | 营业执照照片 | +| **merchantInfo** | Object | M | 商户信息 | +| merchantType | Integer | M | 商户类型,1:个人(小微),2:个体,3:企业 | +| merchantName | String | M | 门店名称(**商户简称**),2-20位,需包含汉字 | +| mccCode | String | M | 所属行业mcc码 | +| provinceNo | String | M | 省份代码 | +| provinceName | String | M | 省份名称 | +| cityNo | String | M | 城市代码 | +| cityName | String | M | 城市名称 | +| areaNo | String | M | 地区代码 | +| areaName | String | M | 地区名称 | +| address | String | M | 详细地址(机具布放地址-无需包含省市区),127位以内 | +| applicant | String | M | 联系人 | +| contactPhoneNo | String | M | 联系电话 | +| **settleAccountInfo** | Object | M | 结算信息 | +| bankCardAccountType | Integer | M | 结算账户类型,1:私人账户 2:单位账户 | +| settleType | Integer | M | 结算方式,0:非法人结算 1:法人结算 | +| bankCardAccount | String | M | 银行账号 | +| bankCode | String | M | 银行编码 | +| bankProvince | String | M | 开户银行省份编码 | +| bankProvinceName | String | M | 开户银行省份名称 | +| bankCity | String | M | 开户银行城市编码 | +| bankCityName | String | M | 开户银行城市名称 | +| bankSite | String | C | 开户行网点名称 | +| bankName | String | M | 银行名称 | +| unionpayCode | String | C | 开户支行联行号(网点编码) | +| bankCardPhone | String | M | 银行卡预留手机号 | +| bankCardHolder | String | M | 开户名 | +| bankCardPic | String | M | 银行卡照片 | +| nonLegalPersonCertificateType | Integer | C | 非法人证件类型,调获取证件类型列表接口 | +| nonLegalPersonCertificateNo | String | C | 非法人证件号 | +| nonLegalPersonCertificateStartDate | String | C | 非法人证件有效开始日期,格式如2023-01-01 | +| nonLegalPersonCertificateEndDate | String | C | 非法人证件有效截止日期,格式如2023-01-01,长期则填"长期" | +| nonLegalPersonCertificateFrontPic | String | C | 非法人身份证正面照片地址 | +| nonLegalPersonCertificateBackPic | String | C | 非法人身份证背面照片地址 | +| nonLegalPersonSettleAuthorizationLetterPic | String | C | 非法人结算授权函 | +| **shopInfo** | Object | M | 店铺信息 | +| shopType | Integer | M | 店铺类型,0:分店,1:总店 | +| headShopMerchantId | String | C | 总店商户号 | +| shopInsidePlacePic | String | M | 店内照片 | +| shopGatePic | String | M | 门头照片 | +| cashierDeskPic | String | M | 收银台照片 | +| managerWithMerchantDoorPhoto | String | O | 经理与门头合照 | +| **extraInfoDto** | Object | M | 其他信息 **必传**如子字段均无需传入,则传空json:`{}` | +| companyChildType | Integer | O | 企业类型商户子类型,非企业商户无效;1:普通,2:事业单位,3:社会团体 | +| contractorLicenseName | String | O | 承包商营业执照名称 | +| payBusinessType | Integer | O | 商户分类;0:扫码支付线下;1:扫码支付线上;2:扫码支付保险;3:扫码支付公缴;4:扫码支付公益;5:高校食堂 | +| contractorMerchantId | String | O | 二次分包商户进件时,承包商商户id | +| settleToCollegeAccount | String | O | 合打款至学校公账证明图片地址 | +| schoolLicense | String | O | 办学许可证图片地址 | +| managerWithMerchantDoorPhoto | String | O | 客户经理与商户门头合照 | +| cooperationAgreement | String | O | 合作协议/证明图片地址 | +| contunryWebsiteScreenshot | String | O | 国家事业单位网站截图图片地址 | +| otherPics | JSON | O | 其他照片,包括:加盟店授权函照片、结算卡信息转账成功照片,结算卡身份证和结算卡同框照片、法人手持结算账户确认书照片以key:value形式传入,如{"otherPic1":"picture/M00/00/F1/rBQhyV12URaAFDZbAANxMe0iHCQ508.jpg","otherPic2":"09.jpg"} | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | + +#### 请求示例 + +```json +{ + "sign": "95daxbC1PUFAyj7kVV+VsT4hDoDsnqVqdHRNdZmfhJM=", + "agentId": "1923721", + "currentagentId": "1923721", + "data": { + "affiliateHeadMerchant": false, + "businessLicense": { + "businessCreditLicensePic": "", + "businessLicenseEndDate": "", + "businessLicenseName": "", + "businessLicenseNo": "", + "businessLicenseStartDate": "" + }, + "extraInfoDto": { + "companyChildType": 0, + "contractorLicenseName": "", + "contractorMerchantId": "", + "contunryWebsiteScreenshot": "", + "cooperationAgreement": "", + "managerWithMerchantDoorPhoto": "", + "otherPics": {}, + "payBusinessType": 0, + "schoolLicense": "" + }, + "legalPerson": { + "certificateEndDate": "2025-02-20", + "certificateNo": "36**************35", + "certificateStartDate": "2015-02-20", + "certificateType": 1, + "certificatesBackPic": "picture/M00/00/F1/rBQhyV12URaAFDZbAANxMe0iHCQ508.jpg", + "certificatesFrontPic": "picture/M00/00/F1/rBQhy112URWAbRYtAAMXla8KH6s276.jpg", + "idcardHandPic": "", + "legalPersonName": "吴某某" + }, + "merchantInfo": { + "address": "度**店", + "agentId": "62551", + "applicant": "吴某某", + "areaNo": "110101", + "cityNo": "110100", + "contactPhoneNo": "140****0101", + "mccCode": "5311", + "merchantName": "小米手机5", + "merchantType": 1, + "provinceNo": "110000" + }, + "settleAccountInfo": { + "bankCardAccount": "123*************5000", + "bankCardAccountType": 1, + "bankCardHolder": "吴某某", + "bankCardPhone": "123****7894", + "bankCardPic": "picture/M00/00/F1/rBQhyl12UReARV_AAANZxMkhTvY248.jpg", + "bankCity": "110100", + "bankCode": "C1010211000012", + "bankProvince": "110000", + "bankSite": "", + "nonLegalPersonCertificateBackPic": "", + "nonLegalPersonCertificateEndDate": "", + "nonLegalPersonCertificateFrontPic": "", + "nonLegalPersonCertificateNo": "", + "nonLegalPersonCertificateStartDate": "", + "nonLegalPersonCertificateType": 0, + "nonLegalPersonSettleAuthorizationLetterPic": "", + "settleType": 1, + "unionpayCode": "" + }, + "shopInfo": { + "cashierDeskPic": "picture/M00/00/F1/rBQhyl12UReARV_AAANZxMkhTvY248.jpg", + "headShopMerchantId": "", + "shopGatePic": "picture/M00/00/F1/rBQhyl12UReARV_AAANZxMkhTvY248.jpg", + "shopInsidePlacePic": "picture/M00/00/F1/rBQhyl12UReARV_AAANZxMkhTvY248.jpg", + "shopType": 1 + }, + "userRegistrationInfo": { + "password": "123", + "phone": "123****0022", + "registerTime": "2023-02-08 14:00:00", + "userName": "tristanwu020805" + } + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "merchantId": "1931013732" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 手机号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "手机号不能为空", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +> 💡 注意,实际请求中数据需明文传输,无需脱敏 +> + +### 获取商户信息 + +通过此接口获取商户的详细信息。 + +> - **URL**:`/open-api/merchant/getMerchantDetail` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| **merchantBaseInfo** | Object | M | 商户基本信息 | +| merchantId | String | M | 商户编号 | +| merchantName | String | M | 门店名称 | +| shopType | Integer | M | 店铺类型 | +| shopNo | String | M | 店铺编号 | +| shopState | Integer | M | 店铺状态 | +| shopManagerName | String | M | 店铺管理者名称 | +| status | Integer | M | 商户状态,见文末常用枚举 | +| mobile | String | M | 手机号码 | +| userName | String | M | 用户名 | +| noPassReason | String | C | 审核不通过原因 | +| activeTime | String | O | 激活时间 | +| subState | Integer | O | 子状态 | +| settleState | Integer | M | 结算方式:0-t0, 1-t1, 2-22点分时结算 | +| createDate | String | M | 注册日期 | +| headMerchantId | String | M | 总店编号 | +| headMerchantName | String | M | 总店名称 | +| agentId | String | M | 直属代理商编号 | +| **identityInfo** | Object | M | 商户身份信息 | +| merchantType | Integer | M | 商户性质:1-个人(小微),2-个体,3-企业 | +| companyChildType | Integer | M | 企业子类型 | +| certificateType | Integer | M | 证件类型,见文末枚举 | +| idCardNo | String | M | 证件号码 | +| idCardName | String | M | 证件号码名称 | +| idCardStartDate | String | M | 证件生效开始日期,格式如2023-01-01 | +| idCardEndDate | String | M | 证件生效截止日期,格式如2023-01-01,长期则填"长期" | +| merchantShortName | String | M | 门店名称 | +| mccCode | String | M | 所属行业码 | +| mccCodeValue | String | M | 所属行业名称 | +| businessLicenseNo | String | C | 营业执照编号 | +| businessLicenseName | String | C | 营业执照名称 | +| businessLicenseStartDate | String | C | 营业执照生效开始日期,格式如2023-01-01 | +| businessLicenseEndDate | String | C | 营业执照生效截止日期 长期:(9999-12-31/长期) | +| businessLicenseLegalName | String | C | 营业执照法人姓名 | +| provinceNo | String | M | 省份编号 | +| provinceName | String | M | 省份名称 | +| cityNo | String | M | 城市编号 | +| cityName | String | M | 城市名称 | +| areaNo | String | M | 县区编号 | +| areaName | String | M | 县区名称 | +| address | String | M | 详细地址 | +| **settlementInfo** | Object | M | 商户结算信息 | +| settleType | Integer | M | 收银结算方式(0-打款至法人,1-打款至非法人,2-打款至对公账户) | +| settleTo | Integer | M | 结算对象,0:结算给自己,1:结算给总店 | +| bankCardAccountType | Integer | M | 结算账户类型 1个人账户 2公司账户 | +| settleMode | Integer | M | 入账模式,0:多笔入账,1:单笔入账 | +| bankCardAccount | String | M | 银行卡账号 | +| bankCardHolder | String | M | 持卡人姓名 | +| bankCode | String | M | 银行编码 | +| bankName | String | M | 银行名称 | +| bankProvince | String | M | 银行所在省编码 | +| bankProvinceName | String | M | 银行所在省名称 | +| bankCity | String | M | 银行所在市编码 | +| bankCityName | String | M | 银行所在市名称 | +| bankSite | String | C | 银行网点名称 | +| unionpayCode | String | C | 银行联行号(网点编码) | +| nonLegalPersonCertificateType | Integer | C | 非法人证件类型 | +| nonLegalPersonCertificateNo | String | C | 非法人证件号码 | +| nonLegalPersonCertificateStartDate | String | C | 非法人证件生效开始时间,格式如2023-01-01 | +| nonLegalPersonCertificateEndDate | String | C | 非法人证件生效截止时间,格式如2023-01-01,长期则填"长期" | +| **merchantQuota** | Object | M | 商户额度信息 | +| **wxAlipayScan** | Object | M | 微信支付宝额度 | +| wxOnceLimit | Long | M | 微信单次限额(分) | +| wxDailyLimit | Long | M | 微信单日限额(分) | +| wxMonthlyLimit | Long | M | 微信单月限额(分) | +| alipayOnceLimit | Long | M | 支付宝单次限额(分) | +| alipayDailyLimit | Long | M | 支付宝单日限额(分) | +| alipayMonthlyLimit | Long | M | 支付宝单月限额(分) | +| **unionScan** | Object | M | 银联扫码额度 | +| userUploadOnceAmountLimit | Long | M | T1单笔限额(被扫)(分) | +| userUploadDayAmountLimit | Long | M | T1单日限额(被扫)(分) | +| userUploadDayVolumeLimit | Long | M | T1单日交易笔数(被扫)(笔) | +| userUploadMonthAmountLimit | Long | M | T1单月限额(被扫)(分) | +| **merchantPic** | Object | M | 商户图片信息 | +| idcardFront | String | M | 身份证正面 | +| idcardBack | String | M | 身份证反面 | +| bankcardFront | String | M | 银行卡正面 | +| businessLicense | String | M | 营业执照 | +| nonLegIdcardFront | String | M | 非法人-身份证正面 | +| nonLegIdcardBack | String | M | 非法人-身份证反面 | +| nonLegSettleAuth | String | M | 非法人-结算授权书 | +| businessInside | String | M | 店内照 | +| doorPhoto | String | M | 门头照 | +| cashierDesk | String | M | 收银台照片 | +| idcardHand | String | O | 手持身份证 | +| leaseContract | String | O | 租赁合同 | +| protocolPage | String | O | 商户协议 | +| organizationCode | String | O | 组织机构代码 | +| taxRegCert | String | O | 税务登记 | +| personalTaxProve | String | O | 个人完税证明 | +| authorizeLetter | String | O | 加盟店授权函 | +| settleCardTransferSuccess | String | O | 结算卡信息转账成功照片 | +| idcardAndSettleCard | String | O | 结算卡身份证和结算卡同框照片 | +| otherPic1 | String | O | 其他照片1 | +| otherPic2 | String | O | 其他照片2 | +| picState | Integer | M | 商户图片信息是否完善 1:完善,0:未完善 | +| bankActivityState | Integer | M | 银行活动报名状态,0:未报名,1:已报名 | + +#### 请求示例 + +```json +{ + "sign": "JsY0MZGpJN+s71xZmMfjU3cbUQN/JUycvcsZJ4fJeJ4=", + "agentId": "2888568", + "currentAgentId": "2888568" + "data": { + "merchantId": "1811015720" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "merchantId": "3131014839", + "merchantBaseInfo": { + "merchantId": "3131014839", + "merchantName": "深圳市宁杰科技有限公司", + "shopType": 1, + "shopNo": "3131014839(0)", + "shopState": 0, + "shopManagerName": "戴宁", + "status": 1, + "mobile": "173****1001", + "userName": "Iverson0025", + "noPassReason": "1.对私非法人结算,待人工核实
", + "activeTime": null, + "subState": null, + "settleState": 1, + "createDate": "2022-04-19 16:26:50", + "headMerchantId": "3131014839", + "headMerchantName": "孤独荒迪", + "agentId": "315605362" + }, + "identityInfo": { + "merchantType": 3, + "companyChildType": 0, + "certificateType": 1, + "idCardNo": "450***********1155", + "idCardName": "戴宁", + "idCardStartDate": "2018-11-15", + "idCardEndDate": "2038-11-15", + "merchantShortName": "孤独荒迪", + "mccCode": "7211", + "mccCodeValue": "自助洗衣服务", + "businessLicenseNo": "91440300MA5GML34XU", + "businessLicenseName": "深圳市宁杰科技有限公司", + "businessLicenseStartDate": "2021-03-10", + "businessLicenseEndDate": "长期", + "businessLicenseLegalName": "戴宁", + "provinceNo": "440000", + "provinceName": "广东省", + "cityNo": "440300", + "cityName": "深圳市", + "areaNo": "440305", + "areaName": "南山区", + "address": "说个*****一碗粥" + }, + "settlementInfo": { + "settleType": 1, + "settleTo": 1, + "bankCardAccountType": 1, + "settleMode": 0, + "bankCardAccount": "622************6139", + "bankCardHolder": "戴宁", + "bankCode": "C1031633000292", + "bankName": "浙商银行", + "bankProvince": "440000", + "bankProvinceName": "广东省", + "bankCity": "440300", + "bankCityName": "深圳市", + "bankSite": "浙商银行股份有限公司深圳高新支行", + "unionpayCode": "316584000097", + "nonLegalPersonCertificateType": 1, + "nonLegalPersonCertificateNo": "450***********1155", + "nonLegalPersonCertificateStartDate": "2018-11-15", + "nonLegalPersonCertificateEndDate": "2038-11-15" + }, + "merchantQuota": { + "wxAlipayScan": { + "wxOnceLimit": 5000000, + "wxDailyLimit": 100000000, + "wxMonthlyLimit": 2000000000, + "alipayOnceLimit": 5000000, + "alipayDailyLimit": 100000000, + "alipayMonthlyLimit": 2000000000 + }, + "unionScan": { + "userUploadOnceAmountLimit": 3200, + "userUploadDayAmountLimit": 3200, + "userUploadDayVolumeLimit": 2, + "userUploadMonthAmountLimit": 400 + } + }, + "merchantPic": { + "idcardFront": "picture2/M00/01/E9/CmAiA2Jecl-AfB1jAA_jVzY-djc337.jpg", + "idcardBack": "picture2/M00/00/F6/CmAiBGJecm-AYH2FAA9wMM3LlPQ070.jpg", + "bankcardFront": "picture2/M00/00/F6/CmAiBGJecwaAYmM_AAW2tw6C_0A633.jpg", + "businessLicense": "picture2/M00/01/E9/CmAiA2JecoSAEIZyAAaeGFZc6TM638.jpg", + "nonLegIdcardFront": "picture2/M00/00/F6/CmAiBGJecuqAP8FVAA_jN34s2zk428.jpg", + "nonLegIdcardBack": "picture2/M00/01/E9/CmAiA2JecvqAbz2WAA9wUBg_clw711.jpg", + "nonLegSettleAuth": "picture2/M00/01/E9/CmAiA2Jecy6AQPXJAAYuVSyPCzc160.jpg", + "businessInside": "picture2/M00/01/E9/CmAiA2Jec0iAYie0AAO4kG7voSA197.jpg", + "doorPhoto": "picture2/M00/00/F6/CmAiBGJec0-ATG3yAAXxUY-GVJE373.jpg", + "cashierDesk": "picture2/M00/01/E9/CmAiA2Jec1eAL9sMAAO4kGsbxYg286.jpg", + "idcardHand": null, + "leaseContract": null, + "protocolPage": null, + "organizationCode": null, + "taxRegCert": null, + "personalTaxProve": null, + "authorizeLetter": null, + "settleCardTransferSuccess": null, + "idcardAndSettleCard": null, + "otherPic1": null, + "otherPic2": null + }, + "picState": 1, + "bankActivityState": 1 + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +#### 注意事项​ + +> 💡 注意,返回的身份证号等敏感数据已做脱敏处理 +> + +### 更新商户信息 + +通过此接口更新商户信息。 + +> - **URL**:`/open-api/merchant/updateMerchantInfo` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| operateType | Integer | M | 操作类型,0:修改提交审核,1:小微升级提交审核 | +| **legalPerson** | Object | M | 法人信息 | +| legalPersonName | String | M | 法人姓名 | +| certificateType | Integer | M | 证件类型,调获取证件类型列表接口 | +| certificateNo | String | M | 身份证号 | +| certificateStartDate | String | M | 身份证有效期开始日期,格式如2023-01-01 | +| certificateEndDate | String | M | 身份证有效期结束日期,格式如2023-01-01,长期则填"长期" | +| certificatesFrontPic | String | M | 身份证人像面照片地址 | +| certificatesBackPic | String | M | 身份证国徽面照片地址 | +| idcardHandPic | String | O | 手持身份证照片地址 | +| **businessLicense** | Object | M | 营业执照信息 | +| businessLicenseNo | String | C | 营业执照编号 | +| businessLicenseName | String | C | 营业执照名称 | +| businessLicenseStartDate | String | C | 营业执照有效期开始日期,格式如2023-01-01 | +| businessLicenseEndDate | String | C | 营业执照有效期结束日期,格式如2023-01-01,长期则填"长期" | +| businessCreditLicensePic | String | C | 营业执照照片 | +| **merchantInfo** | Object | M | 商户信息 | +| merchantType | Integer | M | 商户类型,1:个人,2:个体,3:企业 | +| merchantName | String | M | 门店名称 | +| mccCode | String | M | 所属行业mcc码 | +| provinceNo | String | M | 省份代码 | +| provinceName | String | M | 省份名称 | +| cityNo | String | M | 城市代码 | +| cityName | String | M | 城市名称 | +| areaNo | String | M | 地区代码 | +| areaName | String | M | 地区名称 | +| address | String | M | 详细地址 | +| applicant | String | M | 联系人 | +| contactPhoneNo | String | M | 联系电话 | +| **settleAccountInfo** | Object | M | 结算信息 | +| bankCardAccountType | Integer | M | 结算账户类型,1:私人账户 2:单位账户 | +| settleType | Integer | M | 结算方式,0:非法人结算 1:法人结算 | +| bankCardAccount | String | M | 银行账号 | +| bankCode | String | M | 银行编码 | +| bankProvince | String | M | 开户银行省份编码 | +| bankProvinceName | String | M | 开户银行省份名称 | +| bankCity | String | M | 开户银行城市编码 | +| bankCityName | String | M | 开户银行城市名称 | +| bankSite | String | C | 开户行网点名称 | +| bankName | String | M | 银行名称 | +| unionpayCode | String | C | 开户支行联行号(网点编码) | +| bankCardPhone | String | M | 银行卡预留手机号 | +| bankCardHolder | String | M | 开户名 | +| bankCardPic | String | M | 银行卡照片 | +| nonLegalPersonCertificateType | Integer | C | 非法人证件类型,调获取证件类型列表接口 | +| nonLegalPersonCertificateNo | String | C | 非法人证件号 | +| nonLegalPersonCertificateStartDate | String | C | 非法人证件有效开始日期,格式如2023-01-01 | +| nonLegalPersonCertificateEndDate | String | C | 非法人证件有效截止日期,格式如2023-01-01,长期则填"长期" | +| nonLegalPersonCertificateFrontPic | String | C | 非法人身份证正面照片地址 | +| nonLegalPersonCertificateBackPic | String | C | 非法人身份证背面照片地址 | +| nonLegalPersonSettleAuthorizationLetterPic | String | C | 非法人结算授权函 | +| **shopInfo** | Object | M | 店铺信息 | +| shopType | Integer | M | 店铺类型,0:分店,1:总店 | +| headShopMerchantId | String | C | 总店商户号 | +| shopInsidePlacePic | String | M | 店内照片 | +| shopGatePic | String | M | 门头照片 | +| cashierDeskPic | String | M | 收银台照片 | +| managerWithMerchantDoorPhoto | String | O | 经理与门头合照 | +| **extraInfoDto** | Object | M | 其他信息 | +| companyChildType | Integer | O | 企业类型商户子类型,非企业商户无效;1:普通,2:事业单位,3:社会团体 | +| contractorLicenseName | String | O | 承包商营业执照名称 | +| payBusinessType | Integer | O | 商户分类;0:扫码支付线下;1:扫码支付线上;2:扫码支付保险;3:扫码支付公缴;4:扫码支付公益;5:高校食堂 | +| contractorMerchantId | String | O | 二次分包商户进件时,承包商商户id | +| settleToCollegeAccount | String | O | 合打款至学校公账证明图片地址 | +| schoolLicense | String | O | 办学许可证图片地址 | +| managerWithMerchantDoorPhoto | String | O | 客户经理与商户门头合照 | +| cooperationAgreement | String | O | 合作协议/证明图片地址 | +| contunryWebsiteScreenshot | String | O | 国家事业单位网站截图图片地址 | +| otherPics | JSON | O | 其他照片,包括:加盟店授权函照片、结算卡信息转账成功照片,结算卡身份证和结算卡同框照片、法人手持结算账户确认书照片以key:value形式传入,如{"otherPic1":"picture/M00/00/F1/rBQhyV12URaAFDZbAANxMe0iHCQ508.jpg","otherPic2":"09.jpg"} | + +#### 业务返回 + +data无具体内容,根据error_code、error_msg判断是否成功 + +#### 请求示例 + +```json +{ + "sign": "VPK8cCfHRfjQw2Rz2LvF9HJqRPSWyItw3yjBIilP+B4=", + "agentId": "1923721", + "currentAgentId":"1923721", + "data": { + "agentId":"1923721", + "businessLicense": { + "businessCreditLicensePic": "", + "businessLicenseEndDate": "", + "businessLicenseName": "", + "businessLicenseNo": "", + "businessLicenseStartDate": "" + }, + "extraInfoDto": { + "companyChildType": 0, + "contractorLicenseName": "", + "contractorMerchantId": "", + "contunryWebsiteScreenshot": "", + "cooperationAgreement": "", + "credentialFileAddress": "", + "managerWithMerchantDoorPhoto": "", + "otherPics": {}, + "payBusinessType": 0, + "schoolLicense": "", + "settleToCollegeAccount": "" + }, + "legalPerson": { + "certificateEndDate": "2025-02-20", + "certificateNo": "36************35", + "certificateStartDate": "2015-02-20", + "certificateType": 1, + "certificatesBackPic": "picture/M00/00/F1/rBQhyV12URaAFDZbAANxMe0iHCQ508.jpg", + "certificatesFrontPic": "picture/M00/00/F1/rBQhy112URWAbRYtAAMXla8KH6s276.jpg", + "facePic": "", + "idcardHandPic": "", + "legalPersonName": "吴某某" + }, + "merchantInfo": { + "address": "度**店", + "applicant": "吴某某", + "areaNo": "110101", + "cityNo": "110100", + "contactPhoneNo": "140****0102", + "mccCode": "5311", + "merchantName": "小米手机5", + "merchantShortHand": "小米手机5", + "merchantSubType": 1, + "merchantType": 2, + "provinceNo": "110000" + }, + "merchantId":"0931015773", + "settleAccountInfo": { + "bankCardAccount": "123*************5000", + "bankCardAccountType": 1, + "bankCardHolder": "吴某某", + "bankCardPhone": "123****8454", + "bankCardPic": "picture/M00/00/F1/rBQhyl12UReARV_AAANZxMkhTvY248.jpg", + "bankCity": "110100", + "bankCode": "C1010211000012", + "bankProvince": "110000", + "bankSite": "123", + "nonLegalPersonCertificateBackPic": "", + "nonLegalPersonCertificateEndDate": "", + "nonLegalPersonCertificateFrontPic": "", + "nonLegalPersonCertificateNo": "", + "nonLegalPersonCertificateStartDate": "", + "nonLegalPersonCertificateType": 0, + "nonLegalPersonSettleAuthorizationLetterPic": "", + "settleType": 1, + "unionpayCode": "" + }, + "shopInfo": { + "cashierDeskPic": "picture/M00/00/F1/rBQhyl12UReARV_AAANZxMkhTvY248.jpg", + "shopGatePic": "picture/M00/00/F1/rBQhyl12UReARV_AAANZxMkhTvY248.jpg", + "shopInsidePlacePic": "picture/M00/00/F1/rBQhyl12UReARV_AAANZxMkhTvY248.jpg", + "headShopMerchantId": "", + "shopType": 1 + } + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "verifyCode": "374763" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 手机号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "手机号不能为空", + "count": 0, + "data": null +} +``` + +#### 注意事项​ + +> 💡 注意,实际请求中数据需明文传输,无需脱敏 +> + +### 获取商户费率 + +通过此接口获取商户费率。 + +> - **URL**:`/open-api/merchantFee/getMerchantFee` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| **merchantFeeInfo** | Object | M | 商户费率 | +| merchantId | String | M | 商户编号 | +| wxT1Rate | String | M | t1_微信(百分比) | +| wxT0Rate | String | M | t0_微信(百分比) | +| aliPayT1Rate | String | M | t1_支付宝(百分比) | +| aliPayT0Rate | String | M | t0_支付宝(百分比) | +| t1UnionScanLtRate | String | M | t1_银联扫码千元以下(百分比) | +| t0UnionScanLtRate | String | M | t0_银联扫码千元以下(百分比) | +| t1UnionScanCreditRate | String | M | 银联扫码千元以上_t1贷记(百分比) | +| t1UnionScanDebitRate | String | M | 银联扫码千元以上_t1借记(百分比) | +| t1UnionScanDebitMaxFee | String | M | 银联扫码千元以上_t1借记封顶(元) | +| t0UnionScanCreditRate | String | M | 银联扫码千元以上_t0贷记(百分比) | +| t0UnionScanDebitRate | String | M | 银联扫码千元以上_t0借记(百分比) | +| t0UnionScanDebitMaxFee | String | M | 银联扫码千元以上_t0借记封顶(元) | +| t1DebitRate | String | M | t1_借记(百分比) | +| t1CreditRate | String | M | t1_贷记(百分比) | +| t1DebitMaxFee | String | M | t1_借记封顶(元) | +| t0DebitRate | String | M | t0_借记(百分比) | +| t0CreditRate | String | M | t0_贷记(百分比) | +| t0DebitMaxFee | String | M | t0_借记封顶(元) | +| t0ExtraFee | String | M | t0_单笔提现费(固定)(元) | +| t0ExtraRate | String | M | t0_单笔提现费(按比例)(百分比) | +| remark | String | M | 修改费率原因 | +| cardT0ExtraFeeType | Integer | M | 刷卡单笔提现费类型,0:固定提现费,1:按比例 | +| status | Integer | M | 商户进件状态;审核通过:1,其他情况:0 | +| **merchantFeeRange** | Object | M | 商户费率填写范围 | +| wxT1RateMin | String | M | t1_微信最小值(百分比) | +| wxT0RateMin | String | M | t0_微信最小值(百分比) | +| aliPayT1RateMin | String | M | t1_支付宝最小值(百分比) | +| aliPayT0RateMin | String | M | t0_支付宝最小值(百分比) | +| t1UnionScanLtRateMin | String | M | t1_银联扫码千元以下最小值(百分比) | +| t0UnionScanLtRateMin | String | M | t0_银联扫码千元以下最小值(百分比) | +| t1UnionScanCreditRateMin | String | M | 银联扫码千元以上_t1贷记最小值(百分比) | +| t1UnionScanDebitRateMin | String | M | 银联扫码千元以上_t1借记最小值(百分比) | +| t1UnionScanDebitMaxFeeMin | String | M | 银联扫码千元以上_t1借记封顶最小值(元) | +| t0UnionScanCreditRateMin | String | M | 银联扫码千元以上_t0贷记最小值(百分比) | +| t0UnionScanDebitRateMin | String | M | 银联扫码千元以上_t0借记最小值(百分比) | +| t0UnionScanDebitMaxFeeMin | String | M | 银联扫码千元以上_t0借记封顶最小值(元) | +| t1DebitRateMin | String | M | t1_借记最小值(百分比) | +| t1CreditRateMin | String | M | t1_贷记最小值(百分比) | +| t1DebitMaxFeeMin | String | M | t1_借记封顶最小值(元) | +| t0DebitRateMin | String | M | t0_借记最小值(百分比) | +| t0CreditRateMin | String | M | t0_贷记最小值(百分比) | +| t0DebitMaxFeeMin | String | M | t0_借记封顶最小值(元) | +| t0ExtraFeeMin | String | M | t0_单笔提现费最小值(固定)(元) | +| t0ExtraRateMin | String | M | t0_单笔提现费最小值(按比例)(百分比) | +| agentT0WithdrawSwitch | Integer | M | 代理商提现费开关,1:只开启单笔提现费,2:只开启单笔百分比,3:都开启 | + +#### 请求示例 + +```json +{ + "sign": "JlqHb810X4WLVSN3m4qCRtLN6ctRrsw1uCBVeYxg1Ks=", + "agentId": "1923721", + "data": { + "merchantId": "3131014839" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "merchantFeeInfo": { + "merchantId": "3131014839", + "wxT1Rate": "0.38", + "wxT0Rate": "0.40", + "aliPayT1Rate": "0.38", + "aliPayT0Rate": "0.40", + "t1UnionScanLtRate": "0.38", + "t0UnionScanLtRate": "0.40", + "t1UnionScanCreditRate": "0.60", + "t1UnionScanDebitRate": "0.60", + "t1UnionScanDebitMaxFee": "20", + "t0UnionScanCreditRate": "0.62", + "t0UnionScanDebitRate": "0.62", + "t0UnionScanDebitMaxFee": "0", + "t1DebitRate": "0.50", + "t1CreditRate": "0.60", + "t1DebitMaxFee": "20", + "t0DebitRate": "0.50", + "t0CreditRate": "0.65", + "t0DebitMaxFee": "0", + "t0ExtraRate": "0.00", + "remark": null, + "status": 1 + }, + "merchantFeeRange": { + "wxT1RateMin": "0.23", + "wxT0RateMin": "0.23", + "aliPayT1RateMin": "0.23", + "aliPayT0RateMin": "0.23", + "t1UnionScanLtRateMin": "0.23", + "t0UnionScanLtRateMin": "0.23", + "t1UnionScanCreditRateMin": "0.53", + "t1UnionScanDebitRateMin": "0.42", + "t1UnionScanDebitMaxFeeMin": "20", + "t0UnionScanCreditRateMin": "0.53", + "t0UnionScanDebitRateMin": "0.42", + "t0UnionScanDebitMaxFeeMin": "0", + "t1DebitRateMin": "0.42", + "t1CreditRateMin": "0.52", + "t1DebitMaxFeeMin": "20", + "t0DebitRateMin": "0.42", + "t0CreditRateMin": "0.52", + "t0DebitMaxFeeMin": "20", + "t0ExtraFeeMin": "0.00", + "t0ExtraRateMin": "0.00", + "agentT0WithdrawSwitch": 2 + } + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +### 修改商户费率 + +通过此接口修改商户费率。 + +> - **URL**:`/open-api/merchantFee/updateMerchantFee` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| wxT1Rate | String | M | t1_微信(百分比) | +| wxT0Rate | String | M | t0_微信(百分比) | +| aliPayT1Rate | String | M | t1_支付宝(百分比) | +| aliPayT0Rate | String | M | t0_支付宝(百分比) | +| t1UnionScanLtRate | String | M | t1_银联扫码千元以下(百分比) | +| t0UnionScanLtRate | String | M | t0_银联扫码千元以下(百分比) | +| t1UnionScanCreditRate | String | M | 银联扫码千元以上_t1贷记(百分比) | +| t1UnionScanDebitRate | String | M | 银联扫码千元以上_t1借记(百分比) | +| t1UnionScanDebitMaxFee | String | M | 银联扫码千元以上_t1借记封顶(元),不支持配置封顶,只允许传“0” | +| t0UnionScanCreditRate | String | M | 银联扫码千元以上_t0贷记(百分比) | +| t0UnionScanDebitRate | String | M | 银联扫码千元以上_t0借记(百分比) | +| t0UnionScanDebitMaxFee | String | M | 银联扫码千元以上_t0借记封顶(元),不支持配置封顶,只允许传“0” | +| t1DebitRate | String | M | t1_借记(百分比) | +| t1CreditRate | String | M | t1_贷记(百分比) | +| t1DebitMaxFee | String | M | t1_借记封顶(元) | +| t0DebitRate | String | M | t0_借记(百分比) | +| t0CreditRate | String | M | t0_贷记(百分比) | +| t0DebitMaxFee | String | M | t0_借记封顶(元) | +| t0ExtraRate | String | M | t0_单笔提现费(按比例)(百分比),即垫资费,目前只有此项支持到小数点后三位 | +| remark | String | O | 修改费率原因(费率修改通过后保存) | + +> 💡 注意,百分比是指数值后接%即为实际结果,例wxT1Rate=0.38,即0.38%,最多支持到小数点后两位 +> + +#### 请求示例 + +```json +{ + "sign": "jhhyOR6O1eatNJlw32Y2/2glJ3f1jBv+G4uGyRZjMeU=", + "agentId": "1923721", + "data": { + "merchantId": "3131014839", + "wxT1Rate": "0.38", + "wxT0Rate": "0.40", + "aliPayT1Rate": "0.38", + "aliPayT0Rate": "0.40", + "t1UnionScanLtRate": "0.38", + "t0UnionScanLtRate": "0.40", + "t1UnionScanCreditRate": "0.60", + "t1UnionScanDebitRate": "0.60", + "t1UnionScanDebitMaxFee": "20", + "t0UnionScanCreditRate": "0.62", + "t0UnionScanDebitRate": "0.62", + "t0UnionScanDebitMaxFee": "0", + "t1DebitRate": "0.50", + "t1CreditRate": "0.60", + "t1DebitMaxFee": "20", + "t0DebitRate": "0.50", + "t0CreditRate": "0.65", + "t0DebitMaxFee": "0", + "t0ExtraRate": "0.40", + "remark": "修改" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 费率超出范围。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "云闪付(>1000元)借记卡D+0费率超出范围", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +### 获取商户分店列表 + +通过此接口获取商户的分店列表。 + +> - **URL**:`/open-api/merchant/listChildStore` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| queryPermissionMerchant | Boolean | O | 是否返回授予权限商户 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| merchantName | String | M | 商户名称 | +| shopNo | String | M | 店铺编号 | +| isHead | Integer | M | 是否总店,1是,0否 | +| area | String | O | 所在区域(总店店长才返回) | +| address | String | O | 详细地址 (总店店长才返回) | +| userName | String | O | 用户名(总店店长才返回) | +| shopManagerName | String | O | 店长姓名(总店店长才返回) | +| phoneNum | String | O | 手机号(总店店长才返回) | +| accountStatus | Integer | M | 账号状态 | + +#### 请求示例 + +```json +{ + "sign": "JlqHb810X4WLVSN3m4qCRtLN6ctRrsw1uCBVeYxg1Ks=", + "agentId": "1923721", + "data": { + "queryPermissionMerchant": true, + "merchantId": "3131014839" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 3, + "data": [ + { + "merchantId": "0131018468", + "merchantName": "精美礼品", + "shopNo": "0131018468(0)", + "isHead": 0, + "area": "广东省深圳市***", + "address": "斤斤********计较666", + "userName": "Iverson00025", + "shopManagerName": "宁好", + "phoneNum": "131******25", + "accountStatus": 0, + "groupType": 0 + } + ] +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +## 商户审核信息 + +### 商户审核信息回调 + +用于通知商户审核消息 + +> 💡 需对接方进行开发,联合收单方负责调用,参数格式与调用方式同接入指南中说明。 回调地址联系乐刷运营或技术同事配置 +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| merchantStatus | String | M | 商户状态,-1:待完善资料,0:待审核,1:审核不通过,2:转人工,3:审核通过 | +| messageType | String | M | 消息类型,1:注册审核,2:修改审核 | +| checkDesc | String | M | 审核结果描述 | + +#### 请求示例 + +```json +{ + "sign": "8IXdaoFNBV6NbVDSngPlvItD4//0yYcxmkfdyCDnH5M=", + "agentId": "1923721", + "currentAgentId": "1923721", + "data": { + "merchantId": "3131014839", + "merchantStatus": 3, + "messageType": 1, + "checkDesc": "审核通过" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:参数错误 。 +> +> 状态码:`1 失败` +> +> 响应示例: +> + +```json +{ + "error_code": "400", + "error_msg": "参数错误", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +​ + +## 商户微信支付参数 + +### 商户微信支付参数配置 + +代理商可通过此接口配置商户的微信支付参数信息。 + +> - **URL**:`/open-api/merchant/wechat/wxPayConfig` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户号 | +| wxSubMchId | String | M | 微信商户号 | +| configType | Integer | M | 配置类型(1:绑定appid 2:推荐关注 3:授权目录) | +| sub_appid | String | M | 绑定APPID,configType为1、2时必填 | +| jsapi_path | String | M | 授权目录,configType为3时必填 | + +#### 业务返回数据 + +无 + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "1234567890", + "configType": 1, + "sub_appid": "123" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "成功", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +> (1)此接口每次只能传一种类型的一个参数(如授权目录有多个,分多次调用配置) +> +> (2)此接口为添加接口,一旦配置成功,不支持修改和删除(微信端不支持) +> +> (3)微信限制每种参数最多配置5 组 +> +> (4)主体不一致,请自行检查商户进件的营业执照全称与appid的营业执照全称是否完全一致 +> +> (5)参加绿洲后会返回wxSubMchId参数。只有带此参数,才能正确的配置到绿洲的商户上 +> +> (6)根据微信的规则,微信appid配置成功,需要30分钟后方式用于交易 +> +> (7)由于微信限制了调用频率,此接口调用不能超过2次/5s +> + +### 商户微信支付参数查询 + +代理商可通过此接口查询商户的微信支付参数信息。 + +> - **URL**:`/open-api/merchant/wechat/queryWxPayConfig` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户号 | +| wxSubMchId | String | M | 微信商户号 | +| reportConfigId | Integer | O | 商户上报的渠道号ID | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| **jsapi_path_list** | List | O | 支付目录授权路径,数组 | +| **appid_config_list** | List | O | appid配置列表,数组 | +| sub_appid | String | O | 子appid | +| subscribe_appid | String | O | 推荐关注公众号appid | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "LqCL/UoZnuhgNcVKfwYr57hQREp+rE4CQpdW+VuXNvk=", + "data": { + "merchantId": "6931017549", + "wxSubMchId": "559486615" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "jsapi_path_list": [ + "http://abc.com/pay/", + "http://abc.com/pay2/" + ], + "appid_config_list": [ + { + "sub_appid": "null", + "subscribe_appid": "" + }, + { + "sub_appid": "wx112233445566", + "subscribe_appid": "wx112233445566" + } + ] + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +## 通道子商户信息 + +### 微信子商户简称更新 + +代理商可通过此接口更新微信子商户的简称和客服电话。 + +> - **URL**:`/open-api/merchant/wechat/merchantUpdateShortName` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户号 | +| wxSubMchId | String | O | 微信商户号 | + +#### 业务返回数据 + +无 + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "6931017549", + "wxSubMchId": "559486615" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "成功", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:请求次数超限。 +> +> 状态码:`1 ` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户简称或商户全称距离上一次修改时间不足30天,暂不支持修改", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +> (1)调用该接口前,先调用商户信息修改接口修改简称,审核通过后才允许调用该接口将简称同步到微信 +> +> (2)微信规定,商户简称一个月只能修改一次 +> + +### 支付宝子商户更新 + +代理商可通过此接口更新支付宝子商户的信息。 + +> - **URL**:`/open-api/merchant/aliPay/syncAliPayMsg` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户号 | +| zfbSubMchId | String | O | 支付宝子商户号 | + +#### 业务返回数据 + +无 + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "6931017549" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "成功", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +> (1)调用该接口前,先调用商户信息修改接口修改简称,审核通过后才允许调用该接口将简称同步到支付宝 +> + +### 微信/支付宝/银联子商户号查询 + +代理商可通过此接口查询微信/支付宝/银联子商户号。 + +> - **URL**:`/open-api/merchant/subMch/query` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户号 | +| subMchType | Integer | O | 子商户类型1:微信2:支付宝4:银联不传默认查所有 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户号 | +| **wechat**​ | List | M | 微信子商户号,数组 | +| subMchId | String | M | 微信商户号 | +| channelId | String | M | 微信商户号所属微信渠道号 | +| msg | String | M | 上报失败时的失败原因 | +| usable | String | M | 是否可用,0 不可用,1 可用 | +| createTime | String | M | 创建时间,格式如:"2023-02-28 15:32:22",商户没有上报则为空 | +| **alipay**​ | List | M | 支付宝子商户号,数组 | +| subMchId | String | M | 支付宝商户号 | +| msg | String | M | 上报失败时的失败原因 | +| subMchLevel | String | M | 支付宝商户号等级 | +| usable | String | M | 是否可用,0 不可用,1 可用 | +| createTime | String | M | 创建时间,格式如:"2023-02-28 15:32:22",商户没有上报则为空 | +| **unionscan**​ | List | M | 银联QRC商户号,数组 | +| subMchId | String | M | 银联QRC商户号上报失败则为空 | +| usable | String | M | 是否可用,0 不可用,1 可用 | +| msg | String | M | 上报失败时的失败原因 | +| **unionpayQRA**​ | List | M | 银联QRA商户号,数组 | +| subMchId | String | M | 银联QRA商户号上报失败则为空 | +| usable | String | M | 是否可用,0 不可用,1 可用 | +| msg | String | M | 上报失败时的失败原因 | +| **cups**​ | List | M | 银联cups商户号,数组 | +| subMchId | String | M | 银联cups商户号上报失败则为空 | +| usable | String | M | 是否可用,0 不可用,1 可用 | +| msg | String | M | 上报失败时的失败原因 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "6931017549" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "merchantId": "3931017540", + "alipay": [ + { + "msg": "Success", + "usable": 1, + "createTime": "2023-02-28 15:32:24", + "subMchId": "2088520386057864", + "subMchLevel": "M1" + } + ], + "wechat": [ + { + "msg": "SUCCESS", + "authorizeState": "AUTHORIZE_STATE_UNAUTHORIZED", + "usable": 1, + "createTime": "2023-02-28 15:32:22", + "subMchId": "559481680", + "channelId": "209096974" + } + ], + "unionscan": [ + { + "msg": "更新二代商户信息失败商户信息校验有误-同一个身份证注册的小微商户数不得超15个 商户号:QRC440308252222", + "usable": 0, + "subMchId": "" + } + ], + "cups": [ + { + "msg": "artifCertifId:同一个身份证注册的小微商户数不得超15个", + "usable": 0, + "subMchId": "89010215311057R" + } + ] + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +### 微信子商户审核状态查询 + +代理商可通过此接口将查询微信子商户在微信侧的审核状态。 + +> - **URL**:`/open-api/merchant/wechat/mchAuditQry` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| subMchId | String | M | 微信子商户号 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| resultCode | String | O | 业务处理结果,SUCCESS/FAIL | +| errCode | String | O | 错误码,有:1 无:0 | +| errCodeDes | String | O | 错误信息 | +| auditStatus | String | O | 审核状态,AUDITING/PASSED/REJECTED | +| auditComment | String | O | 审核备注 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "subMchId": "559486615" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "resultCode": "SUCCESS", + "errCode": null, + "errCodeDes": null, + "auditStatus": "REJECTED", + "auditComment": "RISK_NEED_MERCHANT_COMFIRM" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如subMchId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "subMchId不能为空", + "count": 0, + "data": null +} +``` + +## 微信实名认证 + +### 微信子商户实名认证-申请 + +代理商可通过此接口将所传商户号的资料上送到微信,由商户法人完成开户意愿确认后,完成微信子商户号实名认证。 + +> - **URL**:`/open-api/merchant/wechat/subjectApply` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| microBizType | String | O | **微信小微类型**门店场所:MICRO_TYPE_STORE流动经营/便民服务:MICRO_TYPE_MOBILE线上商品/服务交易:MICRO_TYPE_ONLINE | +| confirmMchidList | String | O | **待授权微信商户号**待授权的微信商户号,此处传了微信商户号后,申请单申请通过后无需授权可自动授权 | +| reportConfigId | String | O | **渠道序号**对应的乐刷侧微信渠道序号,需要向指定的渠道提交微信认证时选传 | + +#### 业务返回数据 + +无 + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "6931017549" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如merchantId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "merchantId不能为空", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +> (1)微信官方文档:[https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/applysubject/chapter5_1.shtml](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/applysubject/chapter5_1.shtml) +> +> (2)APPLYMENT_STATE_REJECTED,APPLYMENT_STATE_CANCELED这两种状态允许再次报名。如果需要修改商户资料,使用商户信息修改接口进行调整。 +> + +### 微信子商户实名认证-撤销 + +代理商可通过此接口将撤销微信子商户实名认证申请。 + +> - **URL**:`/open-api/merchant/wechat/subjectCancel` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | + +#### 业务返回数据 + +无 + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "6931017549" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:状态不允许。 +> +> 状态码:`1` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户当前状态不允许撤销", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +> (1)APPLYMENT_STATE_WAITTING_FOR_AUDIT,APPLYMENT_STATE_REJECTED,APPLYMENT_STATE_FREEZED这三种状态才允许撤销 +> +> (2)撤销后可以重新报名 +> + +### 微信子商户实名认证-查询 + +代理商可通过此接口将查询微信子商户实名认证申请情况。 + +> - **URL**:`/open-api/merchant/wechat/subjectQuery` +> - **Method**:`POST` +> + +#### 业务请求参数​ + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| applyStatus | String | M | **申请状态**WAIT_FOR_UPLOAD_DATA: 等待上送资料UPLOAD_DATA_FAIL: 上送资料失败APPLYMENT_STATE_WAITTING_FOR_AUDIT: 微信审核中APPLYMENT_STATE_WAITTING_FOR_CONFIRM_CONTACT: 待确认联系信息APPLYMENT_STATE_WAITTING_FOR_CONFIRM_LEGALPERSON: 待账户验证APPLYMENT_STATE_PASSED: 审核通过APPLYMENT_STATE_REJECTED: 审核驳回APPLYMENT_STATE_FREEZED: 已冻结APPLYMENT_STATE_CANCELED: 已作废 | +| qrcodeData | String | C | **确认二维码临时路径**当applyStatus为APPLYMENT_STATE_WAITTING_FOR_CONFIRM_CONTACT、APPLYMENT_STATE_WAITTING_FOR_CONFIRM_LEGALPERSON、APPLYMENT_STATE_PASSED、APPLYMENT_STATE_FREEZED时,会返回。 | +| rejectParam | String | C | **驳回字段**当applyStatus为APPLYMENT_STATE_REJECTED返回,显示具体的驳回字段 | +| rejectReason | String | C | **驳回原因**当applyStatus为APPLYMENT_STATE_REJECTED返回,显示具体的驳回原因 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "6931017549" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "merchantId": "0123456789", + "applyStatus": "APPLYMENT_STATE_PASSED", + "qrcodeData": "http://pic.lepass.cn/hashpic/3bbd2dd4aa77119953662f138ff5e593.png" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法。 +> +> 状态码:`1` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户不存在申请记录", + "count": 0, + "data": null +} +``` + +#### 注意事项 + +> (1)前两种状态为联合收单添加,其余均为微信接口返回值。上送资料失败原因通过rejectReason确认。 +> +> (2)具体参数逻辑请参考微信官方文档:[https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/applysubject/chapter5_3.shtml](https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/applysubject/chapter5_3.shtml) +> + +### 微信授权状态查询接口 + +代理商可通过此接口查询微信子商户号授权状态。 + +> - **URL**:`/open-api/merchant/wechat/getAuthorizeState` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| wxSubMchId | String | M | 微信子商户号 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| msg | String | M | 授权状态说明**枚举**(中文):已授权 未授权 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "wxSubMchId": "559486615" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "msg": "未授权" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如wxSubMchId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "wxSubMchId不能为空", + "count": 0, + "data": null +} +``` + +## 支付宝实名认证 + +### 支付宝认证申请接口 + +代理商可通过此接口将所传商户号的资料上送到支付宝,由商户法人完成开户意愿确认后,完成支付宝子商户号实名认证。 + +> - **URL**:`/open-api/merchant/aliPay/apply` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 乐刷商户编号 | +| microMerchantType | String | O | 小微商户经营类型,枚举值:门店场所(STORE)、流动经营(STALL)。小微提交时不传默认STORE | +| confirmMchidList | String | O | 支付宝商户号列表,用英文逗号分隔。最多支持10个。若上传了待绑定收款账号列表则系统在商家完成法人/公账打款认证后可以自动完成绑定。 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| businessCode | String | O | 乐刷申请单号,如果成功会有单号返回,否则没有 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "9331019280" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "businessCode": "214547897946654" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如merchantId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "merchantId不能为空", + "count": 0, + "data": null +} +``` + +### 支付宝认证申请撤销接口 + +代理商可通过此接口将撤销支付宝子商户实名认证申请。 + +> - **URL**:`/open-api/merchant/aliPay/revoke` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 乐刷商户编号 | +| applymentId | String | O | 支付宝申请单号,与乐刷申请单号可选填一个 | +| businessCode | String | O | 乐刷申请单号,与支付宝申请单号可选填一个 | + +#### 业务返回数据 + +无 + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId":"531246545", + "applymentId":"20001101202366551421" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如申请记录不存在。 +> +> 状态码:`10005` +> +> 响应示例: +> + +```json +{ + "error_code": "10005", + "error_msg": "申请记录不存在", + "count": 0, + "data": null +} +``` + +### 支付宝认证申请查询接口 + +代理商可通过此接口将查询支付宝子商户实名认证申请情况。 + +> - **URL**:`/open-api/merchant/aliPay/queryApplyStatus` +> - **Method**:`POST` +> + +#### 业务请求参数​ + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 乐刷商户编号 | +| applymentId | String | O | 支付宝申请单号,与乐刷申请单号可选填一个 | +| businessCode | String | O | 乐刷申请单号,与支付宝申请单号可选填一个 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| orderstatus | String | M | 申请单认证状态WAITING:待提交 REPORT_ERROR:提交失败AUDITING:审核中 CONTACT_CONFIRM:待联系人确认 LEGAL_CONFIRM:待法人确认 AUDIT_PASS:审核通过 AUDIT_REJECT:审核失败 AUDIT_FREEZE:已冻结 CANCELED:已撤回 | +| qrcode | ​ | O | 申请单二维码地址,在审核通过、审核中、已冻结时返回。该地址为支付宝提供的二维码图片链接,可直接引导商户支付宝扫码认证,示例:https://qrcode.alipay.com/token/test | +| **verifyList** | List | O | 申请单审核失败时的原因描述列表 | +| failParam | String | O | 审核失败字段 | +| failReason | String | O | 描述申请单审核失败原因 | +| applymentId | String | O | 支付宝申请单号 | +| businessCode | String | O | 乐刷申请单号 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId":"531246545", + "applymentId":"20001101202366551421" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "orderstatus": "AUDITING", + "qrcode": "https://qrcode.alipay.com/token/test", + "verifylist": [ + { + "failParam": "support_credentials", + "failReason": "证照编号对应的企业名称、法人名称与录入信息不一致" + }, + { + "failParam": "support_credentials", + "failReason": "证照编号对应的企业名称、法人名称与录入信息不一致" + }, + { + "failParam": "support_credentials", + "failReason": "证照编号对应的企业名称、法人名称与录入信息不一致" + }, + { + "failParam": "support_credentials", + "failReason": "证照编号对应的企业名称、法人名称与录入信息不一致" + } + ], + "applymentId": "20220000666660001", + "businessCode": "20220000666660001" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如merchantId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "merchantId不能为空", + "count": 0, + "data": null +} +``` + +### 支付宝子商户授权状态查询 + +代理商可通过此接口将查询支付宝子商户在支付宝侧的授权状态。 + +> - **URL**:`/open-api/merchant/aliPay/queryMchStatus` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 乐刷商户编号 | +| subMchId | String | O | 支付宝子商户号 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| checkResult | String | O | 授权状态已授权(AUTHORIZED)未授权(UNAUTHORIZED)已销户(CLOSED) | +| merchantId | String | O | 乐刷商户编号 | +| subMchId | String | O | 支付宝子商户号 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "9331019280" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "merchantId": "9331019280", + "subMchId": "2088610722002415", + "checkResult": "UNAUTHORIZED" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如merchantId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "merchantId不能为空", + "count": 0, + "data": null +} +``` + +## 商户资料补充(同步通道) + +### 商户额外资料补充接口 + +代理商可通过此接口将不影响进件的额外商户资料补充给乐刷,该部分资料不做审核,目前用途是提交微信认证 + +> - **URL**:`/open-api/merchant/subMch/saveOrUpdateFurtherInfo` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 乐刷商户编号 | +| **specialOperationList** | List | O | 支付宝子商户号 | +| operationCopyList | List | O | 行业经营许可证资质照片,传图片上传后的乐刷图片地址 | +| categoryId | Integer | O | 行业id参看微信支付提供的[特殊行业id对照表](https://kf.qq.com/faq/220228quYbQJ220228qiiYZF.html) 示例值:100 | +| companyProveCopy | String | O | 单位证明函照片,传图片上传后的乐刷图片地址 | +| idHolderType | String | O | 证件持有人类型,1. 主体类型为事业单位时选传: (1)若上传的是法人证件,则不需要上传该字段。 (2)若因特殊情况,无法提供法人证件时,可上传经办人。 (经办人:经商户授权办理微信支付业务的人员,授权范围包括但不限于签约,入驻过程需完成账户验证)。 2. 主体类型为企业、个体户、社会组织时,默认为经营者/法人,不需要上传该字段。 LEGAL:经营者/法人 SUPER:经办人 示例值:LEGAL | +| isFinanceInstitution | String | O | 选填,请根据申请主体的实际情况填写,可参考选择[金融机构指引](https://kf.qq.com/faq/220215IrMRZ3220215n6buiU.html): 1、若商户主体是金融机构,则填写:true。 2、若商户主体不是金融机构,则填写:false。 若未传入将默认填写:false。 示例值:true | +| **certificateInfo** | Object | O | ​ | +| certNumber | String | O | 请填写登记证书上的证书编号 | +| certType | String | O | 登记证书的类型。 1、主体为“政府机关/事业单位/社会组织”时,请上传登记证书类型。 当主体为事业单位时,选择此枚举值: CERTIFICATE_TYPE_2388:事业单位法人证书 当主体为政府机关,选择此枚举值: CERTIFICATE_TYPE_2389:统一社会信用代码证书 当主体为社会组织,选择以下枚举值之一: CERTIFICATE_TYPE_2389:统一社会信用代码证书 CERTIFICATE_TYPE_2394:社会团体法人登记证书 CERTIFICATE_TYPE_2395:民办非企业单位登记证书 CERTIFICATE_TYPE_2396:基金会法人登记证书 CERTIFICATE_TYPE_2520:执业许可证/执业证 CERTIFICATE_TYPE_2521:基层群众性自治组织特别法人统一社会信用代码证 CERTIFICATE_TYPE_2522:农村集体经济组织登记证 CERTIFICATE_TYPE_2399:宗教活动场所登记证 CERTIFICATE_TYPE_2400:政府部门下发的其他有效证明文件 | +| legalPerson | String | O | 请填写登记证书上的法定代表人姓名 | +| companyAddress | String | O | 请填写登记证书的注册地址 | +| certValidDate | String | O | 1、请填写登记证书上的有效期限,注意参照示例中的格式,长期用"forever"表示 2、结束时间需大于开始时间 示例值:["2017-10-28","2037-10-28"] | +| certCopy | String | O | 证书照片,传图片上传后的乐刷图片地址 | +| merchantName | String | O | 请填写登记证书上的商户名称 | +| **financeInstitutionInfo** | Object | O | 当主体是金融机构时,必填 | +| financeType | String | O | 金融机构类型,金融机构类型需与营业执照/登记证书上一致,可参考选择[金融机构指引](https://kf.qq.com/faq/220215IrMRZ3220215n6buiU.html)。 BANK_AGENT:银行业, 适用于商业银行、政策性银行、农村合作银行、村镇银行、开发性金融机构等 PAYMENT_AGENT:支付机构, 适用于非银行类支付机构 INSURANCE:保险业, 适用于保险、保险中介、保险代理、保险经纪等保险类业务 TRADE_AND_SETTLE:交易及结算类金融机构, 适用于交易所、登记结算类机构、银行卡清算机构、资金清算中心等 OTHER:其他金融机构, 适用于财务公司、信托公司、金融资产管理公司、金融租赁公司、汽车金融公司、贷款公司、货币经纪公司、消费金融公司、证券业、金融控股公司、股票、期货、货币兑换、小额贷款公司、金融资产管理、担保公司、商业保理公司、典当行、融资租赁公司、财经咨询等其他金融业务 示例值:BANK_AGENT | +| financeLicensePics | List | O | 金融机构许可证图片,传图片上传后的乐刷图片地址 | +| **uboInfos** | List | O | **仅企业需要填写。** 若经营者/法人不是最终受益所有人,则需提填写受益所有人信息,最多上传4个。 若经营者/法人是最终受益所有人之一,可在此填写其他受益所有人信息,最多上传3个。 | +| uboIdDocType | String | O | 证书类型请填写受益人的证件类型。 枚举值: IDENTIFICATION_TYPE_IDCARD:中国大陆居民-身份证 IDENTIFICATION_TYPE_OVERSEA_PASSPORT:其他国家或地区居民-护照 IDENTIFICATION_TYPE_HONGKONG_PASSPORT:中国香港居民-来往内地通行证 IDENTIFICATION_TYPE_MACAO_PASSPORT:中国澳门居民-来往内地通行证 IDENTIFICATION_TYPE_TAIWAN_PASSPORT:中国台湾居民-来往大陆通行证 IDENTIFICATION_TYPE_FOREIGN_RESIDENT:外国人居留证 IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT:港澳居民证 IDENTIFICATION_TYPE_TAIWAN_RESIDENT:台湾居民证 示例值:IDENTIFICATION_TYPE_IDCARD | +| uboIdDocCopy | String | O | 受益人人像面照片,传图片上传后的乐刷图片地址1、请上传受益人证件的正面照片。 2、若证件类型为身份证,请上传人像面照片。 | +| uboIdDocCopyBack | String | O | 受益人国徽面照片,传图片上传后的乐刷图片地址1、请上传受益人证件的反面照片。 2、若证件类型为身份证,请上传国徽面照片。 3、若证件类型为护照,无需上传反面照片。 | +| uboIdDocName | String | O | 受益人姓名 | +| uboIdDocNumber | String | O | 受益人证件号码 | +| uboIdDocAddress | String | O | 证件居住地址1、请按照证件上住址填写,若证件上无住址则按照实际住址填写,如广东省深圳市南山区xx路xx号xx室。 | +| uboPeriodBegin | String | ​ | 证件有效期开始时间,1、请按照示例值填写。 2、结束时间大于开始时间。 示例值:2019-06-06 | +| uboPeriodEnd | String | O | 证件有效期结束时间1、请按照示例值填写,若证件有效期为长期,请填写:长期。 2、结束时间大于开始时间。 示例值:2026-06-06 | +| identificationAddress | String | O | 法人证件居住地址1、主体类型为企业时,需要填写。其他主体类型,无需上传。企业商户法人证件类型为身份证的无需填写 2、请按照证件上住址填写,若证件上无住址则按照实际住址填写,如广东省深圳市南山区xx路xx号xx室。 | +| authorizeLetterCopy | String | O | 法定代表人说明函事业单位选传1、当证件持有人类型为经办人时,必须上传。其他情况,无需上传。 2、若因特殊情况,无法提供法定代表人证件时,请参照[《示例图》](https://kf.qq.com/faq/220127aUzAju220127UfiuQr.html)打印法定代表人说明函,全部信息需打印,不支持手写商户信息,并加盖公章。 | +| **contactInfo** | Object | O | 联系人信息 | +| contactType | String | O | 联系人类型1、主体为“小微/个人卖家 ”,可选择: LEGAL:经营者/法人。 2、主体为“个体工商户/企业/事业单位/社会组织”,可选择: LEGAL:经营者/法人、 SUPER:经办人。 (经办人:经商户授权办理微信支付业务的人员)。 示例值:LEGAL | +| contactIdDocType | String | O | 联系人证件类型注商户入驻接口仅收集了联系人姓名、手机号,这里一定要调商户资料补充接口补充联系人证件号及类型,否则调微信认证提交接口会出错当联系人类型是经办人时,请上传联系人证件类型。 枚举值: IDENTIFICATION_TYPE_IDCARD:中国大陆居民-身份证 IDENTIFICATION_TYPE_OVERSEA_PASSPORT:其他国家或地区居民-护照 IDENTIFICATION_TYPE_HONGKONG_PASSPORT:中国香港居民-来往内地通行证 IDENTIFICATION_TYPE_MACAO_PASSPORT:中国澳门居民-来往内地通行证 IDENTIFICATION_TYPE_TAIWAN_PASSPORT:中国台湾居民-来往大陆通行证 IDENTIFICATION_TYPE_FOREIGN_RESIDENT:外国人居留证 IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT:港澳居民证 IDENTIFICATION_TYPE_TAIWAN_RESIDENT:台湾居民证 示例值:IDENTIFICATION_TYPE_IDCARD | +| contactIdDocCopy | String | O | 联系人证件正面照片,传图片上传后的乐刷图片地址1、当联系人类型是经办人时,请上传联系人证件的正面照片。 2、若证件类型为身份证,请上传人像面照片。 | +| contactIdDocCopyBack | String | O | 联系人证件反面照片,传图片上传后的乐刷图片地址 | +| contactPeriodBegin | String | O | 联系人证件有效期开始时间1、当联系人类型是经办人时,请上传证件有效期开始时间 2、请按照示例值填写。 3、结束时间大于开始时间。 示例值:2019-06-06 | +| contactPeriodEnd | String | O | 联系人证件有效期结束时间1、当联系人类型是经办人时,请上传证件有效期结束时间 2、请按照示例值填写,若证件有效期为长期,请填写:长期。 3、结束时间大于开始时间。 示例值:2026-06-06 | +| businessAuthorizationLetter | String | O | 业务办理授权函,传图片上传后的乐刷图片地址1、当联系人类型是经办人时,请上传业务办理授权函 2、请参照[[示例图](https://kf.qq.com/faq/220509Y3Yvym220509fQvYR7.html)]打印业务办理授权函,全部信息需打印,不支持手写商户信息,并加盖公章。 | + +#### 业务返回数据 + +无 + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "specialOperationList": [ + { + "operationCopyList": [ + "121.txt", + "128.txt" + ], + "categoryId": 41 + }, + { + "operationCopyList": [ + "122.txt", + "126.txt" + ], + "categoryId": 46 + } + ], + "companyProveCopy": "123.txt", + "merchantId": "3931017540", + "certificateInfo": { + "certNumber": "11111***1111", + "certType": "CERTIFICATE_TYPE_2388", + "legalPerson": "李四", + "companyAddress": "广东省深圳市南山区xx路xx号", + "certValidDate": "[\"1970-01-01\",\"forever\"]", + "certCopy": "123.txt", + "merchantName": "xx公益团体" + }, + "financeInstitutionInfo": { + "financeLicensePics": [ + "123456.txt", + "234567.txt" + ], + "financeType": "BANK_AGENT" + }, + "idHolderType": "LEGAL", + "isFinanceInstitution": "true", + "uboInfos": [{ + "uboIdDocNumber": "33******11111111", + "uboIdDocType": "IDENTIFICATION_TYPE_IDCARD", + "uboIdDocName": "lalala" + }], + "contactInfo": { + "contactType": "LEGAL", + "contactIdDocType": "IDENTIFICATION_TYPE_IDCARD", + "contactIdDocCopy": "lalala", + "contactIdDocCopyBack": "lalala" + } + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如merchantId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "merchantId不能为空", + "count": 0, + "data": null +} +``` + +### 商户额外资料查询接口 + +代理商可通过此接口查询商户额外补充的资料 + +> - **URL**:`/open-api/merchant/subMch/selectInfoFurtherInfo` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 乐刷商户编号 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 乐刷商户编号 | +| **specialOperationList** | List | O | 支付宝子商户号 | +| operationCopyList | List | O | 行业经营许可证资质照片图片地址 | +| categoryId | Integer | O | 行业id参看微信支付提供的[特殊行业id对照表](https://kf.qq.com/faq/220228quYbQJ220228qiiYZF.html) 示例值:100 | +| companyProveCopy | String | O | 单位证明函照片图片地址 | +| idHolderType | String | O | 证件持有人类型,1. 主体类型为事业单位时选传: (1)若上传的是法人证件,则不需要上传该字段。 (2)若因特殊情况,无法提供法人证件时,可上传经办人。 (经办人:经商户授权办理微信支付业务的人员,授权范围包括但不限于签约,入驻过程需完成账户验证)。 2. 主体类型为企业、个体户、社会组织时,默认为经营者/法人,不需要上传该字段。 LEGAL:经营者/法人 SUPER:经办人 示例值:LEGAL | +| isFinanceInstitution | String | O | 选填,请根据申请主体的实际情况填写,可参考选择[金融机构指引](https://kf.qq.com/faq/220215IrMRZ3220215n6buiU.html): 1、若商户主体是金融机构,则填写:true。 2、若商户主体不是金融机构,则填写:false。 若未传入将默认填写:false。 示例值:true | +| **certificateInfo** | Object | O | 证书 | +| certNumber | String | O | 登记证书上的证书编号 | +| certType | String | O | 登记证书的类型。 1、主体为“政府机关/事业单位/社会组织”时,请上传登记证书类型。 当主体为事业单位时,选择此枚举值: CERTIFICATE_TYPE_2388:事业单位法人证书 当主体为政府机关,选择此枚举值: CERTIFICATE_TYPE_2389:统一社会信用代码证书 当主体为社会组织,选择以下枚举值之一: CERTIFICATE_TYPE_2389:统一社会信用代码证书 CERTIFICATE_TYPE_2394:社会团体法人登记证书 CERTIFICATE_TYPE_2395:民办非企业单位登记证书 CERTIFICATE_TYPE_2396:基金会法人登记证书 CERTIFICATE_TYPE_2520:执业许可证/执业证 CERTIFICATE_TYPE_2521:基层群众性自治组织特别法人统一社会信用代码证 CERTIFICATE_TYPE_2522:农村集体经济组织登记证 CERTIFICATE_TYPE_2399:宗教活动场所登记证 CERTIFICATE_TYPE_2400:政府部门下发的其他有效证明文件 | +| legalPerson | String | O | 登记证书上的法定代表人姓名 | +| companyAddress | String | O | 登记证书的注册地址 | +| certValidDate | String | O | 1、请填写登记证书上的有效期限,注意参照示例中的格式,长期用"forever"表示 2、结束时间需大于开始时间 示例值:["2017-10-28","2037-10-28"] | +| certCopy | String | O | 证书照片图片地址 | +| merchantName | String | O | 登记证书上的商户名称 | +| **financeInstitutionInfo** | Object | O | 当主体是金融机构时,必填 | +| financeType | String | O | 金融机构类型,金融机构类型需与营业执照/登记证书上一致,可参考选择[金融机构指引](https://kf.qq.com/faq/220215IrMRZ3220215n6buiU.html)。 BANK_AGENT:银行业, 适用于商业银行、政策性银行、农村合作银行、村镇银行、开发性金融机构等 PAYMENT_AGENT:支付机构, 适用于非银行类支付机构 INSURANCE:保险业, 适用于保险、保险中介、保险代理、保险经纪等保险类业务 TRADE_AND_SETTLE:交易及结算类金融机构, 适用于交易所、登记结算类机构、银行卡清算机构、资金清算中心等 OTHER:其他金融机构, 适用于财务公司、信托公司、金融资产管理公司、金融租赁公司、汽车金融公司、贷款公司、货币经纪公司、消费金融公司、证券业、金融控股公司、股票、期货、货币兑换、小额贷款公司、金融资产管理、担保公司、商业保理公司、典当行、融资租赁公司、财经咨询等其他金融业务 示例值:BANK_AGENT | +| financeLicensePics | List | O | 金融机构许可证图片地址 | +| **uboInfos** | List | O | **仅企业需要填写。** 若经营者/法人不是最终受益所有人,则需提填写受益所有人信息,最多上传4个。 若经营者/法人是最终受益所有人之一,可在此填写其他受益所有人信息,最多上传3个。 | +| uboIdDocType | String | O | 证书类型受益人的证件类型。 枚举值: IDENTIFICATION_TYPE_IDCARD:中国大陆居民-身份证 IDENTIFICATION_TYPE_OVERSEA_PASSPORT:其他国家或地区居民-护照 IDENTIFICATION_TYPE_HONGKONG_PASSPORT:中国香港居民-来往内地通行证 IDENTIFICATION_TYPE_MACAO_PASSPORT:中国澳门居民-来往内地通行证 IDENTIFICATION_TYPE_TAIWAN_PASSPORT:中国台湾居民-来往大陆通行证 IDENTIFICATION_TYPE_FOREIGN_RESIDENT:外国人居留证 IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT:港澳居民证 IDENTIFICATION_TYPE_TAIWAN_RESIDENT:台湾居民证 示例值:IDENTIFICATION_TYPE_IDCARD | +| uboIdDocCopy | String | O | 受益人人像面照片图片地址 | +| uboIdDocCopyBack | String | O | 受益人国徽面照片图片地址 | +| uboIdDocName | String | O | 受益人姓名 | +| uboIdDocNumber | String | O | 受益人证件号码 | +| uboIdDocAddress | String | O | 证件居住地址 | +| uboPeriodBegin | String | O | 证件有效期开始时间 示例值:2019-06-06 | +| uboPeriodEnd | String | O | 证件有效期结束时间有效期为长期,则为:长期。 示例值:2026-06-06 | +| identificationAddress | String | O | 法人证件居住地址 | +| authorizeLetterCopy | String | O | 法定代表人说明函 | +| **contactInfo** | Object | O | 联系人信息 | +| contactType | String | O | 联系人类型1、主体为“小微/个人卖家 ”,可选择: LEGAL:经营者/法人。 2、主体为“个体工商户/企业/事业单位/社会组织”,可选择: LEGAL:经营者/法人、 SUPER:经办人。 (经办人:经商户授权办理微信支付业务的人员)。 示例值:LEGAL | +| contactIdDocType | String | O | 联系人证件类型 枚举值: IDENTIFICATION_TYPE_IDCARD:中国大陆居民-身份证 IDENTIFICATION_TYPE_OVERSEA_PASSPORT:其他国家或地区居民-护照 IDENTIFICATION_TYPE_HONGKONG_PASSPORT:中国香港居民-来往内地通行证 IDENTIFICATION_TYPE_MACAO_PASSPORT:中国澳门居民-来往内地通行证 IDENTIFICATION_TYPE_TAIWAN_PASSPORT:中国台湾居民-来往大陆通行证 IDENTIFICATION_TYPE_FOREIGN_RESIDENT:外国人居留证 IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT:港澳居民证 IDENTIFICATION_TYPE_TAIWAN_RESIDENT:台湾居民证 示例值:IDENTIFICATION_TYPE_IDCARD | +| contactIdDocCopy | String | O | 联系人证件正面照片图片地址1、当联系人类型是经办人时,为联系人证件的正面照片。 2、若证件类型为身份证,为人像面照片。 | +| contactIdDocCopyBack | String | O | 联系人证件反面照片图片地址 | +| contactPeriodBegin | String | O | 联系人证件有效期开始时间1、当联系人类型是经办人时,为证件有效期开始时间 示例值:2019-06-06 | +| contactPeriodEnd | String | O | 联系人证件有效期结束时间1、当联系人类型是经办人时,为证件有效期结束时间 2、若证件有效期为长期,为:长期。 3、结束时间大于开始时间。 示例值:2026-06-06 | +| businessAuthorizationLetter | String | O | 业务办理授权函图片地址参照[[示例图](https://kf.qq.com/faq/220509Y3Yvym220509fQvYR7.html)] | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "9331019280" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "merchantId": "1031016637", + "specialOperationList": [ + { + "operationCopyList": [ + "128.txt", + "121.txt" + ], + "categoryId": 41 + }, + { + "operationCopyList": [ + "126.txt", + "122.txt" + ], + "categoryId": 46 + } + ], + "companyProveCopy": "123.txt", + "idHolderType": null, + "isFinanceInstitution": null, + "certificateInfo": { + "certNumber": "111111111111", + "certType": "CERTIFICATE_TYPE_2388", + "legalPerson": "李四", + "companyAddress": "广东省深圳市南山区xx路xx号", + "certValidDate": "[\"1970-01-01\",\"forever\"]", + "certCopy": "123.txt", + "merchantName": "xx公益团体" + }, + "financeInstitutionInfo": null, + "uboInfos": null, + "contactInfo": null + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如merchantId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "merchantId不能为空", + "count": 0, + "data": null +} +``` + +## 终端服务 + +### 终端信息采集 + +代理商可通过此接口将交易所用终端信息报备给银联,被扫类交易终端最好都要进行报备。 + +> - **URL**:`/open-api/terminal/collect` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 乐刷商户号 | +| deviceId | String | C | 乐刷终端编号 | +| subMchId | String | O | 选填,指定子商户上报时传 | +| channel | String | O | 选填,默认A,T,U。如果指定上报子商户号,该子商户号要和channel匹配 | +| operationId | String | M | 操作符,00:新增,01:修改 ,02:注销 | +| terminalType | String | M | 设备类型,具体见下表。 | +| terminalState | String | M | 终端状态,00:新增,01:注销 | +| serialNum | String | C | 选填,终端序列号,终端类型(terminalType)填写为01、05、08、09、10、12、14、15时必填 时,必须填写终端序列 号。这些设备类型监管组织会校验序列号正确性,不正确会采集失败。 | +| provinceNo | String | O | 省编码,乐刷地区码。不传默认用商户地址 | +| cityNo | String | O | 市编码,乐刷地区码。不传默认用商户地址 | +| areaNo | String | O | 区编码,乐刷地区码。不传默认用商户地址 | +| terminalAddress | String | O | 详细地址,30个字以内。不传默认用商户地址 | + +设备类型对应表 + +| 外放 | 含义 | +| --- | --- | +| 01 | POS | +| 02 | MIS | +| 03 | ATM | +| 04 | CDM | +| 05 | II型电话支付终端(商用型) | +| 06 | 自定义1 | +| 07 | 自定义2 | +| 08 | 智能POS | +| 09 | mPOS | +| 10 | 人脸识别终端 | +| 11 | 条码支付辅助终端 | +| 12 | 条码支付受理终端 | +| 13 | 行业终端 | +| 14 | 云闪付终端 | +| 15 | 手机POS | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| deviceId | String | M | 终端序列号,只在有一个通道上报成功有返回 | +| WECHAT | Object | M | 微信通道结果 | +| ALIPAY | Object | M | 支付宝通道结果 | +| UNION_QRC | Object | M | QRC通道结果 | +| UNION_QRA | Object | M | QRA通道结果 | + +Object中内容均为 + +| 参数 | 类型 | 长度限制 | 说明 | +| --- | --- | --- | --- | +| respCode | String | 无 | 0为成功,其他为失败 | +| respMsg | String | 无 | 返回信息 | + +#### 请求示例 + +```json +{ + "agentId": "5963222", + "sign": "KJDwyUguVDrlI0P/MNu3V+lgw+Ba0J0qOTG2Rm9WGbI=", + "currentAgentId": "5963222", + "data": { + "merchantId": "3313011797", + "operationId": "00", + "terminalType": "08", + "terminalState": "00", + "serialNum": "TEST00237" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "UNION_QRA": { + "respCode": "0", + "respMsg": "success" + }, + "UNION_QRC": { + "respCode": "1", + "respMsg": "不存在子商户号" + }, + "deviceId": "5epCWB7W", + "ALIPAY": { + "respCode": "0", + "respMsg": "success" + }, + "WECHAT": { + "respCode": "0", + "respMsg": "success" + } + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +### 终端采集查询 + +代理商可通过此接口查询终端报备状态。 + +> - **URL**:`/open-api/terminal/search` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户号 | +| serialNum | String | C | 终端序列号 | +| deviceId | String | C | 乐刷终端编码 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| **data** | List | O | 数据 | +| merchantId | String | O | 商户号 | +| subMchId | String | O | 子商户号 | +| deviceId | String | O | 乐刷终端编号 | +| channel | String | O | 通道:A-支付宝,T-微信,UA:银联QRA,UC:银联QRC | +| terminalType | String | O | 类型 | +| terminalState | String | O | 状态 | +| serialNum | String | O | 序列号 | +| terminalAddress | String | O | 地址 | +| provinceNo | String | O | 乐刷省编码 | +| cityNo | String | O | 乐刷市编码 | +| areaNo | String | O | 乐刷区编码 | + +#### 请求示例 + +```json + +{ + "agentId": "5963222", + "sign": "x4udy6FT2nqkvYIC3g3HezMdDh/J4KHqpzzNqCYf90I=", + "currentAgentId": "5963222", + "data": { + "merchantId": "3313011797", + "serialNum": "TEST00237" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "data": [ + { + "terminalState": "00", + "cityNo": "440300", + "serialNum": "TEST00208", + "merchantId": "3313011797", + "areaNo": "440305", + "provinceNo": "440000", + "channel": "A", + "terminalAddress": "科兴科技园A1栋1201", + "subMchId": "2088410909086933", + "deviceId": "5DTVKfjd", + "terminalType": "08" + }, + { + "terminalState": "00", + "cityNo": "440300", + "serialNum": "TEST00208", + "merchantId": "3313011797", + "areaNo": "440305", + "provinceNo": "440000", + "channel": "T", + "terminalAddress": "科兴科技园A1栋1201", + "subMchId": "487490082", + "deviceId": "5DTVKfjd", + "terminalType": "08" + } + ] + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +## + +## **常用枚举** + +### **商户状态码** + +| 编码 | 状态 | +| --- | --- | +| 0 | 待审核 | +| 1 | 审核通过 | +| 2 | 审核不通过 | +| 4 | 资料待完善 | +| -1 | 未知状态 | + +### 证件类型 + +| 编码 | 状态 | +| --- | --- | +| 1 | 身份证 | +| ~~2~~ | ~~港澳台通行证~~ | +| ~~3~~ | ~~台湾身份证~~ | +| ~~4~~ | ~~香港身份证~~ | +| ~~5~~ | ~~澳门身份证~~ | +| 6 | 护照 | +| ~~7~~ | ~~居住证~~ | +| 9 | 其他法定证件 | +| 10 | 港澳居民来往内地通行证(回乡证) | +| 11 | 台湾同胞来往内地通行证(台胞证) | +| 12 | 外国人永久居留身份证 | +| 13 | 港澳居民居住证 | +| 14 | 台湾居民居住证 | +| 15 | 执行事务合伙人 | diff --git a/docs/联合收单接口文档/07-商户交易.md b/docs/联合收单接口文档/07-商户交易.md new file mode 100644 index 0000000..26c1e2a --- /dev/null +++ b/docs/联合收单接口文档/07-商户交易.md @@ -0,0 +1,1526 @@ +# 商户交易 + +> 来源: + +## + +### API目录 + +| **分类** | **接口中文名** | **接口英文名** | **描述** | +| --- | --- | --- | --- | +| 下单接口 | [统一下单接口](#YGAT6) | /cgi-bin/lepos_pay_gateway.cgi | 主扫,C扫B。消费者主动扫码。 | +| 条码支付 | [条码支付](#AGDJI) | /cgi-bin/lepos_pay_gateway.cgi | 被扫,B扫C。消费者出示付款码被扫。 | +| 交易结果 | [支付结果通知](#93D6z) | / | 返回支付结果。**影响推送的因素较多,建议接交易结果查询接口。** | +| [交易结果查询](#yEuUU) | /cgi-bin/lepos_pay_gateway.cg | 查询交易结果 | | +| 退款 | [退款](#Mh3kb) | /cgi-bin/lepos_pay_gateway.cgi | 进行退款操作 | +| [退款查询](#2D2fx) | /cgi-bin/lepos_pay_gateway.cgi | 查询退款信息 | | +| [退款结果通知](#ZQ0tK) | ​ | 查看退款结果 | | +| 订单关闭接口 | [订单关闭](#z9MWc) | /cgi-bin/lepos_pay_gateway.cgi | 关闭订单 | +| 授权码 | [授权码查询用户openid](#F3rn1) | /cgi-bin/lepos_pay_gateway.cgi | 查询openid | +| [授权码获取银联云闪付用户ID](#DprGi) | ​ | 获取云闪付用户ID | | +| 异步通知 | [刷卡、扫码支付异步通知](#ZD2Om) | ​ | ​ | + +### **​**数字签名 + +(1)为了保证数据传输过程中的数据真实性和完整性,我们需要对数据进行数字签名,在接收签名数据之后进行签名校验。 + +(2)签名有两个步骤,先按一定规则拼接要签名的原始串,再选择具体的算法和密钥计算出签名结果。 + +(3)原始串中,字段名和字段值都采用原始值,不进行URL Encode。 + +(4)平台返回的应答或通知消息可能会由于升级增加参数,请验证应答签名时注意允许这种情况。 + +### 签名方法 + +(1)设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 + +(2)在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 + +### 签名样例 + +(1)假设需要传递的参数如下: + +```plain +server:query_status +merchant_id:1234567890 +third_order_id:12345678901 +nonce_str:12345678901 +``` + +(2)对参数按照key=value的格式,并按照参数名ASCII字典序排序如下 + +```plain +stringA=merchant_id=1234567890&nonce_str=12345678901&server=query_status&third_order_id=12345678901 +``` + +(3)拼接商户秘钥key + +```plain +stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d" //注:key为商户密钥key +``` + +(4)计算签名 + +```plain +交易报文MD5计算:sign=MD5(stringSignTemp).toUpperCase() +通知报文MD5计算:sign=MD5(stringSignTemp).toLowerCase() +交易报文SM3计算:sign=SM3(stringSignTemp).toUpperCase() +通知报文SM3计算:sign=SM3(stringSignTemp).toLowerCase() +``` + +注:md5加密为32位。 **注**:SM3签名为64位 (1)设所有请求数据为集合M(请求数据中需上送**sign_type**为**SM3**,不上送默认为使用MD5),将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序), + +使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 + +(2)在stringA最后拼接上key得到stringSignTemp字符串, + +并对stringSignTemp进行SM3运算,再将得到的字符串所有字符转换为大写,得到sign值signValue + +### 特别注意 + +(1)请求数据验签方法 + +```plain +除sign、leshua、resp_code字段外,其他参数按照签名方法验签,空值不传递,不参与签名组串。 +``` + +(2)应答数据验签方法 + +```plain +除sign、leshua、resp_code字段外,其他参数按照签名方法验签,空值参与签名组串。 +(注:微信刷脸接口是全字段加签) +``` + +(3)支付结果通知验签方法 + +```plain +除sign、leshua、error_code字段外,其他参数按照签名方法验签,空值参与签名组串。 +``` + +交易接口签名测试类: + +### 判断付款码规则 + +```java +支付宝:支付授权码,25~30开头的长度为16~24位的数字, 实际字符串长度以开发者获取的付款码长度为准 +微信:扫码支付授权码,设备读取用户微信中的条码或二维码信息(注:用户刷卡条形码规则:18位纯数字以10、11、12、13、14、15开头) +银联二维码:62开头19位数字 +数字人民币:0100开头的数字,其中01002 工行(数字人民币的不完整,后续会有改动) +01003 农行 +01004 中行 +01005 建行 +01007 网商 +01008 邮储 +01009 交通银行 +``` + +### 交易接入指引 + +简易支付: + +付款码: + +微信小程序: + +微信公众号(JSAPI): + +微信APP: + +支付宝小程序: + +支付宝公众号(JSAPI): + +支付宝Native: + +支付宝APP: + +### 1、统一下单(主扫:C扫B) + +#### 1.1接口说明 + +代理商在C扫B场景调用此支付接口完成下单,支持支付宝拉码支付、公众号支付、服务窗支付、银联JS支付、微信小程序支付。 + +测试商户信息及请求密钥和回调密钥请联系我们获取。 + +生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司。 + +#### 1.2请求方式 + +POST + +#### 1.3请求地址 + +测试环境域名:https://t-paygate.lepass.cn + +生产环境域名:https://paygate.leshuazf.com + +接口地址:/cgi-bin/lepos_pay_gateway.cgi + +#### 1.4频率限制 + +4000次/s + +#### 1.5业务入参 + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| service | M | 无 | string | **接口名**get_tdcode(此为固定值) | +| t0 | O | 无 | int | **T0交易标志**默认为0,0:d1交易 1:d0交易 | +| sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| pay_way | M | 16 | string | **支付类型**详见下方[支付类型](#nlHUH) | +| merchant_id | M | 10 | string | **乐刷商户号**由乐刷分配 | +| user_name | O | 无 | string | 收银员名称 | +| third_order_id | M | 64 | string | **商户内部订单号**可以包含字母:确保同一个商户下唯一 | +| amount | M | 10 | string | **订单总金额**单位为分,金额不能为零或负数金额为纯数字字符串,不能传小数如 "5.00" | +| jspay_flag | M | 1 | **string** | **支付类型**0-支付宝Native扫码支付、银联Native扫码支付;1-微信JSAPI、支付宝JSAPI支付、银联JSAPI支付;2-微信、支付宝简易支付<跳转乐刷收银台支付>;3-微信小程序支付、支付宝小程序支付注:1)微信拉码支付已下线;2)如需接入银联JS支付,请联系乐刷运营沟通域名报备。3)数字货币支付当前仅支持jspay_flag=0 | +| royalty | O | 1 | string | 交易分账标识0:普通交易 1:分账(用于分账的交易需传该参数) 2:交易主体分账(延迟结算) 3:预授权注:如果未传该字段默认为0,按不分账处理 | +| appid | M | 32 | string | **appid**条件必填,微信支付时必填。填微信公众号支付的公众号id或微信小程序支付的小程序appid;传了会使用此appid 进行下单 | +| sub_openid | [C](#eFgvt) | 32 | string | **sub_openid**微信JSAPI、微信小程序、支付宝JSAPI、支付宝小程序、银联JSAPI支付必填 | +| extend_business_params | O | 无 | string | 该字段 为JSON格式的字符串,当前可透传支付宝的参数见下表具体格式详见文档下方:[业务拓展参数示例](#5u5k5)注:花呗分期商家订单传参贴息示例:"extend_business_params":"{\"business_params\":{ \"enable_thirdparty_subsidy\":\"N\"}}"如果第三⽅贴息活动为全场贴息,默认可贴息,传⼊ N 值则本笔交易禁⽤三⽅贴息; 如果第三⽅贴息活动为指定订单传参贴息,默认禁⽤贴息,传⼊Y 值则本笔交易启⽤三⽅贴息 | +| jump_url | C | 128 | string | **前台跳转地址**简易支付时必填,完成后,乐刷将跳转到该页面,需做UrlEncode 处理 (受微信支付宝限制,已失效,可不传) | +| notify_url | O | 128 | string | **通知地址**接收乐刷通知(支付结果通知)的URL,需做UrlEncode 处理,需要绝对路径,确保乐刷能正确访问,若不需要回调请忽略注意:如运营后台配置了交易回调地址,同时下单接口也上送了回调地址,会优先使用下单接口上送的地址 | +| client_ip | O | 16 | string | **商户发起交易的IP地址** | +| body | O | 256 | string | **商品描述**不能包含回车、换行等特殊字符。对应支付宝的subject参数、微信的body参数。银联扫码不上送该参数给银联。如有特殊字符需要对整个body进行 urlencode转化,但是加签时还是用转化前的body来加签。该信息会展示在微信付款页面的“商品”中 | +| shop_no | O | 16 | string | **商户门店编号**只能是汉字、英文字母、数字。注:该参数不上传给微信、支付宝 | +| pos_no | O | 16 | string | **商户终端编号**只能是汉字、英文字母、数字 注意:银联类型交易时,只能 8位:数字字母 不支持 特殊字符 | +| attach | O | 96 | string | **附加数据**下单成功原样返回;注意:只能是汉字、英文字母、数字 | +| limit_pay | O | 1 | string | **指定支付方式**1:禁止使用信用卡;0或者不填:不限制 | +| goods_tag | O | 32 | string | **订单优惠标记**订单优惠标记(订单级别-品类级别),透传给微信,对应微信的`goods_tag`字段。微信会自动进行优惠匹配计算和核销。用于给整个订单打上一个"标签",主要用于**代金券立减优惠场景**,示例:`"coffee"`。 | +| goods_detail | O | 8000 | string | **单品详情****微信**单品级详细信息,透传给微信,对应微信的`detail`字段,**注意**不是对应`detail.goods_detail`字段。微信会自动进行优惠匹配计算和核销。按微信单品优惠券格式传递透传给微信,请做UrlEncode示例:`{"goods_detail":[{"merchant_goods_id":"xiaomi_14_pro","goods_name":"小米14 Pro","quantity":1,"unit_price":499900}]}`​ **银联**银联扫码交易时,透传给银联的“收款方附加数据”acqAddnData参数,当前银联的单品营销及扫码点餐均使用到该参数,具体参数格式及说明见:[银联收款方附加数据](#lUVoy)。 | +| order_expiration | O | 无 | string | **订单有效时间**单位:秒(支付宝的超时时间最小粒度为分钟,建议上送的为60的整数倍)最大时效600s | +| hb_fq_num | O | 无 | string | **花呗分期数**支付宝花呗分期数,支持3、6、12期 | +| front_url | C | 无 | string | **前端跳转地址**银联JSAPI支付时选填,支付成功时跳转 | +| front_fail_url | C | 无 | string | **支付失败前端跳转地址**银联JSAPI支付时选填,支付失败时跳转 | +| nonce_str | M | 32 | string | **随机字符串** | +| sign | M | 32 | string | **签名**MD5签名结果 | +| device_info | O | 32 | string | **设备编号**针对微信、支付宝有效,透传至银联。微信:数字、字母、下划线格式支付宝:目前支持非0开头的数字 | +| store_id | O | 32 | string | **门店编号**针对微信、支付宝有效,透传至银联。微信:数字、字母、下划线格式 | +| ass_merchant_id | O | 32 | string | **通道商户号**非必填。可使用指定的微信、支付宝子商户号进行交易,一个乐刷商户号有多个通道商户号情况下可用。注:对应乐刷商户号大于200条时不能传该参数 | +| pnrins_id_cd | O | 32 | string | **银联服务商标识**银联扫码交易时,透传给银联,对应银联的 pnrInsIdCd参数。 | +| gps_info | O | 512 | string | **gps信息**校验GPS信息格式, 如:-128.12,23.1 -- 1. xxx,xxx -- 2. 经度xxx为[-180,180]之间的浮点数,维度xxx为[-90,90]之间的浮点数,最多保留小数点八位float(11,8) | +| bs_info | O | 512 | string | **基站信息**校验基站信息格式, 格式说明: -- 1. 格式为:xxx,xxx,xxx,xxx 如:460,1,12,23454 -- 2. xxx均为整数,长度不超过11位​ 基站信息,从左至右依次对应以下几个字段: mcc: 移动国家号码,由3位数字组成,唯一地识别移动用户所属的国家。我国为460 mnc:移动网号,由两位数字组成,用于识别移动用户所归属的移动网 lac:位置区编码,为寻呼而设置的一个区域,覆盖一片地理区域,按寻呼量划分 ci :负责收发的天线所朝向的扇区编号 | +| extend_business_params | O | - | string | 见下extend_business_params参数表 | +| scene_info | O | - | string | 该字段用于上报场景信息,仅针对微信交易有效,目前支持上报实际门店信息。该字段 为JSON格式的字符串,对象格式为{"store_info":{"id": "门店 ID","name ": "名称","area_code": "编码","address": "地址"}} ,字段详细说明参考下文。 | +| need_receipt | O | - | boolean | 电子发票功能。仅针对微信交易有效,需要和微信公众平台的发票功能联合使用。枚举:(只能为true或false,只支持全小写字母或全大写字母) truefalse | +| terminal_info | M | - | **String** | 商户侧受理终端信息**terminal_info为String类型,内容为json**:terminal_info="{\"longitude\":\"-121.48352\",\"latitude\":\"+31.221345\",\"network_license\":\"P3100\",\"device_type\":\"01\",\"device_id\":\"54MPDz39\",\"serial_num\":\"5\",\"app_version\":\"v1.1.1\",\"device_ip\":\"252.1.1.25\"}"​ **terminal_info不能为空**,如无终端信息则按此规则传参:**device_type和serial_num必传:****device_type固定传11****serial_num=lhsd+商户编号**​ json内各参数说明longitude:经度,+代表东经,-代表西经。latitude:纬度,+代表北纬,-代表南纬。network_license:银行卡受理终端入网编号。该编号由“中国银联标识产品企业资质认证办公室”为通过入网认证的终端进行 分配。银联直连终端必填。 格式:5 位字符,例如 P3100device_type:设备类型,01:自动柜员机(含 ATM 和 CDM)和 多媒体自助终端 02:传统 POS 03:mPOS 04:智能 POS 05:II 型固定电话 06:云闪付终端; 07:保留使用; 08:手机 POS; 09:刷脸付终端; 10:条码支付受理终端; 11:条码支付辅助受理终端; 12:行业终端(公交、地铁用于指定行 业的终端); 13:MIS 终端;​ serial_num:设备序列号,设备类型02、 03、04、05、06、08、09 或 10 时必填encrypt_rand_num:仅在被扫支付类交易报文中出现:若付 款码为 19 位数字,则取后 6 位; 若付款码码为 EMV 二维码,则取其 tag 57 的卡号/token 号的后 6 位secret_text:仅在条码支付交易报文中出现:64bit 的密文数据,对终端硬件序列号和加密 随机因子加密后的结果。 本子域取值为:64bit 密文数据进行 base64 编码后的结果。该字段需要服务商和厂商联调时由厂商sdk之类加密后给出。app_version:终端应用程序的版本号。应用程序变更 应保证版本号不重复。当长度不足时, 右补空格。固定8位device_ip:终端交易IP。如经、维度信息未上送,该字段必送。 | + +**extend_business_params 参数表** + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| business_params | O | - | String | ​ | +| goods_detail | O | - | String | ​ | +| extend_params | O | - | String | ​ | +| seller_id | O | 28 | String | 卖家支付宝用户 ID。如果该值为空,则默认为商户签约账号对应的支付宝用户 ID | +| discountable_amont | O | 11 | Price | 参与优惠计算的金额,单位为元,精确到 小 数 点 后 两 位 , 取值范围[0.01,100000000]。 如果该值未传入,但传入了【订单总金额】和【不可打折金额】,则该值默认为【订单总金额】-【不可打折金额】 | +| undiscountable_amount | O | 11 | Price | 不参与优惠计算的金额,单位为元,精确 到 小 数 点 后 两 位 , 取 值 范 围[0.01,100000000]。如果该值未传入,但传入了【订单总金额】和【可打折金额】,则该值默认为【订单总金额】-【可打折金额】 | +| buyer_logon_id | O | 100 | String | 买家支付宝账号 | +| operator_id | O | 28 | String | 商户操作员编号 | +| enable_pay_channels | O | 128 | String | 可用渠道,用户只能在指定渠道范围内支付。当有多个渠道时用“,”分隔,与 disable_pay_channels 互 斥。 | +| settle_info | O | - | SettleInfo | 描述结算信息,json 格式,详见结算参数说明 | +| alipay_store_id | O | 32 | String | 支付宝的店铺编号 | +| ext_user_info | O | - | ExtUserInfo | 外部指定买家 | +| qr_code_timeout_express | O | 6 | String | 该笔订单允许的最晚付款时间,逾期将关闭交易,从生成二维码开始计时。取值范围:1m~15d。 m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在 0 点关闭)。 该参数数值不接受小数点,如 1.5h,可转换为90m。(对应jspay_flag为0时) | +| merchant_order_no | O | 32 | String | 商户原始订单号,最大长度限制32 位(对应jspay_flag为1/2/3时) | +| disable_pay_channels | O | 64 | String | 禁用支付渠道,多个渠道以逗号分割,如 同时禁用信用支付类型和积分,则 disable_pay_channels="cre dit_group,point" 具体的渠道以支付宝或者银联提供的为准 | + +**场景信息scene_info字段说明(当前仅针对微信交易会透传给微信):** + +| **名称** | **参数名** | **必填** | **类型** | **示例值** | **描述** | +| --- | --- | --- | --- | --- | --- | +| 门店Id | id | 否 | String(32) | SZTX001 | 门店唯一标识 | +| 门店名称 | name | 否 | String(64) | 腾讯大厦腾大餐厅 | 门店名称 | +| 门店行政区划码 | area_code | 否 | String(6) | 440305 | 门店所在地行政区划码 | +| 门店详细地址 | address | 否 | String(128) | 科技园中一路腾讯大厦 | 门店详细地址 | + +#### 1.6业务出参 + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| resp_code | M | 无 | string | **返回状态码**0 - 成功,非0 - 失败。注:此字段是通信标识,是否获取到二维码要看result_code | +| resp_msg | C | 无 | string | **返回错误信息**错误描述:resp_code非0时返回 | +| result_code | M | 1 | string | **业务结果**0 - 成功,非0 - 失败 | +| error_code | O | 无 | string | **错误码**[参考错误码信息表](#rOC0m) | +| error_msg | O | 无 | string | **错误信息描述** | +| attach | O | 96 | string | **附加数据**原样返回;注意:只能是汉字、英文字母、数字 | +| merchant_id | M | 10 | string | **乐刷商户号**由乐刷分配 | +| sub_merchant_id | M | 无 | string | **通道商户号**微信、支付宝、QRC商户号 | +| third_order_id | M | 64 | string | **商户内部订单号** | +| nonce_str | M | 32 | string | **随机字符串** | +| sign | M | 32 | string | **MD5签名结果** | +| td_code | C | 无 | string | **二维码链接**非公众号支付返回,可直接通过该链接生成二维码扫码支付(jspay_flag传0-2该字段才会返回) | +| jspay_info | C | 无 | string | **支付信息**原生公众号、服务窗、小程序,返回json格式字符串、银联JS支付返回URL,用云闪付打开此链接即可调起支付 生效时间:默认10分钟,具体时间看订单有效时间 | +| jspay_url | C | 无 | string | **支付跳转地址**简易支付时返回。重定向到该url可以完成后续支付流程。返回二维码链接有效期为10分钟; | +| leshua_order_id | M | 32 | string | **乐刷订单号** | +| pay_way | M | 无 | string | **支付类型**[详见下方支付类型](#nlHUH) | +| cost_time | C | 无 | string | **请求耗时**请求接口耗费的时间 | +| channel_flag | O | 32 | string | **通道标记**GXST:高校食堂PUBWEL:公益PUBPAY:公缴ZFBLH:支付宝新蓝海SLZXY:私立中小幼INS:保险ONLINE:线上YLLZ:绿洲 | +| alipay_infos | O | | | trade_no:银联交易号 | + +**注意事项** + +(1)所有涉及到金额的单位都位分,币种为RMB,最小为1分,不允许出现小数 + +(2)文档中参数,标识为必填必须上送(如果缺少会报错),非必填的可填可不填(简易支付"支付跳转地址"字段为必传), + +(3)返回参数中必填为是的参数是一定会返回的,必填为否的参数则不一定返回,因升级或配置等情况实际返回参数可能不会跟文档完全一致,必须以实际接收到的参数为准 + +##### 获取微信用户openid + +```http +https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_CN +``` + +##### 获取支付宝用户openid + +```http +https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8ujLD6&treeId=115&articleId=104114&docType=1 +``` + +**公众号支付请求示例** + +1、请求格式如下: + +```json +https://paygate.leshuazf.com/cgi-bin/lepos_pay_gateway.cgi?amount=1& +appid=wx00e59fa8be9ba128&jspay_flag=1&merchant_id=3219113278& +nonce_str=lnxouwc0r7l93453x5&order_expiration=60&pay_way=WXZF&service=get_tdcode& +sub_openid=oe5BX0qaVuC5vqYdj65GlUcyAVUM&third_order_id=202004271809453917&sign=2A500B7F906284717212304A9BCFB33D +``` + +**返回示例** + +1、响应格式如下: + +```json + + + + + + + + + + + + +``` + +**支付宝拉码支付请求示例** + +1、请求格式如下: + +```json +https://t-paygate.lepass.cn/cgi-bin/lepos_pay_gateway.cgi?amount=1&jspay_flag=0 +&merchant_id=0000000018&nonce_str=w1hxpdiu9nkjfw5qrp&order_expiration=60& +pay_way=ZFBZF&service=get_tdcode&third_order_id=202004291733230374& +sign=340DB607E3BEE2BAE60807B3601008E2 +``` + +**返回示例** + +1、响应格式如下: + +```json + + + + + + + + + + + + +``` + +### 2、条码支付(被扫:B扫C) + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | [M](#eFgvt) | 无 | string | upload_authcode(此为固定值) | +| t0交易标志 | t0 | O | 无 | int | 默认为0,0:d1交易 1:d0交易 | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 付款码 | auth_code | M | 无 | string | 支持以下付款码:微信数字付款码支付宝数字付款码云闪付APP 62开头付款码银行APP 62开头付款码数字人民币APP付款码(0100开头)支付宝刷脸付款码(fp开头) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号,可以包含字母:确保同一个商户下唯一 | +| 订单金额 | amount | M | 10 | string | 总金额 | +| 商户公 众账号 ID | appid | O | 32 | string | 商户或者商户所属渠道号主体的公众号appid,由微信统一分配,仅对微信交易生效,传送前请确定商户和该appid已经建立绑定关系 | +| 分账标识 | royalty | O | 1 | string | 交易分账标识0:普通交易 1:分账(用于分账的交易需传该参数) 2:交易主体分账(延迟结算) 3:预授权注:如果未传该字段默认为0,按不分账处理 | +| 通知地址 | notify_url | [O](#eFgvt) | 128 | string | 接收乐刷通知的URL,需做UrlEncode 处理,需要绝对路径,确保乐刷能正确访问,若不需要回调请忽略 | +| 用户IP地址 | client_ip | O | 16 | string | 商户发起交易的IP地址 | +| 商品描述 | body | O | 256 | string | 商品描述,不能包含回车换行等特殊字符 | +| 商户门店编号 | shop_no | O | 16 | string | 只能是汉字、英文字母、数字 | +| 商户终端编号 | pos_no | O | 16 | string | 只能是汉字、英文字母、数字 注意:银联类型交易时,只能 8位:数字字母 不支持 特殊字符 | +| 附加数据 | attach | O | 96 | string | 支付成功原样返回;注意:只能是汉字、英文字母、数字 | +| 指定支付方式 | limit_pay | O | 1 | string | 1:禁止使用信用卡;0或者不填:不限制 | +| 订单优惠标记 | goods_tag | O | 32 | string | 订单优惠标记,透传给微信 | +| 商品详情 | goods_detail | O | 8000 | string | 按[微信单品优惠券格式](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1)传递,透传给微信;银联扫码交易时,透传给银联的“收款方附加数据”acqAddnData参数,当前银联的单品营销及扫码点餐均使用到该参数,具体参数格式及说明见:[银联收款方附加数据](#lUVoy)。 | +| 花呗分期数 | hb_fq_num | O | 无 | string | 支付宝花呗分期数,支持3、6、12期 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 业务拓展参数 | extend_business_params | O | 8000 | string | 该字段 为JSON格式的字符串,当前可透传支付宝的参数见下表具体格式详见文档下方:[业务拓展参数示例](#5u5k5)注:花呗分期商家订单传参贴息示例:"extend_business_params":"{\"business_params\":{ \"enable_thirdparty_subsidy\":\"N\"}}"如果第三⽅贴息活动为全场贴息,默认可贴息,传⼊ N 值则本笔交易禁⽤三⽅贴息; 如果第三⽅贴息活动为指定订单传参贴息,默认禁⽤贴息,传⼊Y 值则本笔交易启⽤三⽅贴息 | +| 设备编号 | device_info | O | 32 | string | 针对微信、支付宝有效,透传至银联。微信:数字、字母、下划线格式支付宝:目前支持非0开头的数字 | +| 门店编号 | store_id | O | 32 | string | 针对微信、支付宝有效,透传至银联。微信:数字、字母、下划线格式支付宝:目前支持非0开头的数字 | +| 通道商户号 | ass_merchant_id | O | 32 | string | 非必填。可使用指定的微信、支付宝子商户号进行交易,一个乐刷商户号有多个通道商户号情况下可用。注:对应乐刷商户号大于200条时不能传该参数 | +| 银联服务商标识 | pnrins_id_cd | O | 32 | string | 银联扫码交易时,透传给银联,对应银联的 pnrInsIdCd参数。 | +| **gps信息** | gps_info | O | 512 | string | 校验GPS信息格式, 如:-128.12,23.1 -- 1. xxx,xxx -- 2. 经度xxx为[-180,180]之间的浮点数,维度xxx为[-90,90]之间的浮点数,最多保留小数点八位float(11,8) | +| ** 基站信息** | bs_info | O | 512 | string | 校验基站信息格式, 格式说明: -- 1. 格式为:xxx,xxx,xxx,xxx 如:460,1,12,23454 -- 2. xxx均为整数,长度不超过11位​ 基站信息,从左至右依次对应以下几个字段: mcc: 移动国家号码,由3位数字组成,唯一地识别移动用户所属的国家。我国为460 mnc:移动网号,由两位数字组成,用于识别移动用户所归属的移动网 lac:位置区编码,为寻呼而设置的一个区域,覆盖一片地理区域,按寻呼量划分 ci :负责收发的天线所朝向的扇区编号 | +| 场景信息 | scene_info | O | | string | 该字段用于上报场景信息,仅针对微信交易有效,目前支持上报实际门店信息。该字段 为JSON格式的字符串,对象格式为{"store_info":{"id": "门店 ID","name ": "名称","area_code": "编码","address": "地址"}} ,字段详细说明参考下文。 | +| 电子发票功能 | need_receipt | O | | boolean | 电子发票功能。仅针对微信交易有效,需要和微信公众平台的发票功能联合使用。枚举:(只能为true或false,只支持全小写字母或全大写字母) truefalse | +| 交易终端信息 | terminal_info | M | | String | 商户侧受理终端信息,格式为json 格 式。 如terminal_info= { "longitude":"-121.48352",#option "latitude":"+31.221345",#option "network_license":"P3100", "device_type":"01", "device_id":"54MPDz39", "serial_num":"5", "app_version": "v1.1.1" , "device_ip": "252.1.1.25" , }​ json内各参数说明longitude:经度,+代表东经,-代表西经。latitude:纬度,+代表北纬,-代表南纬。network_license:银行卡受理终端入网编号。该编号由“中国银联标识产品企业资质认证办公室”为通过入网认证的终端进行 分配。银联直连终端必填。 格式:5 位字符,例如 P3100device_type:设备类型,01:自动柜员机(含 ATM 和 CDM)和 多媒体自助终端 02:传统 POS 03:mPOS 04:智能 POS 05:II 型固定电话 06:云闪付终端; 07:保留使用; 08:手机 POS; 09:刷脸付终端; 10:条码支付受理终端; 11:条码支付辅助受理终端; 12:行业终端(公交、地铁用于指定行 业的终端); 13:MIS 终端;​ serial_num:设备序列号,设备类型02、 03、04、05、06、08、09 或 10 时必填encrypt_rand_num:仅在被扫支付类交易报文中出现:若付 款码为 19 位数字,则取后 6 位; 若付款码码为 EMV 二维码,则取其 tag 57 的卡号/token 号的后 6 位secret_text:仅在条码支付交易报文中出现:64bit 的密文数据,对终端硬件序列号和加密 随机因子加密后的结果。 本子域取值为:64bit 密文数据进行 base64 编码后的结果。该字段需要服务商和厂商联调时由厂商sdk之类加密后给出。app_version:终端应用程序的版本号。应用程序变更 应保证版本号不重复。当长度不足时, 右补空格。固定8位device_ip:终端交易IP。如经、维度信息未上送,该字段必送。​ **device_type和serial_num必传:****device_type固定传11****serial_num=lhsd+商户编号**​ | + +extend_business_params参数: + +| **变量名** | **必填** | **限制** | **类型** | **说明** | 示例 | +| --- | --- | --- | --- | --- | --- | +| business_params | O | - | Object | 商户传入业务信息,应用于安全,营销 等参数直传场景,格式为 json 格式。 | | +| goods_detail | O | - | Array | 订单包含的商品列表信息,数组格式。一般在支付宝扫码点餐业务中上传点餐的商品信息 | [{"goods_id": "5544", "goods_name": "爽口青笋丝","price": "0.50","quantity": 2,"goods_category": "888", "categories_tree": "888","body": "爽口青笋丝","show_url":"pageFoodChain/storeDetail/main?suid=10"}] | +| ┖goods_id | M | 32 | String | 商品的编号 | | +| ┖alipay_goods_id | O | 32 | String | 支付宝定义的统一商品编号 | | +| ┖goods_name | M | 256 | String | 商品名称 | | +| ┖quantity | M | 10 | Number | 商品数量 | | +| ┖price | M | 9 | Price | 商品价格,单位为元 | | +| ┖goods_category | O | 24 | String | 商品类目 | | +| ┖categories_tree | O | 128 | String | 商品类目数,从商户品类目根节点到叶子节点的类目id组成,类目id使用\|分割 | 124868003\|126 232002\|126252 004 | +| ┖body | O | 1000 | String | 商品描述信息 | | +| ┖show_url | O | 400 | String | 商品的展示地址 | http://www.alipay.co m/xxx.jpg | +| extend_params | O | - | Object | 支付宝业务扩展参数 | | +| ┖sys_service_provid er_id​ | O | ​ | String | ​ | | +| ┖hb_fq_num | O | ​ | String | ​ | | +| ┖hb_fq_seller_percent | O | ​ | String | ​ | | +| ┖industry_reflux_info | O | ​ | String | ​ | | +| ┖card_type | O | ​ | String | ​ | | +| ​ | ​ | ​ | ​ | ​ | | +| ​ | ​ | ​ | ​ | ​ | | +| ┖ | ​ | ​ | ​ | ​ | | +| ┖ | ​ | ​ | ​ | ​ | | +| ┖ | ​ | ​ | ​ | ​ | | +| ┖ | ​ | ​ | ​ | ​ | | +| seller_id | O | 28 | String | 如果该值为空,则默认为商户签约账号对应的支付宝用户ID预授权场景下无需上送 | | +| discountable_amont | O | 11 | Price | 参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。 如果该值未传入,但传入了【订单总金额】和【不可打折金额】,则该值默认为【订单总金额】-【不可打折金额】 | | +| undiscountable_amount | O | 11 | Price | 不参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。如果该值未传入,但传入了【订单总金额】和【可打折金额】,则该值默认为【订单总金额】-【可打折金额】 | | +| operator_id | O | 28 | String | 商户操作员编号 | | +| alipay_store_id | O | 32 | String | 支付宝的店铺编号 | | +| merchant_order_no | O | 32 | String | 商户的原始订单号 | | +| ext_user_info | O | - | ExtUserInfo | 外部指定买家 | | +| promo_params | O | 512 | PromoParam | 优惠明细参数,通过此属性补充营销参数 | | +| terminal_params | O | 2048 | String | json 格式;商户传入终端设备。如:{"credential":"28763443825664394:20180207192030954:abcdefGHIJKLMN","signature":"xxxxxxx","terminalType":"IOT"} | | +| advance_payment_type | O | 20 | String | 支付模式类型, 若 值 为ENJOY_PAY_V2表示当前交易允许走先享后付 2.0 垫资 | | +| query_options | O | 1024 | String[] | 返回查询选项,商户通过上送该参数来定制同步需要额外返回的信息字段,数组格式。如:["fund_bill_list","voucher_detail_list","discount_goods_detail"] | | +| disable_pay_channels | O | 64 | String | 禁用支付渠道,多个渠道以逗号分割,如 同时禁用信用支付类型和积分,则 disable_pay_channels="cre dit_group,point" 具体的渠道以支付宝或者银联提供的为准 | | + +**场景信息scene_info字段说明(当前仅针对微信交易会透传给微信):** + +| **名称** | **参数名** | **必填** | **类型** | **示例值** | **描述** | +| --- | --- | --- | --- | --- | --- | +| 门店Id | id | 否 | String(32) | SZTX001 | 门店唯一标识 | +| 门店名称 | name | 否 | String(64) | 腾讯大厦腾大餐厅 | 门店名称 | +| 门店行政区划码 | area_code | 否 | String(6) | 440305 | 门店所在地行政区划码 | +| 门店详细地址 | address | 否 | String(128) | 科技园中一路腾讯大厦 | 门店详细地址 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | [C](#eFgvt) | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 支付类型 | pay_way | M | 无 | string | [详见下方支付类型](#nlHUH) | +| 支付完成时间 | pay_time | C | 无 | string | 支付成功时才返回 | +| 银行类型 | bank_type | O | 无 | string | 使用银行卡支付以外的(如零钱)全部展示为others,使用银行卡支付的详见下方[付款银行类型](#cX4pl) | +| 用户openid | openid | C | 无 | string | 支付成功时才返回 | +| 微信、支付宝等订单号 | out_transaction_id | C | 无 | string | 支付成功时才返回 | +| 用户子标识 | sub_openid | C | 无 | string | 支付成功时才返回。微信:公众号APPID下用户唯一标识;支付宝:买家的支付宝用户ID | +| 附加数据 | attach | O | 96 | string | 支付成功原样返回;注意:只能是汉字、英文字母、数字 | +| 交易类型 | trade_type | C | 无 | string | 支付成功时才返回:MICROPAY-条码支付,NATIVE-原生扫码支付,JSAPI-公众号支付、服务窗支付,SmPgPay-小程序支付,JSAPIQuick-简易支付 | +| 通道订单号 | channel_order_id | C | 无 | string | 支付成功时才返回 | +| 通道订单时间 | channel_datetime | C | 无 | string | 支付成功时才返回 | +| 支付宝红包金额 | coupon | C | 无 | string | 支付成功时才返回,单位(分) | +| 应结算金额 | settlement_amount | C | 无 | string | 实际结算金额,支付成功时才返回,单位(分) | +| 折扣优惠金额 | discount_amount | C | 无 | string | [订单优惠金额](#6QKR6),支付成功时才返回,单位(分) | +| 优惠详情 | promotion_detail | O | 无 | string | 银联单品的具体优惠详情;微信优惠详情说明:[微信官网](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1) | +| 活动标志 | active_flag | O | 无 | string | 活动标志。WXLZ:微信绿洲;ZFBLH:支付宝蓝海 | +| 买家实付金额 | buyer_pay_amount | C | 无 | String | 微信、支付宝此值有效 | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | +| 通道标记 | channel_flag | O | 32 | string | GXST:高校食堂PUBWEL:公益PUBPAY:公缴ZFBLH:支付宝新蓝海SLZXY:私立中小幼INS:保险ONLINE:线上 | +| 银联/网联状态码 | channel_code | C | 无 | JSON | 透传银联的返回码。银联支付宝:code, sub_code 银联微信:return_code, result_code,err_code 银联二维码平台:respCode 条码前置平台:status、code、result_code、err_code。以上各种code,仅在银联返回时透传。格式: | +| | alipay_infos | | | | 见下alipay_infos参数表 | + +alipay_infos参数表 + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| | total_amount | M | 11 | Price | 交易金额(单位:分, 类型:数字) | +| | settle_amount | C | 11 | String | 结算币种订单金额 | +| | pay_amount | C | 11 | String | 支付币种订单金额 | +| | receipt_amount | M | 11 | String | 实收金额(单位:分, 类型:数字) | +| | point_amount | C | 11 | Price | 使用集分宝付款的金额 | +| | invoice_amount | C | 11 | Price | 交易中可给用户开具发票的金额(单位:元) | +| | fund_bill_list | M | | TradeFundBill[] | 交易支付使用的资金渠道。只有在签约中指定需要返回资金明细,或者入参的query_options 中指定时才返回该字段信息。 | +| | card_balance | C | 11 | Price | 支付宝卡余额 | +| | store_name | C | 512 | String | 发生支付交易的商户门店名称 | +| | discount_goods_detail | C | 1024 | String | 本次交易支付所使用的单品券优惠的商品优惠信息。只有在 query_options中指定时才返回该字段信息。 | +| | async_payment_mode | C | 20 | String | 异步支付模式,先享后付业务会返回该参 数 , 目 前 有 三 种 值 :ASYNC_DELAY_PAY( 异 步 延 时 付款); ASYNC_REALTIME_PAY( 异步准实时付款); SYNC_DIRECT_PAY(同步直接扣款); | +| | purchase_merchant_contribute | C | 8 | Price | 如果使用的这张券是用户购买的,则该字段代表用户在购买这张券时商户优惠的金额 | +| | auth_trade_pay_mode | C | 64 | String | 预授权支付模式,该参数仅在信用预授权支付场景下返回。信用预授权支付:CREDIT_PREAUTH_PAY | +| | advance_amount | C | 11 | String | 先享后付 2.0 垫资金额,不返回表示没有走垫资,非空表示垫资支付的金额 | +| | business_params | C | 512 | String | 商户传入业务信息,具体值要和支付宝约定将商户传入信息分发给相应系统,应用于安全,营销等参数直传场景格式为 json 格式 | +| | buyer_user_type | C | 18 | String | 买家用户类型。 CORPORATE:企业用户;PRIVATE:个人用户。 | +| | buyer_user_name | C | 128 | String | 买家名称;买家为个人用户时为买家姓名,买家为企业用户时为企业名称; | +| | mdiscount_amount | C | 11 | String | 商家优惠金额 | +| | discount_amount | C | 11 | String | 平台优惠金额 | +| | charge_flags | C | 64 | String | 费率活动标识,当交易享受活动优惠费率时,返回该活动的标识;(1)蓝海活动优惠费率 0,值为 bluesea_1(2) 特 殊 行 业 优 惠 费 率 0 , 值 为industry_special_00(3) 特殊行业优惠费率千一,值为industry_special_01 | +| | buyer_logon_id | M | 100 | String | 买家支付宝账号 | + +##### 订单优惠金额 + +微信支付包含商户和微信给的优惠金额,支付宝支付只包含商户给的优惠金额,银联二维码支付只包含商户给的优惠金额 + +**业务拓展参数示例** + +```json +"extend_business_params": "{ " + extend_params ":{ " + sys_service_provider_id ":" + 208812333665551 ", " + food_order_type ":" + home_delivery " } }", +``` + +**银联单品营销请求示例** + +```http +请求地址?amount=100&auth_code=XXXXXXXXXXXXXXXX&goods_detail= +%7b%22goodsInfo%22%3a%5b%7b%22id%22%3a%2212341234%22%2c%22name%22%3a%22%e6%b5%8b%e8%af%95%e5%95%86%e5%93%81%22%2c%22price%22%3a%22100%22%2c%22quantity%22%3a%221%22%7d%5d%7d +&merchant_id=XXXXXXXXXX&nonce_str=7aee8b722a614cfa9cfb39ad5409fcdf&service=upload_authcode&third_order_id=UB4C0D38F5091465F920200326100751& +sign=69fb04df6dda8bfd3110e4891efedc8b +``` + +##### 银联收款方附加数据 + +price 和 quantity 字段为数字类型 + +```json +银联扫码交易时good_detail示例: +{ + "orderInfo" : { + "title" :"日用品", + "dctAmount" :"10000", + "addnInfo" :"屈臣氏(人民广场)店" + }, + "goodsInfo" : [ + {"id": "1234567890", + "name": "商品 1", + "price": 500, + "quantity": 1 + }, + { + "id": "1234567891", + "name": "商品 2", + "price": 1000, + "quantity": 2, + "category": "类目 1", + "addnInfo": "商品图片 http://www.95516.com/xxx.jpg" } ] +} +``` + +注: + +True. 银联扫码点餐时,在该域的订单信息 orderInfo 子域中的附加信息 addnInfo 字段需填写该门店对应的品牌标识、门店标识、桌号(其中 SaaS 收银的支付交易需有 品牌标识、门店标识,扫码点餐的支付交易必须有品牌标识、门店标识、桌号)。addnInfo 字段的参考格 式为:{brandId=值&storeId=值&tableNo=值},例如: addnInfo={brandId=AXMX&storeId=12345&tableNo=12} +True. 银联单品营销时,按照银联需要的内容,在该域的商品信息goodsInfo上送对应的商品信息。 + +​ + +**注意事项** + +(1)所有涉及到金额的单位都位分,币种为RMB,最小为1分,不允许出现小数 + +(2)文档中参数,标识为必填必须上送(如果缺少会报错),非必填的可填可不填 + +(3)返回参数中必填为是的参数是一定会返回的,必填为否的参数则不一定返回,因升级或配置等情况实际返回参数可能不会跟文档完全一致,必须以实际接收到的参数为准 + +### 3.扫码支付结果 + +#### 3.1、扫码支付结果通知 + +**由于诸多因素都会影响到支付结果的通知,推送可能存在延迟,并且不能保证100%推送成功。故强烈建议主接交易查询接口。 ** + +**机具、码牌等设备的交易不会回调到这个地址,如有相关需求请参考:** + +**POST Content-Type: text/xml; charset=utf-8 ** + +**通知参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使 用MD5算法) | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 商户号 | merchant_id | M | 10 | string | 乐刷商户号 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 乐刷订单号 | leshua_order_id | M | 32 | string | | +| 商户订单号 | third_order_id | M | 64 | string | | +| 订单金额 | amount | M | 无 | string | | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 支付类型 | pay_way | M | 无 | string | [详见下方支付类型](#Mpdey) | +| 支付时间 | pay_time | M | 无 | string | '2020-09-15 10:11:30' | +| 银行类型 | bank_type | O | 无 | string | 使用银行卡支付以外的(如零钱)全部展示为others,使用银行卡支付的详见下方[付款银行类型](#cX4pl) | +| 用户openid | openid | O | 无 | string | | +| 微信、支付宝等订单号 | out_transaction_id | O | 无 | string | | +| 用户子标识 | sub_openid | C | 无 | string | 支付成功时才返回。微信:微信公众号APPID 下用户唯一标识;支付宝:买家的支付宝用户ID | +| 附加数据 | attach | O | 96 | string | 原样返回;注意:只能是汉字、英文字母、数字 | +| 交易类型 | trade_type | C | 无 | string | 支付成功时才返回:MICROPAY-条码支付,NATIVE-原生扫码支付,JSAPI-公众号支付、服务窗支付,SmPgPay-小程序支付,JSAPIQuick-简易支付 | +| 通道订单号 | channel_order_id | C | 无 | string | 支付成功时才返回 | +| 通道订单时间 | channel_datetime | C | 无 | string | 支付成功时才返回 | +| 支付宝红包金额 | coupon | C | 无 | string | 支付成功时才返回 | +| 应结算金额 | settlement_amount | C | 无 | string | 实际结算金额,支付成功时才返回 | +| 折扣优惠金额 | discount_amount | C | 无 | string | 本订单优惠金额,支付成功时才返回 | +| 优惠详情 | promotion_detail | O | 无 | string | 银联单品的具体优惠详情;微信优惠详情说明:[微信官网](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1) | +| 活动标志 | active_flag | O | 无 | string | 活动标志:WXLZ:微信绿洲 ZFBLH:支付宝蓝海 | +| 买家实付金额 | buyer_pay_amount | O | 无 | String | 微信、支付宝此值有效 | +| 付款方附加数据 | iss_addn_data | M | 无 | String | 格式如下 | +| 设备编号 | device_info | O | 32 | string | 上游返回时才返 | +| 门店编号 | store_id | O | 32 | string | 上游返回时才返 | +| 通道标记 | channel_flag | O | 32 | string | GXST:高校食堂PUBWEL:公益PUBPAY:公缴ZFBLH:支付宝新蓝海SLZXY:私立中小幼INS:保险ONLINE:线上 | +| 花呗分期期数 | hb_fq_num | O | 无 | string | 支付宝花呗分期数,一般为3、6、12期,乐刷透传,具体期数由支付宝侧限定 | +| 支付宝优惠信息 | alipay_infos | | | string | 见下alipay_infos参数表 | +| 分期信息 | install_info | O | 无 | string | 包含分期笔数(install_nums)/分期付款手续费率(install_rate)/商户补贴手续费率(merchant_fee_subsidy)) | + +alipay_infos参数表 + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| total_amount | M | 11 | Price | 交易金额(单位:分, 类型:数字) | +| point_amount | O | 11 | Price | 积分支付的金额,单位为元,两位小数。该金额代表该笔交易中用户使用积分支付的金额,比如集分宝或者支付宝实时优惠等 | +| invoice_amount | O | 11 | Price | 交易中用户支付的可开具发票的金额,单位为元,两位小数。该金额代表该笔交易中可以给用户开具发票的金额 | +| receipt_amount | O | 11 | String | 实收金额(单位:分, 类型:数字) | +| discount_goods_detail | M | 1024 | String | 本次交易支付所使用的单品券优惠的商品优惠信息。只有在 query_options中指定时才返回该字段信息。 | +| mdiscount_amount | O | 11 | String | 商家优惠金额 | +| discount_amount | O | 11 | String | 平台优惠金额 | +| buyer_logon_id | M | 100 | String | 买家支付宝账号 | +| fund_bill_list | M | 256 | TradeFundBill[] | 交易支付使用的资金渠道。只有在签约中指定需要返回资金明细,或者入参的query_options 中指定时才返回该字段信息。 | + +**注意:** + +1、支付发起后,乐刷一般30s左右才会返回支付通知,如需快速获取支付结果,请调用“交易结果查询”接口发起查询。 + +2、支付通知的频率:0s/15s/30s/1m/4m/34m/64m/94m/124m/184m + +##### 支付类型 + +| 类型 | 说明 | 状态 | +| --- | --- | --- | +| WXZF | 微信 | 支持 | +| ZFBZF | 支付宝 | 支持 | +| UPSMPAY | 银联二维码 | 支持 | + +**iss_addn_data参考格式:** + +| **参数名** | **变量名** | **类型** | **说明** | +| --- | --- | --- | --- | +| 商品优惠信息 | dctDetail | String | 商品优惠明细 | +| 商品编号 | id | String | 参与优惠的商品编号 | +| 优惠活动编号 | dctId | String | 优惠活动的编号 | +| 商品优惠数量 | dctQuantity | String | 参与优惠的商品数量 | +| 商品优惠金额 | dctPrice | String | 商品的优惠总金额(分) | + +```json +issAddnData= { + "dctDetail" : [{ + "id": "1234567890", + "dctId": "app012345", + "dctQuantity": 1", + "dctPrice": "500" + },{ + "id": "1234567891", + "dctId": "app012345", + "dctQuantity": "2", + "dctPrice": "1000", +``` + +**返回参数** + +| 返回内容 | 说明 | +| --- | --- | +| 000000 | Content-Type: application/text响应体(String类型):000000示例代码:return "000000";通知成功,乐刷收到此返回后不会继续通知。 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知。为避免资源浪费,请核实并确保响应信息的准确性,可以是否重复通知为检查手段 | + +注意: + +1.回调地址为统一下单或条码支付的通知地址。 + +2.交易回调处理时间为5S内。 + +3.支付成功才进行推送。 + +**付款银行类型** + +| 通道 | 说明 | +| --- | --- | +| 微信 | [https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=4_2](https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=4_2) | +| 支付宝 | [https://alipay.open.taobao.com/doc2/detail?treeId=26&articleId=103259&docType=1](https://alipay.open.taobao.com/doc2/detail?treeId=26&articleId=103259&docType=1) | +| 银联二维码 | 1 - 借记卡 2- 贷记卡 | + +#### 3.2、扫码交易结果查询 + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)注:查询时,除非返回明确的支付成功、支付失败、订单关闭等最终状态,其他错误或者未支付状态,都需要再查询,直到得到明确的支付状态。如果超过一段时间还是未支付,可以调用关闭订单接口。 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | query_status(此为固定值) | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | O | 64 | string | 选填 | +| 乐刷订单号 | leshua_order_id | O | 16 | string | third_order_id和leshua_order_id必填1个,优先使用leshua_order_id | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 订单金额 | amount | M | 无 | string | | +| 支付类型 | pay_way | M | 无 | string | [详见下方支付类型](#nlHUH) | +| 支付完成时间 | pay_time | C | 无 | string | 支付成功时才返回 | +| 银行类型 | bank_type | O | 无 | string | 使用银行卡支付以外的(如零钱)全部展示为others,使用银行卡支付的详见下方[付款银行类型](#cX4pl) | +| 用户openid | openid | C | 无 | string | 支付成功时才返回 | +| 微信、支付宝等订单号 | out_transaction_id | C | 无 | string | 支付成功时才返回 | +| 用户子标识 | sub_openid | C | 无 | string | 支付成功时才返回。微信:微信公众号APPID下用户唯一标识;支付宝:买家的支付宝用户ID | +| 附加数据 | attach | O | 96 | string | 支付成功时原样返回;注意:只能是汉字、英文字母、数字 | +| 交易类型 | trade_type | C | 无 | string | 支付成功时才返回:MICROPAY-条码支付,NATIVE-原生扫码支付,JSAPI-公众号支付、服务窗支付,SmPgPay-小程序支付,JSAPIQuick-简易支付 | +| 通道订单号 | channel_order_id | C | 无 | string | 支付成功时才返回 | +| 通道订单时间 | channel_datetime | C | 无 | string | 支付成功时才返回 | +| 支付宝红包金额 | coupon | C | 无 | string | 支付成功时才返回,单位(分) | +| 应结算金额 | settlement_amount | C | 无 | string | 实际结算金额,支付成功时才返回 | +| 折扣优惠金额 | discount_amount | C | 无 | string | 订单优惠金额,支付成功时才返回 | +| 优惠详情 | promotion_detail | O | 无 | string | 银联单品的具体优惠详情; 微信优惠详情说明:[微信官方文档](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1) | +| 活动标志 | active_flag | O | 无 | string | 活动标志。WXLZ:微信绿洲;ZFBLH:支付宝蓝海 | +| 买家实付金额 | buyer_pay_amount | O | 无 | String | 微信、支付宝此值有效 | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | +| 退款金额 | refund_amount | O | 无 | string | 订单已退款的金额 | +| 简易支付标识 | simple_url_flag | O | 无 | string | 1表示是简易支付,0表示不是简易支付 | +| 设备编号 | device_info | O | 32 | string | 上游返回时才返 | +| 门店编号 | store_id | O | 32 | string | 上游返回时才返 | +| 支付中间态补充 | interm_state | O | 32 | O | 目前仅针对微信支付,订单为支付中时返回:NOTPAY,USERPAYING | +| 通道标记 | channel_flag | O | 32 | string | GXST:高校食堂PUBWEL:公益PUBPAY:公缴ZFBLH:支付宝新蓝海SLZXY:私立中小幼INS:保险ONLINE:线上 | +| 花呗分期期数 | hb_fq_num | O | 无 | string | 支付宝花呗分期数,一般为3、6、12期,乐刷透传,具体期数由支付宝侧限定 | +| | alipay_infos | | | | 见下alipay_infos参数表 | + +alipay_infos参数表 + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| total_amount | M | 11 | Price | 交易金额(单位:分, 类型:数字) | +| point_amount | O | 11 | Price | 积分支付的金额,单位为元,两位小数。该金额代表该笔交易中用户使用积分支付的金额,比如集分宝或者支付宝实时优惠等 | +| invoice_amount | O | 11 | Price | 交易中用户支付的可开具发票的金额,单位为元,两位小数。该金额代表该笔交易中可以给用户开具发票的金额 | +| receipt_amount | O | 11 | String | 实收金额(单位:分, 类型:数字) | +| discount_goods_detail | M | 1024 | String | 本次交易支付所使用的单品券优惠的商品优惠信息。只有在 query_options中指定时才返回该字段信息。 | +| mdiscount_amount | O | 11 | String | 商家优惠金额 | +| discount_amount | O | 11 | String | 平台优惠金额 | +| buyer_logon_id | M | 100 | String | 买家支付宝账号 | +| fund_bill_list | M | 256 | TradeFundBill[] | 交易支付使用的资金渠道。只有在签约中指定需要返回资金明细,或者入参的query_options 中指定时才返回该字段信息。 | + +**注意事项** + +(1)所有涉及到金额的单位都位分,币种为RMB,最小为1分,不允许出现小数 + +(2)文档中参数,标识为必填必须上送(如果缺少会报错),非必填的可填可不填 + +(3)返回参数中必填为是的参数是一定会返回的,必填为否的参数则不一定返回,因升级或配置等情况实际返回参数可能不会跟文档完全一致,必须以实际接收到的参数为准 + +### + +### 4、扫码退款 + +#### 4.1、扫码退款接口 **注意:超过三个月的订单,无法退款请注意 ****一个交易订单号,最多支持发起50次退款** + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)退款一般会返回退款中的状态,如需获取真实退款状态,请调用退款查询接口 + +(5)每笔支付订单部分退款次数不能超过50次 + +(6)退款有效期为60天,即订单发起后的60天内可以退款 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | unified_refund 注:此为固定值 | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | O | 64 | string | | +| 乐刷订单号 | leshua_order_id | O | 32 | string | 商户订单号跟乐刷订单号必填1个,优先使用leshua_order_id | +| 商户退款单号 | merchant_refund_id | M | 64 | string | 可以包含字母(不能有“_”等特殊字符),确保同一商户下唯一 | +| 附加数据 | attach | O | 96 | string | 退款成功原样返回;注意:只能是汉字、英文字母、数字 | +| 退款金额 | refund_amount | M | 10 | string | 退款金额,可做部分退款 | +| 退款类型 | refund_type | O | 否 | string | 0:不使用账户余额退款, 1:可以使用账户余额退款(优先使用正向交易抵扣,正向交易不够抵扣情况下可用账户余额进行退款)。2:限定只可以用账户余额进行退款**不传默认不使用账户余额退款** (注意: 实时清分的只能使用账户退款 ) | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串,长度要求32位以内 | +| 通知地址 | notify_url | O | 128 | string | 接收乐刷退款结果通知的URL,需做Url Encode处理,需要绝对路径,确保乐刷能正确访问 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +返回参数 + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 附加数据 | attach | O | 96 | string | 退款成功原样返回;注意:只能是汉字、英文字母、数字 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| | | | | | | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 退款金额 | refund_amount | M | 无 | string | 退款金额 | +| 商户退款id | merchant_refund_id | M | 64 | string | | +| 乐刷退款id | leshua_refund_id | M | 32 | string | | +| 订单总金额 | total_amount | M | 无 | string | 订单总金额 | +| 订单余额 | order_balance | M | 无 | string | 订单余额:本次退款后订单剩余金额 | +| 实际退款金额 | settlement_refund_amount | O | 无 | string | 实际退款金额 | +| 折扣优惠退款金额 | discount_refund_amount | O | 无 | string | 折扣优惠退款金额 | +| 退款优惠详情 | refund_detail | O | 无 | string | 退款优惠详情 | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | + +#### 4.2、扫码退款查询 + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)注: 此接口如果查询到退款状态为中间状态时,会同步向上游查询一次退款状态;如果查询到是退款异常情况时,会同步向上游重新发起一次退款请求。 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | unified_query_refund 注:此为固定值 | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | O | 64 | string | | +| 乐刷订单号 | leshua_order_id | O | 32 | string | 跟third_order_id必填1个 | +| 商户退款单号 | merchant_refund_id | O | 64 | string | | +| 乐刷退款单号 | leshua_refund_id | O | 32 | string | 跟merchant_refund_id必填1个 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0代表成功,非0代表失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 附加数据 | attach | O | 96 | string | 原样返回;注意:只能是汉字、英文字母、数字 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 退款金额 | refund_amount | M | 无 | string | 退款金额 | +| 商户退款id | merchant_refund_id | M | 64 | string | | +| 乐刷退款id | leshua_refund_id | M | 32 | string | | +| 订单总金额 | total_amount | M | 无 | string | | +| 退款时间 | refund_time | O | 无 | string | 退款成功时间:退款成功才返回 | +| 实际退款金额 | settlement_refund_amount | O | 无 | string | 实际退款金额 | +| 折扣优惠退款金额 | discount_refund_amount | O | 无 | string | 折扣优惠退款金额 | +| 退款优惠详情 | refund_detail | O | 无 | string | 退款优惠详情 | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | + +#### 4.3、扫码退款结果通知 + +**由于诸多因素都会影响到支付结果的通知,推送可能存在延迟,并且不能保证100%推送成功。故强烈建议主接交易查询接口。** + +**通知参数** + +| **字段名** | **变量名** | **必填** | **长度限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 失败原因 | failure_reason | O | 无 | string | 失败原因 | +| 附加数据 | attach | O | 96 | string | 原样返回;注意:只能是汉字、英文字母、数字 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 退款金额 | refund_amount | M | 无 | string | 退款金额 | +| 商户退款id | merchant_refund_id | M | 64 | string | | +| 乐刷退款id | leshua_refund_id | M | 32 | string | | +| 订单总金额 | total_amount | M | 无 | string | | +| 退款时间 | refund_time | C | 无 | string | 退款成功时间:退款成功才返回 | +| 折扣优惠退款金额 | discount_refund_amount | O | 无 | String | 折扣优惠退款金额 | +| 实际退款金额 | settlement_refund_amount | O | 无 | String | 实际退款金额 | +| 退款优惠详情 | refund_detail | O | 无 | String | 退款优惠详情(**在退款成功后才返回**) | + +**注意:** + +1、发起退款请求后,乐刷一般30s左右才会返回支付通知,如需快速获取支付结果,请调用“退款”接口发起查询。 + +**返回参数** + +| 返回内容 | 说明 | +| --- | --- | +| 000000 | **直接返回字符串"000000"**。通知成功,乐刷收到此返回后不会继续通知 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知。为避免资源浪费,请核实并确保响应信息的准确性,可以是否重复通知为检查手段 | + +### 5、扫码订单关闭接口 + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)统一条码支付的订单后15秒后才允许调用订单关闭接口,统一下单订单无此限制。 (5)银联二维码的不支持关单 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | close_order(此为固定值) | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | O | 64 | string | 选填 | +| 乐刷订单号 | leshua_order_id | O | 16 | string | third_order_id和leshua_order_id必填1个,优先使用leshua_order_id | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 用户子标识 | sub_openid | M | 无 | string | | +| 订单状态 | status | M | 无 | string | ​ | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 交易类型 | pay_way | M | 无 | string | [详见下方支付类型](#nlHUH) | +| 订单金额 | amount | M | 无 | string | | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | + +##### 订单状态 + +| **值** | **说明** | +| --- | --- | +| 0 | 支付中 | +| 2 | 支付成功 | +| 6 | 订单关闭 | +| 8 | 支付失败 | +| 10 | 退款中 | +| 11 | 退款成功 | +| 12 | 退款失败 | + +### 6、授权码 + +> 授权码相关接口与**条码支付接口**配套使用 +> + +#### 6.1、授权码查询用户openid + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)注: 此接口需要上送户付款码和对应的微信公众号appid才能查询到用户openid + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | query_openid 注:此为固定值 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 授权码 | auth_code | M | 32 | string | 微信付款码 | +| 微信appid | appid | M | 32 | string | 微信公众号ID | +| 微信通道子商户号 | ass_merchant_id | O | 32 | string | **用于指定微信子商户号**。适用于一个乐刷商户号有多个通道商户号的场景。注:对应乐刷商户号大于200条时不能传该参数 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 用户子标识 | sub_openid | M | 无 | string | | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 微信用户标识 | openid | M | 无 | string | 乐刷appid下的用户微信openid | + +#### 6.2、授权码获取银联云闪付用户ID + +**简要描述** + +(1)使用用户授权码换取银联云闪付用户ID,使用此ID发起银联JS支付 + +**注:** 此步骤的前置条件:与公司归属银联分公司签署协议,并添加域名白名单获取用户授权码。 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | query_userid(此为固定值) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 用户授权码 | user_auth_code | M | 无 | string | | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 银联支付标识 | app_up_identifier | C | | | 收款方识别HTTP请求User Agent中包含银联支付标识,格式为“UnionPay/<版本号> ”,注意APP标识仅支持字母和数字。云闪付app支付不填,云闪付外app必填。示例:UnionPay/1.0 ICBCeLife | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | O | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 用户ID | user_id | O | 无 | string | | + +##### 支付类型 + +| 类型 | 说明 | 状态 | +| --- | --- | --- | +| WXZF | 微信 | 支持 | +| ZFBZF | 支付宝 | 支持 | +| UPSMZF | 银联二维码 | 支持 | +| DCPAY | 数字货币 | 支持 | + +##### 订单状态 + +| **值** | **说明** | +| --- | --- | +| 0 | 支付中 | +| 2 | 支付成功 | +| 6 | 订单关闭 | +| 8 | 支付失败 | +| 10 | 退款中 | +| 11 | 退款成功 | +| 12 | 退款失败 | + +##### 付款银行类型 + +| **通道** | **说明** | +| --- | --- | +| 微信 | [https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=4_2](https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=4_2) | +| 支付宝 | [https://alipay.open.taobao.com/doc2/detail?treeId=26&articleId=103259&docType=1](https://alipay.open.taobao.com/doc2/detail?treeId=26&articleId=103259&docType=1) | +| 银联二维码 | 1 - 借记卡 2- 贷记卡 | + +##### 业务拓展参数示例(支付宝小程序需传) + +```json +"extend_business_params": "{ " +business_params ": { + "bizSource": "mAppQrFood", + "sourcePath": "pageFoodChain/shopTakeOut/main?suid=10" + }, + "goods_detail": [{ + "goods_id": "5544", + "goods_name": "爽口青笋丝", + "price": "0.50", + "quantity": 2, + "goods_category": "888", + "categories_tree": "888", + "body": "爽口青笋丝", + "show_url": "pageFoodChain/storeDetail/main?suid=10" + }], "extend_params": { + "sys_service_provider_id": "208812333665551", + "food_order_type": "home_delivery" + } +}", +``` + +**条码支付接口goods_detail,按银联单品营销格式传递****参数goodsInfo,格式如下** + +```json + "goods_detail":{ + "goodsInfo" : [ + { + "id": "1234567890", + "name": "商品 1", + "price": "500", + "quantity": "1"}, + { + "id": "1234567891", + "name": "商品 2", + "price": "1000", + "quantity": "2", + "category": "类目 1", + "addnInfo": "商品图片 http://www.95516.com/xxx.jpg"}] + }, +``` + +### 7、刷卡及扫码支付异步通知 + +采用HTTP 标准的POST协议(请使用 application/x-www-form-urlencoded 此Content-Type接收通知消息),为了保证数据正确性、准确性,数据必须验证签名。 + +**返回数据(支付成功通知如下)** + +```xml + + 0 + 1 + 0 + ALIPAYACCOUNT + + 2018-12-07 22:42:39 + 7551000001201812073279154152 + 0 + 0 + + 1812072242293655 + 0000000018 + 2088032562556921 + 2018120722001456935441223102 + 2018-12-07 22:42:39 + ZFBZF + 0 + 1 + 0b574d40e722ec76b55d4e8795f71182 + 2 + + 20181207224223102101 + NATIVE + +``` + +**返回数据(刷卡支付成功通知如下)** + +```xml + +0 +600 +000000 +000010 + +890584058130851 +89147601 +000109 +2203221139307885 +220322393155923079 +2041000394 +6012514015 +20220322114213731 + + +113935096395 +2022-03-22 11:41:43 +21e70c91171b8d6ba00dea3c3ef6affa +218JCA8L7760 +32 +20220322114005352 +220322393155923079 + +``` + +**返回数据(扫码退款成功通知如下)** + +```xml + + 0 + + 0 + 90001401275201 + 90002391275201 + 9115219 + 0000091152192752007041753 + mccqvx9q0d5nifcsd0uv9xlmkxgr6kdg + 2020-07-04 17:53:24 + 1000 + 426adb68310b659953d18b629c1a2e7e + 11 + 208860057301617 + 0000091152192752007041749 + 5500 + +``` + +#### 7.1 扫码支付成功通知 + +(1)通知 URL 是代理商后台配置的通知地址。扫码支付成功后,乐刷会把相关支付信息和用户信息发送到该 URL,商户需要接收处理信息。对后台通知交互时,如果收到商户的应答不是成功或者超时,乐刷认为通知失败,会通过一定的策略定期重新发起通知,尽可能的提高通知的成功率,但是不保证通知最终一定能成功。由于存在重复发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。系统必须能够正确处理重复的通知。 + +(2)验证签名方法:通知的 error_code、sign 字段不参与签名,签名方式参照数据格式及数据签名说明,其中签名 key 统一由乐刷提供。另外,组织签名串时空值也参与签名。 + +**通知参数** + +| **字段名** | **变量名** | **必填** | **长度限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 错误码 | error_code | 否 | 无 | string | 参照错误码信息参照表 | +| sign_type | sign_type | 否 | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法; | +| 签名 | sign | 是 | 32 | string | MD5 签名结果 | +| 商户号 | merchant_id | 是 | 10 | string | 乐刷商户号 | +| 乐刷订单号 | leshua_order_id | 是 | 32 | string | | +| 商户订单号 | third_order_id | 是 | 64 | string | | +| 订单金额 | amount | 是 | 无 | string | | +| 订单状态 | status | 是 | 无 | string | 见下方[订单的状态](#CozIx) | +| 支付类型 | pay_way | 是 | 无 | string | 见下方[支付类型](#yGR0s) | +| 支付时间 | pay_time | 是 | 无 | string | '2018-08-20 19:19:19' | +| 银行类型 | bank_type | 否 | 无 | string | | +| 用户openid | openid | 否 | 无 | string | | +| 微信、支付宝等订单号 | out_transaction_id | 否 | 无 | string | | +| 用户子标识 | sub_openid | 否 | 无 | string | 支付成功时才返回。微信:子商户appid 下用户唯一标识;支付宝:买家的支付宝用户id; | +| 附加数据 | attach | 否 | 96 | string | 支付成功时才返回。原样返回 | +| 交易类型 | trade_type | 否 | 无 | string | 支付成功时才返回。(1)MICROPAY--刷卡支付/条码支付(2)NATIVE--原生扫码支付(3)JSAPI--公众号支付/服务窗支付(4)APP--app支付(5)H5Pay-支付支付(6)SmPgPay-小程序支付(7)JSAPIQuick-简易支付 | +| 通道订单号 | channel_order_id | 否 | 无 | string | 支付成功时才返回 | +| 通道订单时间 | channel_datetime | 否 | 无 | string | 支付成功时才返回 | +| 支付宝红包金额 | coupon | 否 | 无 | string | 支付成功时才返回,单位:分 | +| 应结算金额 | settlement_amount | 否 | 无 | string | 实际结算金额,支付成功时才返回,单位:分 | +| 折扣优惠金额 | discount_amount | 否 | 无 | string | 本订单优惠金额,支付成功时才返回,单位:分 | +| 优惠详情 | promotion_detail | 否 | 无 | string | 优惠详情:[微信官网](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1) | +| 活动标志 | active_flag | 否 | 无 | string | 活动标志:WXLZ:微信绿洲,ZFBLH:支付宝蓝海 | +| **商户终端编号** | pos_no | 否 | 60 | string | 只能是汉字、英文字母、数字 注意:银联类型交易时,只能 8位:数字字母 不支持 特殊字符 | +| **码牌编号** | qrcode_no | 否 | 无 | string | 支付用到的码牌编号 | + +**返回参数** + +| **字段名** | **说明** | +| --- | --- | +| 000000 | **直接返回字符串"000000"**。通知成功,乐刷收到此返回后不会继续通知 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知。为避免资源浪费,请核实并确保响应信息的准确性,可以是否重复通知为检查手段。 | + +##### 支付类型 + +| **类型** | **说明** | **状态** | +| --- | --- | --- | +| WXZF | 微信 | 支持 | +| ZFBZF | 支付宝 | 支持 | +| UPSMZF | 银联二维码 | 支持 | +| QQZF | QQ | 支持 | +| POS | 刷卡 | 支持 | +| DCPAY | 数字货币 | 支持 | +| UPSMPAY | 银联二维码(回调时返回) | 支持 | + +##### 订单状态值 + +| **值** | **说明** | +| --- | --- | +| 0 | 支付中 | +| 2 | 支付成功 | +| 6 | 订单关闭 | +| 8 | 支付失败 | +| 10 | 退款中 | +| 11 | 退款成功 | +| 12 | 退款失败 | +| 30 | 刷卡支付成功 | +| 31 | 刷卡撤销成功 | +| 32 | 刷卡退货成功 | +| 33 | 刷卡冲正成功 | + +#### 7.2 扫码退款通知 + +(1)通知 URL 与扫码支付成功通知一样,均为代理商后台配置的通知地址。扫码交易退款时、退款成功时、退款失败时,乐刷均会把相关退款信息发送到该 URL,商户需要接收处理信息。对后台通知交互时,如果收到商户的应答不是成功或者超时,乐刷认为通知失败,会通过一定的策略定期重新发起通知,尽可能的提高通知的成功率,但是不保证通知最终一定能成功。由于存在重复发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。系统必须能够正确处理重复的通知。 + +(2)验证签名方法:通知的 error_code、sign 字段不参与签名,签名方式参照第 3 章 数据签名,其中签名 key 统一由乐刷提供。另外,组织签名串时空值也参与签名。 + +**通知参数** + +| **字段名** | **变量名** | **必填** | **长度限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 签名 | sign | 是 | 32 | string | MD5 签名结果 | +| sign_type | sign_type | 否 | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法 | +| 订单状态 | status | 是 | 无 | string | 见下方[订单状态](#yP5Xo) | +| 失败原因 | failure_reason | 否 | 无 | string | 失败原因 | +| 商户号 | merchant_id | 是 | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | 是 | 64 | string | 商户内部订单号 | +| 乐刷订单号 | leshua_order_id | 是 | 32 | string | 乐刷订单号 | +| 退款金额 | refund_amount | 是 | 无 | string | 退款金额(分) | +| 商户退款 id | merchant_refund_id | 是 | 64 | string | | +| 乐刷退款 id | leshua_refund_id | 是 | 32 | string | | +| 订单总金额 | total_amount | 是 | 无 | string | | +| 退款时间 | refund_time | 否 | 无 | string | 退款成功时间-退款成功才返回 | + +**返回参数** + +| **字段名** | **变量名** | +| --- | --- | +| 000000 | **直接返回字符串"000000"**。通知成功,乐刷收到此返回后不会继续通知 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知 | + +##### 订单状态 + +| **值** | **说明** | +| --- | --- | +| 0 | 支付中 | +| 2 | 支付成功 | +| 6 | 订单关闭 | +| 8 | 支付失败 | +| 10 | 退款中 | +| 11 | 退款成功 | +| 12 | 退款失败 | +| 30 | 刷卡支付成功 | +| 31 | 刷卡撤销成功 | +| 32 | 刷卡退货成功 | +| 33 | 刷卡冲正成功 | + +#### 7.3 刷卡交易通知 + +(1)通知 URL 与扫码支付成功通知一样,均为代理商后台配置的通知地址。刷卡交易成功时、刷卡撤销成功时、刷卡退货成功时、刷卡冲正成功时,乐刷均会把相关交易信息发送到该 URL,商户需要接收处理信息。对后台通知交互时,如果收到商户的应答不是成功或者超时,乐刷认为通知失败,会通过一定的策略定期重新发起通知,尽可能的提高通知的成功率,但是不保证通知最终一定能成功。由于存在重复发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。系统必须能够正确处理重复的通知。 + +(2)验证签名方法:通知的 error_code、sign 字段不参与签名,签名方式参照第 3 章 数据签名,其中签名 key 统一由乐刷提供。另外,组织签名串时空值也参与签名。 + +(3)境外卡统一按照贷记卡费率进行结算,所以返回2 + +**通知参数** + +| **字段名** | **变量名** | **必填** | **长度限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 签名 | sign | 是 | 32 | string | MD5 签名结果 | +| 订单状态 | status | 是 | 无 | string | 详见下方[订单状态](#p7QuH) | +| 结算类型 | T0 | 是 | 无 | string | | +| 设备SN号 | sn | 是 | 无 | string | 硬件序列号和机身上一致 | +| 授权码 | authorize_code | 是 | 6 | string | 普通交易下返回000000 预授权交易不固定 | +| 失败原因 | failure_reason | 否 | 无 | string | 失败原因 | +| 商户号 | merchant_id | 是 | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | 是 | 64 | string | 商户内部订单号退货时,返回原订单的第三方订单号 | +| 乐刷订单号 | leshua_order_id | 是 | 32 | string | 乐刷订单号退货时,返回原订单的乐刷订单号 | +| 交易金额 | amount | 是 | 无 | string | 交易金额(分) | +| 银行卡号 | card_id | 否 | 无 | string | 刷卡交易时提供 | +| 卡类型 | card_type | 否 | 1 | string | 1----借记卡2----贷记卡 3---- 准贷记 | +| 发行主体 | pan_overseas | 否 | 1 | string | 0----境内卡 1----境外卡​ | +| 结算方式 | pan_type | 否 | 1 | string | (1使用商户借记卡费率,非1使用商户贷记卡费率 ) 0-----未知 1-----借记 2-----贷记 3-----准贷记 4-----借贷合一 5-----预付费 6-----半开放预付费 | +| 发卡行 | bank_name | 否 | 无 | string | 刷卡交易时提供 | +| 刷卡pos批次号 | batch_no | 是 | 无 | string | 每次签到后从后台获取批次号,当批交易均上送此批次号 | +| 刷卡pos流水号 | flow_id | 是 | 3 | string | 终端为每个交易随机生成的流水号,随交易信息上送 | +| 乐刷SN号 | leshua_sn | 是 | 无 | string | 刷卡交易时提供 | +| 刷卡pos参考号 | reference_number | 是 | 32 | string | POS中心分配的流水号,作为对账参考号 | +| 银联商户号 | cups_merchant_id | 否 | 20 | string | 表示上送银联的商户编号 | +| 银联终端号 | cups_terminal_id | 否 | 8 | string | 表示上送银联的终端编号 | +| 交易流水号 | transaction_id | 否 | 18 | string | 用于表示此操作的流水号 | +| 刷卡交易时间 | pay_time | 否 | 无 | string | 刷卡交易时提供 | +| 消费撤销时间 | refund_time | 否 | 无 | string | 消费撤销时提供 | +| 消费退货时间 | returngoods_time | 否 | 无 | string | 消费退货时提供 | +| 消费冲正时间 | reverse_time | 否 | 无 | string | 消费冲正时提供 | +| 商户撤销id | merchant_refund_id | 否 | 无 | string | 消费撤销时提供第三方传入的撤销订单号 | +| 商户退货id | merchant_returngoods_id | 否 | 无 | string | 消费退货时提供第三方传入的退货订单号 | +| 乐刷退款id | leshua_refund_id | 否 | 18 | string | 消费退货时提供乐刷生成的退货流水号 | +| 商户冲正id | merchant_reverse_id | 否 | 无 | string | 消费冲正时提供第三方传入的冲正订单号 | +| 到账标识 | t0 | 否 | 1 | String | 0:表示t1到账 1:表示t0到账; 刷卡交易时提供 | + +**返回参数** + +| **字段名** | **变量名** | +| --- | --- | +| 000000 | **直接返回字符串"000000"**。通知成功,乐刷收到此返回后不会继续通知 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知 | + +##### 订单状态 + +| **值** | **说明** | +| --- | --- | +| 30 | 刷卡支付成功 | +| 31 | 刷卡撤销成功 | +| 32 | 刷卡退货成功 | +| 33 | 刷卡冲正成功 | +| 41 | 预授权成功 | +| 43 | 预授权撤销成功 | +| 45 | 预授权完成(请求)成功 | +| 47 | 预授权完成(通知)成功 | +| 49 | 预授权完成撤销成功 | + +#### 7.4 刷卡交易查询 + +请求地址:/agentCardTransaction/cardFlowQuery + +加密规则: md5hex(代理商密钥+reqSerialNo+version+ data的 json 串) + +​ + +**请求参数:** + +| 名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 | +| --- | --- | --- | --- | --- | --- | +| version | string | 必须 | | 版本号 | | +| agentId | string | 必须 | | 代理商编号 | | +| sign | string | 必须 | | 验签值 | | +| reqSerialNo | string | 必须 | | 随机字符串,一般为一个和日期有关的随机数 | | +| data | object | 非必须 | | | | +| └merchantId | string | 必须 | | 商户号 | | +| └operation | string | 必须 | | 操作类型(query_by_order,query_by_transaction,query_by_third_order)) | | +| └orderId | string | 非必须 | | 订单编号 | | +| └transactionId | string | 非必须 | | 交易单号 | | +| └thirdOrderId | string | 非必须 | | 第三方订单号 | | + +**返回参数:** + +| 名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 | +| --- | --- | --- | --- | --- | --- | +| traceId | string | 必须 | | 请求序列号 | | +| code | integer | 必须 | | 错误码 | | +| message | string | 必须 | | 错误信息 | | +| data | object | 非必须 | | | | +| └orderId | string | 非必须 | | 乐刷订单号 | | +| └errorCode | integer | 非必须 | | 请求错误码,成功为0 | | +| └errorMsg | string | 非必须 | | 错误提示信息,成功时值为空 | | +| └thirdOrderId | string | 非必须 | | 商户内部订单号 | | +| └merchantId | string | 非必须 | | 乐刷商户号 | | +| └amount | integer | 非必须 | | 交易金额 | | +| └orderStatus | integer | 非必须 | | 订单状态,0-初始状态(可能交易失败);5-交易成功;11-交易失败;53-交易失败(冲正成功);54-交易结果未知(冲正失败);3-退款成功;32-退款失败;33-退款状态未知;4-退货成功;41-退货失败;42-退货状态未知 | | +| └batchNo | string | 非必须 | | POS交易批次号 | | +| └flowNo | string | 非必须 | | POS交易流水号 | | +| └sign | string | 非必须 | | 签名 | | +| └merchantName | string | 非必须 | | 乐刷商户名称 | | +| transactionsInfo | object [] | 非必须 | | 流水 | item 类型: object | +| └merchantId | string | 非必须 | | 乐刷商户号 | | +| └pinpadUuid | string | 非必须 | | 乐刷SN | | +| └channelMerchantId | string | 非必须 | | 通道商户号 | | +| └channelTerminalId | string | 非必须 | | 通道终端号 | | +| └operationType | integer | 非必须 | | 操作类型,与订单状态一致 | | +| └inputType | string | 非必须 | | 交易用卡方式:051-插卡有密交易;052-插卡无密交易;071-挥卡有密交易;072-挥卡无密交易; | | +| └cardBank | string | 非必须 | | 发卡行名称 | | +| └authorizeCode | string | 非必须 | | 交易授权码 | | +| └referenceNo | string | 非必须 | | 交易参考号 | | +| └cardId | string | 非必须 | | 交易卡号 | | +| └pinpadSn | string | 非必须 | | 机具终端硬件号TUSN | | +| └time | string | 非必须 | | 交易时间 | | +| └cardType | integer | 非必须 | | 卡类型:0(借记卡),2(贷记卡) | | +| └channelBatchNo | string | 非必须 | | 通道交易批次号 | | +| └channelFlowNo | string | 非必须 | | 通道交易流水号 | | +| └transactionId | string | 非必须 | | 乐刷流水号 | | +| └channelId | string | 非必须 | | 通道id | | +| └channelMerchantName | string | 非必须 | | 通道商户名称 | | +| └amount | string | 非必须 | | 流水金额 | | + +### 8、交易错误码信息参照表 + +| **错误码** | **描述** | +| --- | --- | +| -20001 | 参数错误或无效 | +| -20002 | 无效的乐刷商户号 | +| -20003 | 商户订单号格式有误 | +| -20004 | 乐刷订单不存在 | +| -20005 | 服务错误 | +| -20006 | 验签失败 | +| -20007 | 签名 Key 未配置 | +| -20008 | 支付类型错误 | +| -20009 | 订单金额填写有误 | +| -20010 | 系统错误 | +| -20011 | 非法参数 | +| -20012 | 授权码为空 | +| -20013 | 非法的授权码 | +| -20014 | 未知类型的授权码 | +| -20015 | 非法的公众号支付标识 | +| -20016 | 无效乐刷订单号 | +| -20018 | 无效的第三方订单号或者乐刷订单号 | +| -20019 | 订单状态不允许退款 | +| -20020 | 订单未退款 | +| -20021 | 用户名跟商户ID不匹配 | +| -20022 | 无效的第三方退款订单号 | +| -20023 | 订单可退余额不足 | +| -20024 | 乐刷或第三方订单号必填 1 个 | +| -20025 | 乐刷或第三方退款订单号必填 1 个 | +| -20026 | 第三方订单号在该商户号下已经存在 | +| -20027 | 该订单已支付 | +| -20028 | 订单支付失败,不能撤销 | +| -20029 | 该订单已退款 | +| -20030 | 该订单退款失败,不能撤销 | +| -20031 | 无效的机具 SN 编号,请联系客服 | +| -20032 | 机具 SN 跟商户无绑定关系 | +| -4027 | 系统异常 | +| -4006 | 订单不存在 | +| -1006 | 该订单号已被用 | +| -1002 | 无效商户号 | +| -2034 | 测试商户号金额限制 | +| -4004 | 订单正在处理中 | +| -5103 | 商户退款 id 已存在 | +| -5014 | 商户无退款权限 | +| -5015 | 暂不支持退款 | +| -5016 | 订单状态异常 | +| -5017 | 订单可退金额不足 | +| -5018 | 订单退款次数超限 | +| -5019 | 订单未发起退款 | +| -5020 | 接口不支持该功能 | +| -2125 | 交易被风控拦截 | + +| -5035 | 下单异常,可能原因有通道网络异常,通道状态异常,通道商户异常等 | +| --- | --- | + +以实际返回的错误提示(error_msg)为准 diff --git a/docs/联合收单接口文档/08-交易结算数据查询-推送.md b/docs/联合收单接口文档/08-交易结算数据查询-推送.md new file mode 100644 index 0000000..8fd59dc --- /dev/null +++ b/docs/联合收单接口文档/08-交易结算数据查询-推送.md @@ -0,0 +1,737 @@ +# 交易结算数据查询、推送 + +> 来源: + +## + +## 交易结算详情查询 + +通过此接口 查询订单交易结算信息 , 查询跨度不允许超过30天, 不支持跨年查询 + +> 💡 注意,结算数据根据订单的实际结算时间生成 +> +> 💡 注意,目前限制查询50次/5s,批量同步数据建议从商户维度分页查询 +> + +> - URL:/open-api/tradeDetail/listTradeDetail +> - **Method**:POST +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| startTime | string | M | 交易开始时间(交易开始时间必传) | +| endTime | string | M | 交易结束时间(交易结束时间必传) | +| orderId | string | O | 乐刷交易单号、商户编号必传其一 | +| merchantId | string | O | 乐刷交易单号、商户编号必传其一 | +| pageNo | Integer | M | 当前页 | +| pageSize | Integer | M | 每页大小 | + +#### 返回值 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| merchantId | string | M | 商户编号 | +| merchantName | string | M | 商户名称 | +| agentId | string | M | 直属代理编号 | +| topAgentId | string | M | 一级代理编号 | +| keeperId | string | M | 业务员编号 | +| transactionId | string | M | 交易流水号 | +| orderId | string | M | 订单编号 | +| time | string | M | 交易时间 | +| posSn | string | M | pos_sn | +| pinpadUuid | string | M | 乐刷sn | +| qrcodeNo | string | M | 码牌编号 | +| amount | number | M | 交易金额(单位:分) | +| cardType | Integer | M | 刷卡交易卡类型:0-借记卡,2-贷记卡,3-境外卡,4未知 | +| state | Integer | M | 交易状态:-1 未知,0 交易初始,5 支付成功,11 支付失败,3 退款成功,31 退款中,32 退款失败,40 预授权成功,41 预授权失败,42 预授权撤销成功,43 预授权撤销失败,44 预授权完成成功,45 预授权完成失败,48 预授权完成撤销成功,49 预授权完成撤销失败,50 预授权完成中间状态,51 预授权中间状态,52 预授权撤销中间状态,53 预授权完成撤销状态,54 预授权完成退款订单 | +| tradeType | Integer | M | 交易类型:1-支付, 2-退款 | +| payType | Integer | M | 支付方式:1-刷卡,2-微信,3-支付宝,6-银联二维码 | +| t0Flag | Integer | M | t0标识: 1、t0 ; 0 T1 | +| attach | string | M | 备注信息 | +| settleAmount | Integer | M | 结算金额(分) | +| settleState | Integer | M | 状态: -1:打款失败; 0:打款中; 1:打款成功; 2:打款退票; 3:冻结出款;**0-打款中状态下 无结算数据**(即对应字段值为0,如feeRate字段) | +| feeRate | Integer | M | 手续费费率(百万分之一) | +| feeFixed | Integer | M | 商户固定手续费,单位:万分之一分 | +| merchantFee | Integer | M | 手续费(分) | + +> 💡 注意:settleState只能判断打款状态,可能会存在settleState=1,但是结算数据没有同步的极端情况 +> +> 建议通过settleState = 1且settleAmount != 0为条件来查询结算数据,以排除没有成功同步结算数据的偶发场景 +> +> 推荐查询结算数据时间:T1交易次日9-10点 、 T0交易半个小时左右 +> + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "K9JViuBrknLD+lev3nhOKZRb42v8La7achR9jUSs2A8=", + "data": { + "pageSize": 10, + "pageNo": 1, + "merchantId": "3131014839", + "startTime": "2022-05-09 00:00:00", + "endTime": "2022-05-09 23:59:59" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 61, + "data": [ + { + "merchantId": "3131014839", + "merchantName": "孤独荒迪", + "agentId": "1923721", + "topAgentId": "1923721", + "keeperId": "1923721001", + "transactionId": "0000000283903146", + "orderId": "0000000283903146", + "time": "2022-05-26 16:02:09", + "posSn": "", + "pinpadUuid": "", + "qrcodeNo": "", + "amount": 1, + "cardType": 0, + "state": 5, + "tradeType": 1, + "payType": 2, + "t0Flag": 0, + "attach": "扫码收款备注", + "settleAmount": 0, + "feeRate": 0, + "feeFixed": 0, + "merchantFee": 0, + "profitAmount": 0 + } + ] +} +``` + +## 交易结算实时推送 + +区分交易结算实时推送 + +推送范围:已配置外放交易结算的一代代理商 + +一代旗下的商户订单状态为终态的数据 + +推送规则: 交易消息发送成功后不在发送, 结算消息有settleAmount、feeRate、merchantFee变更就会推送一次 + +> - URL:由接入方提供 +> - **Method**:POST +> + +#### 请求示例 + +```json +{ + "detailInfo": { + "agentId": "315605362", + "amount": 512, + "attach": "", + "cardType": 0, + "keeperId": "1923721001", + "merchantId": "3131014839", + "merchantName": "孤独荒迪", + "orderId": "2302140741110600", + "payType": 1, + "pinpadUuid": "9990052674", + "posSn": "7290932048", + "qrcodeNo": "", + "state": 5, + "t0Flag": 1, + "time": "2023-02-14 07:41:12", + "topAgentId": "1923721", + "tradeType": 1, + "transactionId": "230214411156325137" + }, + "type": 0 +} +``` + +```json +{ + "detailInfo": { + "agentId": "375592313", + "amount": 130100, + "feeFixed": 0, + "feeRate": 3500, + "keeperId": "375592313001", + "merchantFee": 455, + "merchantId": "8558118786", + "merchantName": "汕头高新区千玺美容店", + "orderId": "1001168578623047", + "settleAmount": 129645, + "state": 5, + "time": "2023-02-16 15:35:05", + "topAgentId": "1923721", + "transactionId": "1001168578623047" + }, + "type": 1 +} +``` + +#### 推送字段 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| type | Integer | M | 0:交易 1:结算 | +| **detailInfo** | Object | M | | +| merchantId | string | M | 商户编号 | +| merchantName | string | M | 商户名称 | +| agentId | string | M | 直属代理编号 | +| topAgentId | string | M | 一级代理编号 | +| keeperId | string | M | 业务员编号 | +| transactionId | string | M | 交易流水号 | +| orderId | string | M | 乐刷交易单号 | +| amount | Long | M | 交易金额(单位:分) | +| time | string | M | 交易时间 | +| state | Integer | M | 交易状态:5 支付成功,11 支付失败,3 退款成功,31 退款中,32 退款失败,40 预授权成功,41 预授权失败,42 预授权撤销成功,43 预授权撤销失败,44 预授权完成成功,45 预授权完成失败,48 预授权完成撤销成功,54 预授权完成退款订单 | +| posSn | string | C | type=0 pos_sn | +| pinpadUuid | string | C | type=0 乐刷sn | +| qrcodeNo | string | C | type=0 码牌编号 | +| cardType | Integer | C | type=0 刷卡交易卡类型:0-借记卡,2-贷记卡,3-境外卡,4未知 | +| tradeType | Integer | C | type=0 交易类型:1-支付, 2-退款 | +| payType | Integer | C | type=0支付方式:1-刷卡,2-微信,3-支付宝,6-银联二维码 | +| t0Flag | Integer | C | type=0 t0标识: 1、t0 ; 0 T1 | +| attach | string | C | type=0 备注信息 | +| settleAmount | Long | C | type=1 结算金额(分) | +| feeRate | Long | C | type=1手续费费率(万分之一)type=1 | +| feeFixed | Long | C | type=1商户固定手续费,单位:万分之一分 | +| merchantFee | Long | C | type=1手续费(分) | + +#### 接入方响应 + +> **状态码:** +> +> error_code = `0 推送处理成功` +> +> error_code != `0`处理失败触发推送异常补偿机制 +> + +#### 推送异常补偿逻辑 + +每隔十分钟检测10分钟前的一个小时内的失败订单数据 + +> 例: +> +> 16:30 跑批 15:20 - 16:20 +> +> 16:40 跑批 15:30 - 16:30 +> +> 16:50 跑批 15:40 - 16:40 +> +> 17:00 跑批 15:50 - 16:50 +> +> 17:10 跑批 16:00 - 17:00 +> +> ps: 失败数据最多重复推送三次 +> + +## 商户打款单结果查询 + +代理商可通过此接口查询旗下商户的打款情况。​ + +> - **URL**:`/open-api/settlement/settlementOrder` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| billId | String | M | 打款单号 | +| type | String | M | 类型:“T0”、“T1” | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| topAgentId | String | M | 一代编号 | +| billId | String | M | 打款单号 | +| merchantId | String | M | 商户编号 | +| agentId | String | M | 直属代理商编号 | +| settleType | String | M | 结算类型:T0, T1 | +| realSettleAmount | Long | M | 实付金额(单位:分) | +| planSettleAmount | Long | M | 应付金额(单位:分) | +| suspendSettleAmount | Long | M | 止付金额(单位:分) | +| state | Integer | M | 状态: -1:打款失败; 0:打款中; 1:打款成功; 2:打款退票; 3:冻结出款; | +| failReason | String | M | 失败原因 | +| createTime | String | M | 打款单创建日期 | +| bankretTime | String | M | 打款时间 | +| recreateFlag | String | M | 0 系统出款打款单 1风控打款单 2手提单 | +| remark | String | M | 备注 | +| bankAccount | String | M | 银行账号 | +| bankBranch | String | M | 银行名称 | +| bankHolder | String | M | 开户人 | +| unionPayCode | String | M | 联行号 | + +#### 请求示例 + +```json +{ + "agentId": "5592097", + "currentAgentId": "5592097", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "billId": "20230320001000005344", + "type": "T0" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json + +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "topAgentId": "5592097", + "billId": "20230320001000005344", + "merchantId": "5931017344", + "agentId": "5592097", + "settleType": "T0", + "realSettleAmount": 0, + "planSettleAmount": 0, + "suspendSettleAmount": 0, + "state": 1, + "failReason": "", + "createTime": "2023-03-20 15:40:21", + "bankretTime": "1970-01-01 08:00:01", + "recreateFlag": null, + "remark": "", + "bankAccount": "621************0559", + "bankBranch": "中国银行股份有限公司北京万泉河支行", + "bankHolder": "李*", + "unionPayCode": "104100005188" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 打款单编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "打款单编号不能为空", + "count": 0, + "data": null +} +``` + +## 查询商户指定日期打款情况 + +代理商查询商户T0,T1打款情况,此接口仅对一代代理商开放。 + +> - **URL**:`/open-api/settlement/merchantSettlementOrder` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户号 | +| date | String | M | 打款单的创建日期格式:(例2019-10-12) | +| type | String | M | 类型:“T0”、“T1” | +| state | Integer | M | 打款状态: -1:打款失败; 0:打款中;1:打款成功; 2:打款退票;3:冻结出款; | +| pageNo | Integer | M | 页码(页码超出总页数后返回第一页),每页默认20条数据 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| **data** | List | M | 数据 | +| topAgentId | String | M | 一代编号 | +| billId | String | M | 打款单号 | +| merchantId | String | M | 商户编号 | +| agentId | String | M | 直属代理商编号 | +| settleType | String | M | 结算类型:T0, T1 | +| realSettleAmount | Long | M | 实付金额(单位:分) | +| planSettleAmount | Long | M | 应付金额(单位:分) | +| suspendSettleAmount | Long | M | 止付金额(单位:分) | +| state | Integer | M | 状态: -1:打款失败; 0:打款中; 1:打款成功; 2:打款退票; 3:冻结出款; | +| failReason | String | M | 失败原因 | +| createTime | String | M | 打款单创建日期 | +| bankretTime | String | M | 打款时间 | +| recreateFlag | String | M | 打款单是否是重新生成的;0:否 1:是 (T0无该字段) | +| remark | String | M | 备注 | +| bankAccount | String | M | 银行账号 | +| bankBranch | String | M | 银行名称 | +| bankHolder | String | M | 开户人 | +| unionPayCode | String | M | 联行号 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "merchantId": "5931017344", + "type": "T0", + "date": "2023-03-20", + "state": 4, + "pageNo": 1 + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 2, + "data": [ + { + "topAgentId": "5592097", + "billId": "20230320001000009344", + "merchantId": "5931017344", + "agentId": "5592097", + "settleType": "T0", + "realSettleAmount": 1164, + "planSettleAmount": 1164, + "suspendSettleAmount": 0, + "state": 0, + "failReason": "", + "createTime": "2023-03-20 17:50:14", + "bankretTime": "1970-01-01 08:00:01", + "recreateFlag": null, + "remark": "", + "bankAccount": "621************0559", + "bankBranch": "中国银行股份有限公司北京万泉河支行", + "bankHolder": "李*", + "unionPayCode": "104100005188" + }, + { + "topAgentId": "5592097", + "billId": "20230320001000008344", + "merchantId": "5931017344", + "agentId": "5592097", + "settleType": "T0", + "realSettleAmount": 0, + "planSettleAmount": 0, + "suspendSettleAmount": 0, + "state": 1, + "failReason": "", + "createTime": "2023-03-20 17:44:10", + "bankretTime": "1970-01-01 08:00:01", + "recreateFlag": null, + "remark": "", + "bankAccount": "621************0559", + "bankBranch": "中国银行股份有限公司北京万泉河支行", + "bankHolder": "李*", + "unionPayCode": "104100005188" + } + ] +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 商户编号为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "商户编号不能为空", + "count": 0, + "data": null +} +``` + +## 查询旗下商户打款失败明细 + +代理商可通过此接口查询旗下商户打款失败明细。 + +> - **URL**:`/open-api/settlement/agentFailSettlementOrder` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| date | String | M | 打款单创建日期 | +| type | String | M | 类型:“T0”、“T1” | +| pageNo | Integer | M | 页码(页码超出总页数后返回第一页),每页默认20条数据 | + +#### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| **data** | List | M | 数据 | +| topAgentId | String | M | 一代编号 | +| billId | String | M | 打款单号 | +| merchantId | String | M | 商户编号 | +| agentId | String | M | 直属代理商编号 | +| settleType | String | M | 结算类型:T0, T1 | +| realSettleAmount | Long | M | 实付金额(单位:分) | +| planSettleAmount | Long | M | 应付金额(单位:分) | +| suspendSettleAmount | Long | M | 止付金额(单位:分) | +| state | Integer | M | 状态: -1:打款失败; 0:打款中; 1:打款成功; 2:打款退票; 3:冻结出款; | +| failReason | String | M | 失败原因 | +| createTime | String | M | 打款单创建日期 | +| bankretTime | String | M | 打款时间 | +| recreateFlag | String | M | 打款单是否是重新生成的;0:否 1:是 (T0无该字段) | +| remark | String | M | 备注 | +| bankAccount | String | M | 银行账号 | +| bankBranch | String | M | 银行名称 | +| bankHolder | String | M | 开户人 | +| unionPayCode | String | M | 联行号 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "type": "T1", + "date": "2023-03-21", + "pageNo": 1 + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json + +{ + "error_code": "0", + "error_msg": "success", + "count": 1, + "data": [ + { + "topAgentId": "6250921", + "billId": "20230321000000009499", + "merchantId": "1931010499", + "agentId": "795823931", + "settleType": "T1", + "realSettleAmount": 1, + "planSettleAmount": 1, + "suspendSettleAmount": 0, + "state": -1, + "failReason": "order not found", + "createTime": "2023-03-21 08:19:09", + "bankretTime": "2023-03-21 09:21:14", + "recreateFlag": "1", + "remark": "商户资金结算RepayBill|0", + "bankAccount": "622************9035", + "bankBranch": "交通银行股份有限公司深圳锦绣御园社区支行", + "bankHolder": "陆**", + "unionPayCode": "301584000547" + } + ] +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 类型为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "类型不能为空", + "count": 0, + "data": null +} +``` + +## 商户打款回调 + +用于通知下游代理商,其所属商户T0、T1打款结果。 + +​ + +#### 流程图 + +#### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| type | Integer | M | 类型 2:打款 | +| **detailInfo** | Object | M | 数据 | +| topAgentId | String | M | 一代编号 | +| billId | String | M | 打款单号 | +| merchantId | String | M | 商户编号 | +| agentId | String | M | 直属代理商编号 | +| settleType | String | M | 结算类型:T0, T1 | +| realSettleAmount | Long | M | 实付金额(单位:分) | +| planSettleAmount | Long | M | 应付金额(单位:分) | +| suspendSettleAmount | Long | M | 止付金额(单位:分) | +| state | Integer | M | 状态: -1:打款失败; 0:打款中; 1:打款成功; 2:打款退票; 3:冻结出款; | +| failReason | String | M | 失败原因 | +| createTime | String | M | 打款单创建日期 | +| bankretTime | String | M | 打款时间 | +| recreateFlag | String | M | 打款单是否是重新生成的;0:否 1:是 (T0无该字段) | +| remark | String | M | 备注 | +| bankAccount | String | M | 银行账号 | +| bankBranch | String | M | 银行名称 | +| bankHolder | String | M | 开户人 | +| unionPayCode | String | M | 联行号 | + +#### 回调示例 + +```json + +{ + "type": 2, + "detailInfo": { + "topAgentId": "6250921", + "billId": "20230321000000009499", + "merchantId": "1931010499", + "agentId": "795823931", + "settleType": "T1", + "realSettleAmount": 1, + "planSettleAmount": 1, + "suspendSettleAmount": 0, + "state": -1, + "failReason": "order not found", + "createTime": "2023-03-21 08:19:09", + "bankretTime": "2023-03-21 09:21:14", + "recreateFlag": "1", + "remark": "商户资金结算RepayBill|0", + "bankAccount": "622************9035", + "bankBranch": "交通银行股份有限公司深圳锦绣御园社区支行", + "bankHolder": "陆**", + "unionPayCode": "301584000547" + } +} +``` + +#### 接入方响应 + +> **状态码:** +> +> error_code = `0 推送成功` +> +> error_code != `0`或其他情况视为推送失败 +> + +#### 注意事项 + +> (1)每次通知服务商只通知一次,如果回调地址调用失败,不会再次发起回调。 +> + +## 交易subOpenId查询 + +通过此接口查询扫码订单subOpenId信息 + +> 💡 注意,仅支持查询近三个月订单 +> + +> - URL:/open-api/tradeDetail/querySubOpenId +> - **Method**:POST +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| orderId | string | M | 交易单号 | +| merchantId | string | M | 商户编号 | + +#### 返回值 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| sub_openid | string | M | subOpenId | + +#### 请求示例 + +```json +{ + "sign": "0IuBJXzSr0XU6P63RAsw0GWbSwEpKeaTHtCn2IyVZ4w=", + "agentId": "1923721", + "currentAgentId": "315605362", + "data": { + "merchantId": "3131014839", + "orderId": "0000002783904339" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "sub_openid": "o8uJ6uMWYd3VQpYtAq-thmO9jw-o" + } +} +``` diff --git a/docs/联合收单接口文档/09-码牌管理.md b/docs/联合收单接口文档/09-码牌管理.md new file mode 100644 index 0000000..322c089 --- /dev/null +++ b/docs/联合收单接口文档/09-码牌管理.md @@ -0,0 +1,435 @@ +# 码牌管理 + +> 来源: + +### 码牌分配列表 + +通过此接口查询码牌已分配和未分配列表。 + +> - URL:`/open-api/agentQrcode/listDistributeQrcode ` +> - **Method**:`POST` +> + +​ + +#### 业务请求参数 + +> 💡 注意,此接口当前代理商编号currentAgentId不能为空 +> + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| distributeState | Integer | O | 分配状态,0=未分配,1=已分配 | +| qrcodeNum | String | O | 码牌编号 | +| qrcodeType | Integer | O | 码牌类型 | +| pageNo | Integer | M | 页码 | +| pageSize | Integer | M | 页大小 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "K9JViuBrknLD+lev3nhOKZRb42v8La7achR9jUSs2A8=", + "data": { + "distributeState" : 1, + "pageNo" : 1, + "pageSize" : 10 + } +} +``` + +#### 返回值 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| qrcodeCount | Integer | M | 码牌数量 | +| bindCount | Integer | M | 已绑定数量 | +| noBindCount | Integer | M | 待绑定数量 | +| currentAgentId | string | M | 当前代理商编号 | +| currentAgentName | string | M | 当前代理商名称 | +| **fixQrcodeList** | object [] | M | | +| agentId | string | M | 所属代理商编号 | +| agentLevel | integer | M | 代理商等级 9表示业务员 | +| allSuperAgentId | string | M | 直属代理商所有上级编号 | +| batchNo | string | M | 非批次号 | +| bindState | integer | M | 码牌状态:0、未绑定 1、已绑定 2、已解绑 3、初始入库 4.取消入库 5.取消分配 6.已分配 7.已废弃 | +| bindType | integer | M | 码牌绑定类型:1、手动(已有码)2、自动(商户动态申请) | +| createTime | string | M | 创建时间即分配时间 | +| distributeState | integer | M | 分配状态,0=未分配,1=已分配 | +| factoryMark | string | M | 厂商标识 | +| factoryNum | string | M | 厂商原始码 | +| operator | string | M | 操作人 | +| qrConfig | string | M | 配置信息 | +| qrcodeName | string | M | 码牌名称 | +| qrcodeNum | string | M | 码牌号码 | +| qrcodeType | integer | M | 码牌类型 | +| randomCode | string | M | 码牌随机码 | +| realState | integer | M | 批次状态:0、禁用1、正常2、取消分配 | +| state | integer | M | 码牌交易状态 0、禁用 1、正常 | +| topAgentId | string | M | 一级代理商编号 | +| updateTime | string | M | 更新时间 | +| yinlianQrnum | string | M | 银联码牌号码 | + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 65, + "data": { + "qrcodeCount": 95, + "bindCount": 52, + "noBindCount": 43, + "currentAgentId": "1923721", + "currentAgentName": "戴宁", + "fixQrcodeList": [ + { + "qrcodeNum": "0149920000002", + "yinlianQrnum": "", + "qrcodeType": 4, + "batchNo": "MP18002945", + "agentId": "1923721", + "agentLevel": 1, + "allSuperAgentId": "1923721", + "topAgentId": "1923721", + "bindState": 1, + "bindType": 1, + "state": 1, + "factoryMark": "SYD", + "remarkFlag": 0, + "createTime": "2022-12-06 15:48:35", + "updateTime": "2023-01-05 11:26:05", + "qrcodeName": null, + "qrConfig": "", + "randomCode": "", + "distributeState": 1, + "realState": 1, + "operator": null, + "closeByOperate": 0, + "factoryNum": null, + "isDeposit": 0, + "qrCodeModelNo": "", + "isActive": 0, + "depositAmount": "0" + } + ], + "showBatchDeposit": "1" + }, + "fail": false, + "success": true +} +``` + +### 码牌分配 + +通过此接口进行码牌分配 + +> - URL:/open-api/agentQrcode/distributeByAgent +> - **Method**:`POST` +> + +​ + +#### 业务请求参数 + +> 💡 注意,此接口当前代理商编号currentAgentId不能为空 +> + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| qrcodeNums | List[String] | M | 分配码牌编号不能为空, 码牌编号集合(一次性最多只能分配20个) | +| distributeAgentId | string | M | 分拨后代理商编号 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "K9JViuBrknLD+lev3nhOKZRb42v8La7achR9jUSs2A8=", + "data": { + "qrcodeNums": ["0141675001302"], + "distributeAgentId" : "680558958" + } +} +``` + +#### 返回参数说明 + +data中的数据,数据类型为object[] + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| qrcodeNum | string | M | 码牌编号 | +| isSuccess | Boolean | M | 是否成功true:成功 false:失败 | +| errorMsg | String | O | 失败信息 | + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": [ + { + "qrcodeNum": "0141675001302", + "isSuccess": true, + "errorMsg": null + } + ] +} +``` + +### 码牌取消分配 + +通过此接口进行码牌取消分配 + +> - URL:/open-api/agentQrcode/cancelDistributeQrcode +> - **Method**:`POST` +> + +​ + +#### 业务请求参数 + +> 💡 注意,此接口当前代理商编号currentAgentId不能为空 +> + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| qrcodeNum | string | M | 码牌编号不能为空 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "K9JViuBrknLD+lev3nhOKZRb42v8La7achR9jUSs2A8=", + "data": { + "qrcodeNum": "0161575903296" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "码牌取消分配成功!", + "count": 0, + "data": null +} +``` + +​ + +### 商户码牌管理 + +通过此接口查询商户已绑定的码牌列表 + +> - URL:/open-api/agentQrcode/listMerchantQrcode +> - **Method**:`POST` +> + +​ + +#### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| agentId | String | O | 直属代理商 | +| merchantId | String | O | 商户编号 | +| qrcodeNum | String | O | 码牌编号 | +| qrcodeType | Integer | O | 码牌类型 | +| pageNo | Integer | M | 页码 | +| pageSize | Integer | M | 页大小 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "K9JViuBrknLD+lev3nhOKZRb42v8La7achR9jUSs2A8=", + "data": { + "agentId": "680558958", + "merchantId": "7831012294", + "pageNo" : 1, + "pageSize" : 10 + } +} +``` + +#### 返回值 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| count | Interge | M | 当前代理商名称 | +| ​**fixQrcodeList** | object [] | M | | +| agentId | string | M | 所属代理商编号 | +| agentLevel | Integer | M | 代理商等级 9表示业务员 | +| allSuperAgentId | string | M | 直属代理商所有上级编号 | +| batchNo | string | M | 非批次号 | +| bindState | Integer | M | 码牌状态:0、未绑定 1、已绑定 2、已解绑 3、初始入库 4.取消入库 5.取消分配 6.已分配 7.已废弃 | +| bindTime | string | M | 绑定时间 | +| bindType | Integer | M | 码牌绑定类型:1、手动(已有码)2、自动(商户动态申请) | +| createTime | string | M | 创建时间即分配时间 | +| merchantId | String | M | 商户编号 | +| merchantName | String | M | 商户简称 | +| factoryMark | string | M | 厂商标识 | +| factoryNum | string | M | 厂商原始码 | +| operator | string | M | 操作人 | +| qrConfig | string | M | 配置信息 | +| qrcodeName | string | M | 码牌名称 | +| qrCodeModelNo | string | M | 机具型号 | +| qrcodeNum | string | M | 码牌号码 | +| qrcodeType | Integer | M | 码牌类型 | +| randomCode | string | M | 码牌随机码 | +| realState | Integer | M | 批次状态:0、禁用1、正常2、取消分配 | +| state | Integer | M | 码牌交易状态 0、禁用 1、正常 | +| topAgentId | string | M | 一级代理商编号 | +| updateTime | string | O | 更新时间 | +| yinlianQrnum | string | M | 银联码牌号码 | + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 1, + "data": [ + { + "qrcodeNum": "0141675001311", + "yinlianQrnum": "", + "qrcodeType": 4, + "batchNo": "MP18002928", + "merchantId": "7831012294", + "agentId": "680558958", + "agentLevel": 2, + "allSuperAgentId": "1923721_680558958", + "topAgentId": "1923721", + "bindState": 1, + "bindType": 1, + "state": 1, + "factoryMark": "SYD", + "remarkFlag": 0, + "bindTime": "2023-02-03T09:57:21.000+00:00", + "createTime": "2022-08-22 18:17:13", + "updateTime": "2023-02-03 17:57:21", + "qrcodeName": null, + "qrConfig": "", + "randomCode": "", + "realState": 1, + "operator": "1923721", + "merchantName": "小微D0商户666", + "closeByOperate": 0, + "factoryNum": "", + "isDeposit": 0, + "qrCodeModelNo": "云音箱LP167", + "isActive": 0, + "depositAmount": "0" + } + ] +} +``` + +### 码牌状态变更 + +通过此接口进行码牌状态变更如: -- 启用/禁用 码牌交易 -- 关闭/开通 码牌备注 -- 绑定/解绑 码牌 + +> - URL:/open-api/agentQrcode/changeQrcodeState +> - **Method**:`POST` +> + +​ + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| operationType | Integer | M | 0.交易开通/关闭 1.备注开通关闭 2.码牌绑定/解绑 | +| qrcodeNum | string | M | 码牌编号 | +| state | Integer | C | operationType = 0 时必填,码牌交易状态 0、禁用 1、正常 | +| remarkFlag | Integer | C | operationType = 1 时必填 , 必填备注标识 0、非必填1、必填 | +| bindState | Integer | C | operationType = 2 时必填, 1:绑定 2:解绑 (只允许解绑码牌音箱) | +| merchantId | string | C | operationType = 2时必填, 商户编号 | + +#### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "K9JViuBrknLD+lev3nhOKZRb42v8La7achR9jUSs2A8=", + "data": { + "qrcodeNum": "0161575903296", + "operationType": 2, + "bindState" : 1, + "merchantId" : "2231017459" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +### **常用枚举** + +#### qrcodeType**码牌类型枚举** + +| 编码 | 状态 | +| --- | --- | +| 3 | 聚合码 | +| 4 | 码牌音响 | +| 21 | 联合收单水晶码牌 | +| 22 | 联合收单卡纸码牌 | diff --git a/docs/联合收单接口文档/10-代理商管理.md b/docs/联合收单接口文档/10-代理商管理.md new file mode 100644 index 0000000..556ee75 --- /dev/null +++ b/docs/联合收单接口文档/10-代理商管理.md @@ -0,0 +1,1767 @@ +# 代理商管理 + +> 来源: + +# 新增子代和业务员 + +## 新增下级代理商 + +通过此接口新增下级代理商 + +> - **URL**:/open-api/agentRegister/subAgentRegister +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| **baseInfo** | Object | M | 基础信息� | +| agentShortName | String | M | 代理商简称,2~12位中文 | +| agentAccount | String | M | 代理商账号,8-20位大小写+数字 | +| agentAddress | String | M | 代理商经营地址,例如XX市XX区XX街道 | +| agentCity | String | M | 代理商所在城市 | +| agentCityCode | String | O | 代理商所在城市编码 | +| agentProvince | String | M | 代理商所在省份;例如:浙江省 | +| agentProvinceCode | String | O | 代理商所在省编码(国标) | +| legalPersonCertEndDate | String | M | 身份证有效期结束时间;例如:2029-09-01,长期的传“永久有效” | +| legalPersonIdCard | String | M | 法人身份证号码 | +| legalPersonName | String | M | 法人姓名 | +| agentProperty | Integer | M | 代理商性质:0企业;1个人;2个体工商户 | +| creditCode | String | C | 统一信用代码,企业/个体工商户必填 | +| enterpriseTitle | String | C | 企业名称,企业/个体工商户必填 | +| businessLicenseEndDate | String | C | 营业执照有效期结束日期;例如:2029-01-01,长期的传“永久有效” | +| establishmentDate | String | O | 营业执照有效期开始日期 | +| province | String | O | 代理区域;例如:浙江省,广东省,湖南省 | +| contactMobile | String | M | 绑定手机号 | +| **picturesInfo** | Object | M | 代理商所有图片信息� | +| idCardBackPic | String | M | 法定代表人/负责人身份证国徽面 | +| idCardFrontPic | String | M | 法定代表人/负责人身份证人像面 | +| settleBankCardFrontPic | String | M | 法人银行卡正面照片或开户许可证 | +| businessLicensePic | String | C | 营业执照复印件,企业和个体户代理商必填 | +| newAgentProtocolPic | String | O | 合作协议原件(照片/文件) | +| shopInnerPic | String | O | 经营场所室内照片 | +| shopOuterPic | String | O | 经营场所门头照 | +| shopPlaceRightCertifyFile | String | O | 经营场所产权证明/租赁合同(图片/文件) | +| handIdCardPic | String | O | 手持身份证照片; | +| bdagentPic | String | O | bd和代理商合影 | +| extraPics | Object[] | O | 其他照片,最多传5张 | +| id | String | M | 图片ID,字母和数组组成,不超过30个字符,例如:其他图片:extraPics1(多个后面数字递增) | +| msg | String | M | 图片中文说明 | +| url | String | M | 图片访问地址 | +| **settleInfo** | Object | M | 代理商结算相关信息� | +| bankAccountType | Integer | M | 账号类型:1-对私;2-对公;个人类型代理商只能选择对私 | +| bankAccountNo | String | M | 结算账户号码 | +| bankCardHolder | String | M | 开户名,例如张三 | +| bankCity | String | M | 开户行所在市区 | +| bankCityCode | String | O | 开户行所在市区编码 | +| bankProvince | String | M | 开户行所在省份 | +| bankProvinceCode | String | O | 开户行所在省份编号 | +| bankUnionpayCode | String | M | 联行号 | +| settObType | String | M | 结算方式;legalPerson-法人结算;company-对公结算(目前仅支持对私法人结算和对公结算) | +| bankMobile | String | C | 银行预留手机号 | +| bankTypeCode | String | O | 开户行编码 | +| **commissionRule** | Object | M | 代理商成本信息 | +| profitRule | Integer | M | 分润模式:0-标准模式,1:标准+抽成 | +| lowerDivideCent | Integer | M | 抽取下级代理商高签利润的比例,如果选择标准模式,则传0 | +| taxPoint | Integer | M | 提现税点 | +| switchProfitPay | String | M | 返现代付开关,Y/N | +| switchCashbackPay | String | M | 分润代付开关,Y/N | +| **ruleDetailAddReqDto��** | Object | M | 成本配置 | + +> **ruleDetailAddReqDto�** +> + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| post1DebitCommission | String | M | 刷卡T1借记卡 | +| posT1DebitMaxFeeBymillion | String | M | 刷卡T1借记卡封顶值(元) | +| post0DebitCommission | String | M | 刷卡T0借记卡 | +| posT0DebitMaxFeeBymillion | String | M | 刷卡T0借记卡封顶值(元) | +| post1CreditCommission | String | M | 刷卡T1贷记卡 | +| post0CreditCommission | String | M | 刷卡T0贷记卡 | +| alit1CreditCommission | String | M | 支付宝T1贷记卡 | +| alit0CreditCommission | String | M | 支付宝T0贷记卡 | +| wxt1CreditCommission | String | M | 微信T1贷记卡 | +| wxt0CreditCommission | String | M | 微信T0贷记卡 | +| unionmint1CreditCommission | String | M | 银联小额T1贷记卡 | +| unionmint0CreditCommission | String | M | 银联小额T0贷记卡 | +| unionmaxt1CreditCommission | String | M | 银联大额T1贷记卡 | +| unionmaxt0CreditCommission | String | M | 银联大额T0贷记卡 | +| unionDebitCardD0Above | String | M | 银联大额T0借记卡 | +| unionDebitCardD0MaxAbove | String | M | 银联大额T0借记卡T0封顶值(元) | +| unionDebitCardD1Above | String | M | 银联大额T1借记卡 | +| unionDebitCardMaxAbove | String | M | 银联大额T1借记卡T1封顶值(元) | +| t0DebitWithdrawCommissionBymillion | String | M | D0单笔提现费百分比 | +| t0DebittWithdrawFeeBymillion | String | M | D0单笔提现费固定值(元) | +| wxt1CreditCommissionOther | String | M | 微信其他T1 | +| wxt0CreditCommissionOther | String | M | 微信其他T0 | +| wxt1CreditCommissionCollege | String | M | 微信高校食堂T1 | +| wxt0CreditCommissionCollege | String | M | 微信高校食堂T0 | +| wxt1CreditCommissionTeaching | String | M | 微信教培T1 | +| wxt0CreditCommissionTeaching | String | M | 微信教培T0 | +| wxt0CreditCommissionLvZhou | String | M | 微信绿洲T0 | +| wxt1CreditCommissionLvZhou | String | M | 微信绿洲T1 | + +> 💡 注意 +> +> 1、成本最多支持输入3位小数 +> +> 2、请求示例中脱敏数据,均需明文传输 +> + +### 返回参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| agentId | String | M | 代理商id | +| checkStatus | String | M | 审核状态;wait-审核中; reject-审核拒绝; pass-审核通过 | +| respMsg | String | M | 审核状态描述 | + +### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "EaHYW1XN++aIk7hlL7BrfBckoIuid4z802xVu41UM+U=", + "data": { + "baseInfo": { + "agentAccount": "utsOpenApiRej0037", + "agentAddress": "河南*******区", + "agentCity": "郑州市", + "agentCityCode": "410100", + "agentProperty": 0, + "agentProvince": "河南省", + "agentProvinceCode": "410000", + "agentShortName": "接口外放新增二代", + "businessLicenseEndDate": "永久有效", + "creditCode": "914101056871103879", + "enterpriseTitle": "河南亿腾实业有限公司", + "establishmentDate": "2009-03-27", + "legalPersonCertEndDate": "2035-07-14", + "legalPersonIdCard": "422************779", + "legalPersonName": "张三", + "contactMobile": "156****0555" + }, + "commissionRule": { + "profitRule": 1, + "lowerDivideCent": 1, + "taxPoint": 80, + "switchProfitPay": "N", + "switchCashbackPay": "N", + "ruleDetailAddReqDto": { + "post1DebitCommission": "0.420", + "posT1DebitMaxFeeBymillion": "25", + "post0DebitCommission": "0.420", + "posT0DebitMaxFeeBymillion": "27", + "post1CreditCommission": "0.515", + "post0CreditCommission": "0.515", + "alit1CreditCommission": "0.230", + "alit0CreditCommission": "0.230", + "wxt1CreditCommission": "0.330", + "wxt0CreditCommission": "0.400", + "unionmint1CreditCommission": "0.230", + "unionmint0CreditCommission": "0.230", + "unionmaxt1CreditCommission": "0.530", + "unionmaxt0CreditCommission": "0.530", + "unionDebitCardD0Above": "0.420", + "unionDebitCardD0MaxAbove": "27", + "unionDebitCardD1Above": "0.420", + "unionDebitCardMaxAbove": "20", + "t0DebitWithdrawCommissionBymillion": "0.050", + "t0DebittWithdrawFeeBymillion": "1.00", + "wxt1CreditCommissionOther": "0.600", + "wxt0CreditCommissionOther": "0.600", + "wxt1CreditCommissionCollege": "0.000", + "wxt0CreditCommissionCollege": "0.000", + "wxt1CreditCommissionTeaching": "0.380", + "wxt0CreditCommissionTeaching": "0.380", + "wxt0CreditCommissionLvZhou": "0.220", + "wxt1CreditCommissionLvZhou": "0.210" + } + }, + "picturesInfo": { + "businessLicensePic": "picture2/M00/04/60/CmAiBGPjBpyANBOtACcClsSy3SU128.jpg", + "extraPics": [ + { + "id": "extraPics1", + "msg": "其他资料", + "url": "picturepro/M00/15/50/rBQLM2PzI2-AD1pBAAJYuVkegFM270.jpg" + } + ], + "idCardBackPic": "picture/M00/07/74/rBQhyWPjBWaAEtL2ABmCZ7e3y6k902.jpg", + "idCardFrontPic": "picture2/M00/08/BF/CmAiA2PjBh2ARP53AAJIiE4mLPQ463.png", + "newAgentProtocolPic": "picture2/M00/08/BF/CmAiA2PjBseAQpJWAALV8DW78pQ910.png", + "settleBankCardFrontPic": "picture2/M00/04/60/CmAiBGPjBvuATRzwABEX9D_3qKU624.jpg", + "shopInnerPic": "picture2/M00/04/60/CmAiBGPjBr6AG0BWAALV0PkCCnU135.png", + "shopOuterPic": "picture2/M00/08/BF/CmAiA2PjBrqAI09nAALV8Cv-b0s755.png", + "shopPlaceRightCertifyFile": "picture2/M00/04/60/CmAiBGPjBsuARiNSAALV0PkCCnU611.png" + }, + "settleInfo": { + "bankAccountNo": "621************510", + "bankAccountType": 1, + "bankCardHolder": "张三", + "bankCity": "郑州市", + "bankCityCode": "410100", + "bankMobile": "156****0555", + "bankProvince": "河南省", + "bankProvinceCode": "410000", + "bankUnionpayCode": "302491039144", + "bankTypeCode": "C1010211000012", + "settObType": "legalPerson" + } + } +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "agentId": "881925357", + "checkStatus": "pass", + "respMsg": "系统审核成功,届时将短信通知被注册的代理商。" + } +} +``` + +## 新增业务员 + +通过此接口新增业务员 + +> - **URL**:/open-api/agentRegister/addOperator +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| bdAccount | String | M | 业务员账号 | +| password | String | M | 密码,使用md5加密 | +| bdName | String | M | 业务员名称 | +| phone | String | M | 业务员手机号 | +| remark | String | O | 备注 | +| bdRole | Integer | M | 业务员角色;0-默认业务员;3-大区经理 | +| idcardBack | String | M | 身份证背面照地址 | +| idcardFront | String | M | 身份证正面照地址 | +| idcardName | String | M | 身份证姓名 | +| idcardNum | String | M | 身份证号 | +| idcardEndTime | String | M | 身份证有效期结束时间 | + +### 请求示例 + +```json +{ + "data": { + "bdAccount": "openApiAddBd0804", + "password": "afdd0b4ad2ec172c586e2150770fbf9e", + "bdName": "张三", + "phone": 157****5698, + "remark": "", + "bdRole": 0, + "idcardBack": "picture/M00/07/78/rBQhyWPkW-SAZNYOABmCZ7e3y6k704.jpg", + "idcardFront": "picture/M00/07/78/rBQhymPkW9uAb5BpAAJIaHeywqo322.png", + "idcardName": "张三", + "idcardNum": "422301********3775", + "idcardEndTime": "2035-07-14" + }, + "agentId": "1923721", + "currentAgentId": "881925357", + "sign": "Q2PhnHow24Vld119U4xsW8f0aEjBNds4Vm6FwtSoL6s=", + "algorithm": true, + "version": "1.0", + "reqSerialNo": "11111111111" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +# 查询子代和业务员信息 + +## 查询代理商列表 + +通过此接口查询下级代理商列表 + +> - **URL**:/open-api/agentManager/agentList +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| pageNo | Integer | M | 分页码 | +| pageSize | Integer | M | 每页大小 | +| agentId | String | O | 查询代理商编号 | +| auditTimeStart | String | O | 审核时间-开始时间 | +| auditTimeEnd | String | O | 审核时间-结束时间 | +| createTimeStart | String | O | 创建时间-开始时间 | +| createTimeEnd | String | O | 创建时间-结束时间 | +| agentName | String | O | 查询代理商全称 | +| agentShortName | String | O | 查询代理商简称 | +| mobile | String | O | 手机号 | +| auditState | String | O | 审核状态:0-待人工审核;1-审核拒绝;2-审核通过 | +| agentLevel | String | O | 代理商层级 | + +> 💡 注意: +> +> 1、时间格式为yyyy-MM-dd hh:mm:ss +> +> 2、请求示例中的mobile参数需明文传输 +> + +### 返回参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| agentId | String | M | 代理商编号 | +| agentName | String | M | 代理名称 | +| mobile | String | M | 联系人手机号 | +| createTime | String | M | 创建时间 | +| auditTime | String | M | 审核通过时间 | +| agentType | String | M | 代理商类型 | +| commissionSwitchOpen | String | M | 分润代发开关:Y-开启;N-关闭 | +| backSwitchOpen | String | M | 返现代付开关:Y-开启;N-关闭 | +| auditState | Integer | M | 审核状态:0-待人工审核;1-审核拒绝;2-审核通过 | +| agentLevel | String | M | 代理商等级 | +| modelName | String | M | 政策名称 | +| bankAccountType | Integer | M | 账号类型:1-对私;2-对公; | +| agentInvoiceType | Integer | M | 分润提现发票来源;1-代开发票;2-自有发票 | +| agentShortName | String | M | 代理商简称 | +| settleStatus� | String | M | 结算状态:0-正常;3-冻结 | +| blockStatus� | Integer | M | 账号状态:0-正常;1-冻结;2-注销;3-结算冻结� | + +### 请求示例 + +```json +{ + "data": { + "auditTimeStart": "2023-02-01 00:00:00", + "auditTimeEnd": "2023-02-16 23:59:59", + "createTimeStart": "2023-02-01 00:00:00", + "createTimeEnd": "2023-02-16 23:59:59", + "pageNo": 1, + "pageSize": 2, + "agentName": "外放", + "mobile": "157****8442", + "auditState": 2, + "agentInvoiceType": 1 + }, + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "1DHtJkYy9XaFqS8YMjMwyvJ0oCNzZ/tqvRj3YpjLXoU=" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 11, + "data": [ + { + "agentId": "775855752", + "agentName": "张继", + "contactMobile": "157****8442", + "createTime": "2023-02-15 18:42:49", + "auditTime": "2023-02-15 18:42:49", + "agentType": "1", + "settleStatus": "3", + "commissionSwitchOpen": "N", + "backSwitchOpen": "N", + "auditState": 2, + "agentLevel": 3, + "modelName": "默认政策", + "bankAccountType": 1, + "agentInvoiceType": 1, + "agentShortName": "外放接口新增三代", + "blockStatus": 0 + }, + { + "agentId": "506011515", + "agentName": "张继", + "contactMobile": "157****8442", + "createTime": "2023-02-15 18:37:59", + "auditTime": "2023-02-15 18:37:59", + "agentType": "1", + "settleStatus": "3", + "commissionSwitchOpen": "N", + "backSwitchOpen": "N", + "auditState": 2, + "agentLevel": 3, + "modelName": "默认政策", + "bankAccountType": 1, + "agentInvoiceType": 1, + "agentShortName": "外放接口新增三代", + "blockStatus": 0 + } + ] +} +``` + +## 查询代理商详情 + +通过此接口查询代理商详情 + +> - **URL**:/open-api/agentManager/agentDetail +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| targetAgentId | String | M | 查询的代理商编号 | + +### 返回参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| rejectedReason | String | C | 驳回原因 | +| **baseInfo** | Object | M | 审核状态:wait-审核中; reject-审核拒绝; pass-审核通过 | +| agentAddress | String | M | 代理商经营地址;例如XX市XX区XX街道 | +| agentCity | String | M | 代理商所在城市;例如:嘉兴市 | +| agentCityCode | String | M | 城市编码 | +| agentLevel | Integer | M | 代理商层级 | +| agentParentId | String | M | 上级代理商编号 | +| agentProperty | Integer | M | 代理商性质:0-企业;1-个人;2-个体工商户 | +| agentProvince | String | M | 代理商所在省份 | +| agentProvinceCode | String | M | 代理商所在省编码(国标) | +| businessLicenseEndDate | String | C | 营业执照有效期结束时间 | +| creditCode | String | C | 统一信用代码 | +| enterpriseTitle | String | C | 代理商全称/企业名称 | +| establishmentDate | String | C | 营业执照有效期开始时间 | +| legalPersonCertEndDate | String | M | 身份证有效期结束时间 | +| legalPersonIdCard | String | M | 法人身份证号码 | +| legalPersonMobile | String | M | 法人手机号码 | +| legalPersonName | String | M | 法人姓名 | +| protocolEndDate | String | O | 协议有效日期 | +| province | String | M | 代理区域 | +| agentName | String | M | 代理商名称 | +| contactName | String | M | 联系人姓名 | +| contactMobile | String | M | 绑定手机号 | +| agentShortName | String | M | 代理商简称 | +| bankMobile | String | C | 银行预留手机号 | +| agentAccount | String | M | 代理商账号 | +| **settleInfoList** | Object�[] | M | 结算信息 | +| bankAccountType | String | M | 账号类型:1-对私;2-对公 | +| bankAccountNo | String | M | 结算账户号码 | +| bankCardHolder | String | M | 开户名 | +| bankMobile | String | C | 银行预留手机号 | +| bankUnionpayCode | String | M | 联行号 | +| settObType | String | M | 结算方式:legalPerson=法人结算;company=对公结算 | +| bankProvince | String | M | 开户行所在省份 | +| bankProvinceCode | String | M | 开户行所在省份编号 | +| bankCity | String | M | 开户行所在市区 | +| bankCityCode | String | M | 开户行所在市区编码 | +| branchName | String | M | 支行名称 | +| bankName | String | M | 开户行名称 | +| bankCode | String | O | 开户行简写 | +| bankTypeCode | String | O | 开户行bankTypeCode | +| **picturesInfo** | Object | M | 图片信息 | +| extraPics | Object[] | O | 其他照片,最多传5张 | +| id | String | M | 图片ID,字母和数组组成,不超过30个字符,例如:其他图片:extraPics1(多个后面数字递增), | +| msg | String | M | 图片中文说明 | +| url | String | M | 图片访问地址 | +| tradingFlowPics | Object[] | O | 交易流水 | +| id | String | M | 图片ID,字母和数组组成,不超过30个字符。例如:交易流水数据:tradingFlowPics1(多个后面数字递增) | +| msg | String | M | 图片中文说明 | +| url | String | M | 图片访问地址 | +| bdagentPic | String | O | BD代理商合影照片 | +| businessLicensePic | String | O | 营业执照照片 | +| handIdCardPic | String | O | 手持身份证照片 | +| idCardBackPic | String | M | 身份证国徽面 | +| idCardFrontPic | String | M | 身份证人像面 | +| publicAccountPic | String | C | 开户许可证/企业账户截图 | +| settleBankCardFrontPic | String | M | 结算对象银行卡正面照片或开户许可证; | +| shopInnerPic | String | O | 经营场所室内照片 | +| shopLeasePic | String | O | 经营场所照片 | +| shopOuterPic | String | O | 经营场所门头照 | +| shopPlaceRightCertifyFile | String | O | 经营场所产权证明/租赁合同 | +| newAgentProtocolPic | String | O | 合作协议原件 | + +### 请求示例 + +```json +{ + "data": { + "targetAgentId": "1923721" + }, + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "/QtV8qmuFwEu9ZNMXP87U+3c2rytakSWUR4qPxeeGSo=", + "algorithm": true, + "version": "1.0", + "reqSerialNo": "11111111111" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "rejectedReason": null, + "baseInfo": { + "agentAddress": "河南省郑州市哈哈哈哈", + "agentCity": "郑州市", + "agentCityCode": "410100", + "agentLevel": 2, + "agentParentId": "1923721", + "agentProperty": 0, + "agentProvince": "河南省", + "agentProvinceCode": "410000", + "businessLicenseEndDate": "永久有效", + "creditCode": "914101056871103879", + "enterpriseTitle": "河南亿腾实业有限公司", + "establishmentDate": "2009-03-27", + "legalPersonCertEndDate": "2035-07-14", + "legalPersonIdCard": "422***********3779", + "legalPersonMobile": "157****8442", + "legalPersonName": "张三", + "protocolEndDate": null, + "province": "全国", + "agentName": "河南亿腾实业有限公司", + "contactName": "张三", + "contactMobile": "157****8442", + "agentShortName": "接口外放新增二代", + "agentAccount": "utsOpenApiRej0008" + }, + "settleInfoList": [ + { + "bankAccountType": 1, + "bankAccountNo": "621*********5510", + "bankCardHolder": "张三", + "bankMobile": "156****0555", + "bankUnionpayCode": "302491039144", + "settObCertNo": "422***********3779", + "settObType": "legalPerson", + "bankProvince": "河南省", + "bankProvinceCode": "410000", + "bankCity": "郑州市", + "bankCityCode": "410100", + "branchName": "中信银行郑州东明路支行", + "bankName": "中信银行", + "bankTypeCode": "C1030211000389" + } + ], + "picturesInfo": { + "extraPics": [], + "tradingFlowPics": [], + "bdagentPic": null, + "businessLicensePic": "picture2/M00/04/60/CmAiBGPjBpyANBOtACcClsSy3SU128.jpg", + "handIdCardPic": null, + "idCardBackPic": "picture/M00/07/74/rBQhyWPjBWaAEtL2ABmCZ7e3y6k902.jpg", + "idCardFrontPic": "picture2/M00/08/BF/CmAiA2PjBh2ARP53AAJIiE4mLPQ463.png", + "publicAccountPic": null, + "settleAuthLetterPic": null, + "settleBankCardFrontPic": "picture2/M00/04/60/CmAiBGPjBvuATRzwABEX9D_3qKU624.jpg", + "shopInnerPic": "picture2/M00/04/60/CmAiBGPjBr6AG0BWAALV0PkCCnU135.png", + "shopLeasePic": null, + "shopOuterPic": "picture2/M00/08/BF/CmAiA2PjBrqAI09nAALV8Cv-b0s755.png", + "shopPlaceRightCertifyFile": "picture2/M00/04/60/CmAiBGPjBsuARiNSAALV0PkCCnU611.png", + "newAgentProtocolPic": "picture2/M00/08/BF/CmAiA2PjBseAQpJWAALV8DW78pQ910.png" + } + } +} +``` + +## 查询业务员列表 + +通过此接口查询业务员列表 + +> - **URL**:/open-api/agentManager/bdList +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| idOrName | String | O | 业务员编号或名称 | +| state | Integer | O | 状态:1-在职,2-离职,3-试岗 | +| recognitionStatus | Integer | O | 认证状态:0-未认证;1-已认证;2-未上传身份证 | +| pageNo | Integer | M | 分页码 | +| pageSize | Integer | M | 分页大小 | + +### 返回参数说明 + +data中的数据,数据类型为Object[] + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| bdId | String | M | 业务员编号 | +| bdName | String | M | 业务员名称 | +| bdAccount | String | M | 业务员账号 | +| bdPhone | String | M | 业务员手机 | +| bdState | Integer | M | 状态:1-在职,2-离职,3-试岗 | +| remark | String | M | 备注 | +| leaveTime | String | C | 业务员离职时间 | +| bdRole | Integer | M | 业务员角色:0-普通业务员;3-大区经理; | +| agentParentId | String | M | 直属代理商 | +| idcardFront | String | M | 身份证正面照 | +| idcardBack | String | M | 身份证背面照 | +| recognitionStatus | Integer | M | 认证状态:0-已上传未认证;1-已上传已认证;2-未上传身份证 | +| idcardNum | String | M | 身份证号 | +| idcardName | String | M | 身份证姓名 | +| idcardEndTime | String | M | 身份证有效期结束时间 | + +### 请求示例 + +```json +{ + "data": { + "idOrName": "881925357004", + "recognitionStatus": 0, + "pageNum": 1, + "pageSize": 10 + }, + "agentId": "1923721", + "currentAgentId": "881925357", + "sign": "I/9av3nNuSwb8pCRJ+8JibJBXTjUwdqC7te3J5LNbi0=", + "algorithm": true, + "version": "1.0", + "reqSerialNo": "11111111111" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 1, + "data": [ + { + "bdId": "881925357004", + "bdName": "张三", + "bdAccount": "openApiAddBd0802", + "agentParentId": "881925357", + "bdState": 3, + "leaveTime": null, + "remark": "", + "bdPhone": "157****8442", + "bdRole": 3, + "idcardBack": "picture/M00/07/78/rBQhyWPkW-SAZNYOABmCZ7e3y6k704.jpg", + "idcardFront": "picture/M00/07/78/rBQhymPkW9uAb5BpAAJIaHeywqo322.png", + "idcardNum": "422301********3773", + "idcardName": "张三", + "idcardEndTime": "2035-07-14", + "recognitionStatus": 0 + } + ] +} +``` + +## 查询业务员详情 + +通过此接口查询业务员详情 + +> - **URL**:/open-api/agentManager/bdDetail +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| targetBdId | String | M | 查询业务员Id | + +### 返回参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| bdId | String | M | 业务员编号 | +| bdName | String | M | 业务员名称 | +| bdAccount | String | M | 业务员账号 | +| bdPhone | String | M | 业务员手机 | +| bdState | Integer | M | 状态:1-在职,2-离职,3-试岗 | +| remark | String | M | 备注 | +| leaveTime | String | M | 业务员离职时间 | +| bdRole | Integer | M | 业务员角色:0-普通业务员;3-大区经理 | +| agentParentId | String | M | 直属代理商 | +| idcardFront | String | M | 身份证正面照 | +| idcardBack | String | M | 身份证背面照 | +| recognitionStatus | Integer | M | 认证状态:0-已上传未认证;1-已上传已认证;2-未上传身份证 | +| idcardNum | String | M | 身份证号 | +| idcardName | String | M | 身份证姓名 | +| idcardEndTime | String | M | 身份证有效期结束时间 | + +### 请求示例 + +```json +{ + "data": { + "targetBdId": "881925357005" + }, + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "Q2PhnHow24Vld119U4xsW8f0aEjBNds4Vm6FwtSoL6s=", + "algorithm": true, + "version": "1.0", + "reqSerialNo": "11111111111" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "bdId": "881925357005", + "bdName": "石桂圆", + "bdAccount": "openApiAddBd0803", + "agentParentId": "881925357", + "bdState": 1, + "leaveTime": null, + "remark": "", + "bdPhone": "157****8442", + "bdRole": 0, + "idcardBack": "picture/M00/07/78/rBQhyWPkW-SAZNYOABmCZ7e3y6k704.jpg", + "idcardFront": "picture/M00/07/8A/rBQhyWPqB8WAZOYyAAVhsyx5SDk154.jpg", + "idcardNum": "622621********2818", + "idcardName": "石桂圆", + "idcardEndTime": "2035-07-15", + "recognitionStatus": 0 + } +} +``` + +## 修改业务员基本信息 + +通过此接口修改业务员基本信息 + +> - **URL**:/open-api/agentManager/updateBdBaseInfo +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| bdId | String | M | 业务员Id | +| idcardName | String | M | 身份证姓名 | +| bdName | String | M | 业务员名字 | +| idcardNum | String | O | 身份证号 | +| bdRole | Integer | O | 业务员角色:0-业务员;3-区域经理 | +| idcardEndTime | String | O | 身份证有效期结束时间 | +| remark | String | O | 备注 | +| idcardBack | String | O | 身份证背面照地址 | +| idcardFront | String | O | 身份证背面照地址 | + +### 请求示例 + +```json +{ + "data": { + "idcardNum": "622621199808062818", + "bdId": "881925357005", + "bdName": "石桂圆", + "bdRole": 3, + "idcardEndTime": "2035-07-15", + "remark": "", + "idcardBack": "picture\/M00\/07\/78\/rBQhyWPkW-SAZNYOABmCZ7e3y6k704.jpg", + "idcardFront": "picture\/M00\/07\/8A\/rBQhyWPqB8WAZOYyAAVhsyx5SDk154.jpg", + "idcardName": "石桂圆" + }, + "agentId": "1923721", + "currentAgentId": "881925357", + "sign": "Q2PhnHow24Vld119U4xsW8f0aEjBNds4Vm6FwtSoL6s=", + "algorithm": true, + "version": "1.0", + "reqSerialNo": "11111111111" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": null +} +``` + +# 查询代理商入网信息 + +## 获取代理商简单信息 + +通过此接口获取代理商简单信息 + +> - **URL**:/open-api/agentManager/getAgentSimpleInfo +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| targetAgentId | String | M | 代理商id | + +### 返回参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| agentId | String | M | 代理商id | +| topAgentId | String | M | 一级代理商编号 | +| agentParentId | String | M | 上级代理商编号 | +| allSuperAgentId | String | M | 代理商所有上级编号 | +| agentName | String | M | 代理商名称 | +| settleName | String | M | 结算人姓名 | +| legalName | String | M | 法人姓名 | +| mobile | String | M | 联系人手机号 | +| agentLevel | Integer | M | 代理商等级 | +| agentType | Integer | M | 代理商类型:0-企业;1-个人;2-个体工商户 | +| auditState | Integer | M | 审核状态:-1-人工审核终止;0-初始;1-系统审核通过,待人工审核;2-自动审核失败,待人工审核;3-系统审核通过;风控审核驳回;4-系统审核失败,风控审核驳回;5-系统审核驳回; 6-系统审核通过,人工审核通过 | +| auditTime | String | M | 审核时间/入网时间 | +| createTime | String | M | 创建时间 | +| updateTime | String | M | 更新时间 | +| drawPattern | Integer | M | 分润结算模式:1-按天;3-按月 | +| withdrawTax | Integer | M | 提现税点 | +| blockStatus | Integer | M | 账号状态:0-正常;3-结算冻结 | +| agentInvoiceType | Integer | M | 发票服务类型:0-全部自有;1-全部代开;2-一代自有,子代代开 | +| withdrawState | Integer | M | 提现状态:0-正常;1-禁止提现 | +| bankAccountType | Integer | M | 账号类型:1-对私;2-对公 | +| bankCardHolder | String | M | 结算卡开户名 | +| settObType | String | M | 结算方式:legalPerson-法人结算;company-对公结算 | +| backSwitchOpen | String | M | 返现开关 | +| commissionSwitchOpen | String | M | 分润开关 | +| lowerDivideCent | String | M | 抽取下级代理商高签利润的比例,如果选择标准模式,则传0 | +| profitRule | String | M | 分润模式:0-标准模式,1-标准+抽成 | +| agentShortName | String | M | 代理商简称 | +| bankMobile | String | M | 银行预留手机号 | +| agentAccount | String | M | 登录账号 | + +### 请求示例 + +```json +{ + "data": { + "targetAgentId": "881925357" + }, + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "Yi9n7Bj3aAz8LEbfpjOBYrdQQyVt1i0tvgs5SNZELps=" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "agentId": "881925357", + "topAgentId": "1923721", + "agentParentId": "1923721", + "allSuperAgentId": "1923721_881925357", + "agentName": "河南亿腾实业有限公司", + "settleName": "张三", + "legalName": "张三", + "mobile": "157****8442", + "agentLevel": 2, + "agentType": 0, + "auditState": 6, + "auditTime": "2023-02-09 10:27:17", + "createTime": "2023-02-09 10:27:17", + "updateTime": "2023-02-09 10:27:17", + "drawPattern": 3, + "withdrawTax": 80, + "blockStatus": 0, + "agentInvoiceType": 1, + "withdrawState": 0, + "bankAccountType": 1, + "bankCardHolder": "张三", + "settObType": "legalPerson", + "backSwitchOpen": "N", + "commissionSwitchOpen": "N", + "lowerDivideCent": 0, + "profitRule": 0, + "agentShortName": "接口外放新增二代", + "bankMobile": "156****0555", + "agentAccount": "utsOpenApiRej0008" + } +} +``` + +## 获取代理商成本 + +通过此接口获取代理商成本 + +> - **URL**:/open-api/agentManager/getAdditionCommission +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| targetAgentId | String | M | 代理商id | + +### 返回参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| profitRule | Integer | M | 分润模式:0-标准模式;1-标准+抽成 | +| lowerDivideCent | Integer | M | 抽取下级代理商高签利润的比例,如果选择标准模式,则传0 | +| taxPoint | Integer | M | 提现税点 | +| switchProfitPay | String | M | 返现代付开关,Y/N | +| switchCashbackPay | String | M | 分润代付开关,Y/N | +| **ruleDetailAddReqDto** | Object | M | 成本明细 | +| post1DebitCommission | String | M | 刷卡T1借记卡 | +| posT1DebitMaxFeeBymillion | String | M | 刷卡T1借记卡封顶值(元) | +| post0DebitCommission | String | M | 刷卡T0借记卡 | +| posT0DebitMaxFeeBymillion | String | M | 刷卡T0借记卡封顶值(元) | +| post1CreditCommission | String | M | 刷卡T1贷记卡 | +| post0CreditCommission | String | M | 刷卡T0贷记卡 | +| alit1CreditCommission | String | M | 支付宝T1贷记卡 | +| alit0CreditCommission | String | M | 支付宝T0贷记卡 | +| wxt1CreditCommission | String | M | 微信T1贷记卡 | +| wxt0CreditCommission | String | M | 微信T0贷记卡 | +| unionmint1CreditCommission | String | M | 银联小额T1贷记卡 | +| unionmint0CreditCommission | String | M | 银联小额T0贷记卡 | +| unionmaxt1CreditCommission | String | M | 银联大额T1贷记卡 | +| unionmaxt0CreditCommission | String | M | 银联大额T0贷记卡 | +| unionDebitCardD0Above | String | M | 银联大额T0借记卡 | +| unionDebitCardD0MaxAbove | String | M | 银联大额T0借记卡T0封顶值(元) | +| unionDebitCardD1Above | String | M | 银联大额T1借记卡 | +| unionDebitCardMaxAbove | String | M | 银联大额T1借记卡T1封顶值(元) | +| cardD0WithdrawFeeSwitch | String | M | D0单笔提现费固定值开关, 1-开启, 0-关闭 | +| t0WithdrawCommissionBymillionSwitch | String | M | D0单笔提现费百分比开关, 1-开启, 0-关闭 | +| t0DebitWithdrawCommissionBymillion | String | M | D0单笔提现费百分比 | +| t0DebittWithdrawFeeBymillion | String | M | D0单笔提现费固定值(元) | +| wxt1CreditCommissionOther | String | M | 微信其他T1 | +| wxt0CreditCommissionOther | String | M | 微信其他T0 | +| wxt1CreditCommissionCollege | String | M | 微信高校食堂T1 | +| wxt0CreditCommissionCollege | String | M | 微信高校食堂T0 | +| wxt1CreditCommissionTeaching | String | M | 微信教培T1 | +| wxt0CreditCommissionTeaching | String | M | 微信教培T0 | +| wxt0CreditCommissionLvZhou | String | M | 微信绿洲T0 | +| wxt1CreditCommissionLvZhou | String | M | 微信绿洲T1 | + +### 请求示例 + +```json +{ + "data": { + "targetAgentId": "185891088" + }, + "agentId": "1923721", + "currentAgentId": "185891088", + "sign": "/XA73pAbvlAuJ4iWKugO7iWVv/SnxLrvbueiCQmqywc=", + "algorithm": true, + "version": "1.0", + "reqSerialNo": "11111111111" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "ruleDetailAddReqDto": { + "alit1CreditCommission": "0.230", + "alit0CreditCommission": "0.230", + "wxt1CreditCommission": "0.330", + "wxt0CreditCommission": "0.400", + "post1DebitCommission": "0.420", + "post0DebitCommission": "0.420", + "posT1DebitMaxFeeBymillion": "25", + "posT0DebitMaxFeeBymillion": "27", + "t0DebitWithdrawCommissionBymillion": "0.050", + "t0DebittWithdrawFeeBymillion": "1.00", + "post1CreditCommission": "0.515", + "post0CreditCommission": "0.515", + "unionmint1CreditCommission": "0.230", + "unionmint0CreditCommission": "0.230", + "unionmaxt1CreditCommission": "0.530", + "unionmaxt0CreditCommission": "0.530", + "unionDebitCardD1Above": "0.420", + "unionDebitCardD0Above": "0.420", + "unionDebitCardMaxAbove": "20", + "unionDebitCardD0MaxAbove": "27", + "cardD0WithdrawFeeSwitch": 0, + "t0WithdrawCommissionBymillionSwitch": 1, + "wxt1CreditCommissionOther": "0.600", + "wxt0CreditCommissionOther": "0.600", + "wxt1CreditCommissionCollege": "0.000", + "wxt0CreditCommissionCollege": "0.000", + "wxt1CreditCommissionTeaching": "0.380", + "wxt0CreditCommissionTeaching": "0.380", + "wxt0CreditCommissionLvZhou": "0.220", + "wxt1CreditCommissionLvZhou": "0.210" + }, + "switchProfitPay": "N", + "switchCashbackPay": "N", + "taxPoint": 80, + "lowerDivideCent": 1, + "profitRule": 1 + } +} +``` + +## 查询结算卡信息 + +通过此接口查询代理商结算卡信息 + +> - **URL**:/open-api/agentManager/agentSettleInfo/query +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| targetAgentId | String | M | 代理商id | + +### 返回参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| bankAccountType | String | M | 账号类型:1-对私;2-对公 | +| bankAccountNo | String | M | 结算账户号码 | +| bankCardHolder | String | M | 开户名 | +| bankMobile | String | M | 银行预留手机号 | +| bankUnionpayCode | String | M | 联行号 | +| settObType | String | M | 结算方式:legalPerson=法人结算;company=对公结算 | +| bankProvince | String | M | 开户行所在省份 | +| bankProvinceCode | String | M | 开户行所在省份编号 | +| bankCity | String | M | 开户行所在市区 | +| bankCityCode | String | M | 开户行所在市区编码 | +| branchName | String | M | 支行名称 | +| bankName | String | M | 开户行名称 | +| bankCode | String | O | 开户行简写 | +| bankTypeCode | String | O | 开户行编码 | + +### 请求示例 + +```json +{ + "data": { + "targetAgentId": "1923721" + }, + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "/QtV8qmuFwEu9ZNMXP87U+3c2rytakSWUR4qPxeeGSo=" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 2, + "data": [ + { + "bankAccountType": 1, + "bankAccountNo": "621*********5510", + "bankCardHolder": "戴宁", + "bankMobile": "136****9832", + "bankUnionpayCode": "302491039128", + "settObCertNo": "450***********1155", + "settObType": "legalPerson", + "bankProvince": "河南省", + "bankProvinceCode": "410000", + "bankCity": "郑州市", + "bankCityCode": "410100", + "branchName": "中信银行郑州陇海路支行", + "bankName": "中信银行", + "bankCode": "CITIC", + "bankTypeCode": "C1030211000389" + }, + { + "bankAccountType": 2, + "bankAccountNo": "170************1679", + "bankCardHolder": "超三馄饨小吃店", + "bankMobile": "", + "bankUnionpayCode": "102492002019", + "settObType": "company", + "bankProvince": "河南省", + "bankProvinceCode": "410000", + "bankCity": "开封市", + "bankCityCode": "410200", + "branchName": "中国工商银行开封分行南关支行", + "bankName": "中国工商银行", + "bankCode": "ICBC", + "bankTypeCode": "C1010211000012" + } + ] +} +``` + +# 结算账户变更 + +## 修改结算卡信息 + +通过此接口修改代理商结算卡信息 + +> - **URL**:/open-api/agentManager/agentSettleInfo/update +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| bankCardHolder | String | M | 开户名 | +| bankUnionpayCode | String | M | 联行号 | +| bankMobile | String | M | 银行预留手机号 | +| bankAccountType | String | M | 账号类型:1-对私;2-对公 | +| bankCity | String | M | 开户行所在市区 | +| bankAccountNo | String | M | 结算账户号码 | +| bankProvince | String | M | 开户行所在省份 | +| bankProvinceCode | String | O | 开户行所在省份编号 | +| bankCityCode | String | O | 开户行所在市区编码 | +| bankTypeCode | String | M | 开户行bankTypeCode | +| settleCardPic | String | M | 结算银行卡正面照片/企业开户许可证/企业账户截图 | +| settObType | String | M | 结算方式:legalPerson=法人结算;company=对公结算 | + +### 返回参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| agentId | String | M | 代理商id | +| checkStatus | String | M | 审核状态:1 审核通过 2 审核拒绝 3 审核中 | +| respMsg | String | M | 描述信息 | +| errMsg | String | M | 错误信息 | +| **checkDetails** | Object[] | M | 鉴权记录列表 | +| checkCode | String | M | 审核结果code | +| checkMsg | String | M | 审核结果描述信息 | +| filterName | String | M | 鉴权事项描述 | + +### 请求示例 + +```json +{ + "data": { + "bankTypeCode": "C1030211000389", + "bankName": "中信银行", + "bankUnionpayCode": "302491039144", + "bankProvince": "河南省", + "bankCity": "郑州市", + "bankMobile": "156****0555", + "bankAccountType": 1, + "bankAccountNo": "6217********5510", + "settleCardPic": "picture2/M00/04/60/CmAiBGPjBvuATRzwABEX9D_3qKU624.jpg", + "bankCardHolder": "张三" + }, + "agentId": "1923721", + "currentAgentId": "128955913", + "sign": "JPX1Zve/25McY57qR7a339TEYfDuJDiXkUtfKKcPhGg=", + "algorithm": true, + "version": "1.0", + "reqSerialNo": "11111111111" +} +``` + +### 成功响应 + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "agentId": "128955913", + "checkStatus": "1", + "respMsg": null, + "checkDetails": [ + { + "checkCode": "autoPassWaitManual", + "checkMsg": "系统审核通过,待风控终审", + "filterName": "黑名单检查" + }, + { + "checkCode": "autoPassWaitManual", + "checkMsg": "系统审核通过,待风控终审", + "filterName": "对私结算信息黑名单检查" + }, + { + "checkCode": "autoPassWaitManual", + "checkMsg": "系统审核通过,待风控终审", + "filterName": "银行卡四要素鉴权" + }, + { + "checkCode": "autoPassWaitManual", + "checkMsg": "系统审核通过,待风控终审", + "filterName": "银行卡Ocr鉴权" + } + ], + "errMsg": "黑名单检查:系统审核通过,待风控终审;对私结算信息黑名单检查:系统审核通过,待风控终审;银行卡四要素鉴权:系统审核通过,待风控终审;银行卡Ocr鉴权:系统审核通过,待风控终审" + } +} +``` + +## 新增结算卡信息 + +通过此接口新增代理商结算卡信息 + +> - **URL**:/open-api/agentManager/agentSettleInfo/add +> - **Method**:`POST` +> + +### 请求参数说明 + +data中的数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| bankCardHolder | String | M | 开户名 | +| bankUnionpayCode | String | M | 联行号 | +| bankMobile | String | M | 银行预留手机号 | +| bankAccountType | Integer� | M | 账号类型:1-对私;2-对公 | +| bankCity | String | M | 开户行所在市区 | +| bankAccountNo | String | M | 结算账户号码 | +| bankProvince | String | M | 开户行所在省份 | +| bankProvinceCode | String | O | 开户行所在省份编号 | +| bankCityCode | String | O | 开户行所在市区编码 | +| bankTypeCode | String | M | 开户行编码 | +| settleCardPic | String | M | 结算银行卡正面照片/企业开户许可证/企业账户截图; | +| settObType | String | M | 结算方式:legalPerson-法人结算;company-对公结算 | + +### 请求示例 + +```json +{ + "data": { + "bankCardHolder": "张三", + "bankUnionpayCode": "105793000036", + "bankMobile": "156****0555", + "bankAccountType": 1, + "bankCity": "宝鸡市", + "bankAccountNo": "6217********55555", + "bankProvince": "陕西省", + "bankProvinceCode": "610000", + "bankCityCode": "610300", + "settObType": "legalPerson", + "bankTypeCode": "C1010511003703", + "settleCardPic": "picture2\/M00\/04\/76\/CmAiBGPrU52ADaHSAATq8HrGfiw679.jpg" + }, + "agentId": "1923721", + "currentAgentId": "881925357", + "sign": "WDykjPX7iR8KKy09HZyFf25Bg8+y6vz2qYe2UQihM04=", + "algorithm": true, + "version": "1.0", + "reqSerialNo": "11111111111" +} +``` + +### 成功响应 + +```json +{ + "error_code": "301", + "error_msg": "[881925357]该代理商还存在待风控终审的修改结算类型记录,暂不能提交", + "count": 0, + "data": null +} +``` + +# 分润相关 + +## 代理商发票列表 + +代理商可通过此接口查询代理商所有发票的审核记录 + +> - **URL**:`/open-api/agentProfit/invoice/agentInvoiceList` +> - **Method**:`POST` +> + +### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| startDate | String | O | 开始日期 | +| endDate | String | O | 结束日期 | +| state | String | O | 审核状态,0:未审核,1:审核通过,2:审核不通过 | +| invoiceBuyer | String | O | 发票购买方,0:乐刷,1:富匙 | +| pageNo | Integer | M | 页码 | +| pageSize | Integer | M | 每页数量 | + +### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| totalInpAmount | String | M | 合计申请发票面值,单位:元 | +| totalAuditAmount | String | M | 合计审核发票面值,单位:元 | +| totalAuditPassAmount | String | M | 发票可用余额,单位:元 | +| isRelySpoon | Integer | M | 是否挂靠富匙 0: 没有 1: 有 | +| everRelyRichSpoon | Integer | M | 是否曾经挂靠富匙 0: 没有 1: 有 | +| **list** | List | M | 发票列表 | +| inputAmount | String | M | 申请发票面值,单位:元 | +| auditAmount | String | M | 审核发票面值,单位:元 | +| invoiceCode | String | M | 发票代码 | +| invoiceNo | String | M | 发票号 | +| invoiceBuyer | Integer | M | 发票购买方,0:乐刷,1:富匙 | +| taxRatio | String | M | 税率,单位:% | +| tax | String | M | 税额,单位:元 | +| invoiceTime | String | M | 开票时间 | +| content | String | M | 发票内容 | +| trackingNo | String | M | 快递单号 | +| remark | String | M | 备注 | +| image | String | M | 发票图片 | +| picUrl | String | M | 图片url | +| state | Integer | M | 审核状态,0:未审核,1:审核通过,2:审核不通过 | +| source | Integer | M | 录入来源,0:财务录入,1:代理商录入 | +| operator | String | M | 录入人员 | +| createTime | String | M | 记录生成时间 | +| updateTime | String | M | 记录更新时间 | +| checkRemark | String | M | 审核备注 | +| flowId | String | M | 审核通过对应的流水号 | +| auditOperator | String | M | 审核人员 | +| auditId | String | M | 审核编号 | + +### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "pageNo": 1, + "pageSize": 20 + } +} +``` + +### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 1, + "data": { + "list": [ + { + "inputAmount": "100.00", + "auditAmount": "0.00", + "invoiceCode": "8700003282989583", + "invoiceNo": "58334525", + "invoiceBuyer": 0, + "taxRatio": "8.00", + "tax": "7.41", + "invoiceTime": "2022-07-06", + "content": "测试下新增发票", + "trackingNo": "214214214214", + "remark": "测试添加1232", + "image": "picture/M00/05/D0/rBQhyWLXutWAedY2AAFgr1xw4qI846.jpg", + "picUrl": "9e344538dcc2e13459090573b6ea7791.jpg", + "state": 0, + "source": 1, + "operator": "spe202203", + "createTime": "2023-03-21 17:19:34", + "updateTime": "2023-03-21 17:19:34.0" + } + ], + "totalInpAmount": "9178.80", + "totalAudtiAmount": "1235.25", + "totalAuditPassAmount": "1234.25", + "isRelySpoon": 1, + "usedRelyRichSpoon": 1 + } +} +``` + +### 错误响应 + +> **条件**:请求数据非法,例如pageNo为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "pageNo不能为空", + "count": 0, + "data": null +} +``` + +## 代理商发票录入 + +代理商可通过此接口录入发票。 + +> - **URL**:`/open-api/agentProfit/invoice/inputAgentInvoice` +> - **Method**:`POST` +> + +### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| invoiceNo | String | M | 发票号码 | +| invoiceCode | String | O | 发票代码 | +| invoiceTime | String | M | 开票时间格式yyyy-MM-dd | +| content | String | M | 发票内容 | +| taxRatio | Long | M | 发票税率,单位:百万分之一,例如30000 | +| tax | Long | M | 发票税额,单位:百万分之一分,例如359581000000 | +| trackingNo | String | O | 快递单号 | +| image | String | M | 发票图片 | +| remark | String | O | 备注 | +| inputAmount | Long | M | 发票金额,单位:分", 例如 "12345600" | +| invoiceBuyer | Integer | M | 发票购买方,0: 乐刷 1: 富匙 | + +### 业务返回数据 + +无 + +### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "content": "测试下新增发票", + "image": "picture/M00/05/D0/rBQhyWLXutWAedY2AAFgr1xw4qI846.jpg", + "inputAmount": 10000, + "invoiceBuyer": 0, + "invoiceCode": "8700003282989583", + "invoiceNo": "58334525", + "invoiceTime": "2022-07-06", + "tax": 741000000, + "taxRatio": 80000, + "trackingNo": "214214214214", + "remark": "测试添加1232" + } +} +``` + +### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": "新增成功" +} +``` + +### 错误响应 + +> **条件**:发票已提交。 +> +> 状态码:`1` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "该发票正在审核中,不能重复提交", + "count": 0, + "data": null +} +``` + +## 代理商账户余额列表 + +代理商可通过此接口查询账户余额 + +> - **URL**:`/open-api/agentProfit/​getAgentAccountStatistics` +> - **Method**:`POST` +> + +### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| targetAgentId | String | M | 目标代理商编号 | + +### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| **data** | List | M | 账户列表 | +| bookType | String | M | 账户 | +| balance | String | M | 账户余额,单位:元 | +| totalIncome | String | M | 历史收入合计,单位:元 | +| withdrawnMoney | String | M | 已提现,单位:元 | +| deductedMoney | Integer | M | 已扣款,单位:元 | +| invoiceBalance | String | M | 发票余额,单位:元 | + +### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "targetAgentId": "1923721" + } +} +``` + +### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": [ + { + "bookType": "分润账户", + "balance": "89,078.73", + "totalIncome": "101,011.91", + "withdrawnMoney": "11,725.76", + "deductedMoney": "207.42", + "invoiceBalance": "1,078,745,332.18" + }, + { + "bookType": "返佣账户", + "balance": "19,200.79", + "totalIncome": "21,497.44", + "withdrawnMoney": "2,273.29", + "deductedMoney": "23.36", + "invoiceBalance": "1,078,745,332.18" + }, + { + "bookType": "返现账户", + "balance": "997,443.48", + "totalIncome": "1,001,224.00", + "withdrawnMoney": "0.00", + "deductedMoney": "3,780.52", + "invoiceBalance": "1,078,745,332.18" + }, + { + "bookType": "其他账户", + "balance": "24,462.70", + "totalIncome": "43,481.15", + "withdrawnMoney": "18,934.15", + "deductedMoney": "84.30", + "invoiceBalance": "1,063,555.25" + } + ] +} +``` + +### 错误响应 + +> **条件**:请求数据非法,例如targetAgentId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "targetAgentId不能为空", + "count": 0, + "data": null +} +``` + +## 代理商账户明细列表 + +代理商可通过此接口查询账户余额 + +> - **URL**:`/open-api/agentProfit/listAgentAccountDetail` +> - **Method**:`POST` +> + +### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| beginTime | String | O | 开始时间 | +| endTime | String | O | 结束时间 | +| bookTypeNo | String | O | 账户类型 5009.分润账户,5015.返佣账户 ,5063.返现账户,5076.其他账户 | +| businessType | String | O | 业务类型 | +| incomeType | String | O | 收支类型 0.资金流入 1.资金流出 | +| pageNo | Integer | O | | +| pageSize | Integer | O | | + +### 业务返回数据 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| **data** | List | M | 账户列表 | +| bookType | String | M | 账户类型 | +| bookTypeOri | String | M | ​ | +| businessType | String | M | 业务类型 | +| incomeType | String | M | 收支类型 0.资金流入 1.资金流出 | +| incomeTypeOri | String | M | ​ | +| amount | String | M | 发生金额,单位:元 | +| balance | String | M | 账户余额,单位:元 | +| remark | String | M | 备注 | +| createTime | String | M | 账户流水记录创建时间 | + +### 请求示例 + +```json +{ + "agentId": "1923721", + "currentAgentId": "1923721", + "sign": "AE+nH/3ufd8JfZufsYBFoUS5Cf2/9w21yw36q7Ir7OI=", + "data": { + "pageNo": 1, + "pageSize": 2 + } +} +``` + +### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 170, + "data": [ + { + "createTime": "2023-03-22 18:26:34", + "bookType": "分润账户", + "bookTypeOri": "5009", + "businessType": "其他", + "incomeType": "支出", + "incomeTypeOri": "1", + "amount": "0.01", + "balance": "89,078.73", + "remark": "damian_test" + }, + { + "createTime": "2023-03-22 18:07:20", + "bookType": "分润账户", + "bookTypeOri": "5009", + "businessType": "其他", + "incomeType": "支出", + "incomeTypeOri": "1", + "amount": "0.01", + "balance": "89,078.74", + "remark": "damian_test" + } + ] +} +``` + +### 错误响应 + +> **条件**:请求数据非法,例如currentAgentId为空。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "currentAgentId不能为空", + "count": 0, + "data": null +} +``` + +## ​ diff --git a/docs/联合收单接口文档/11-获取对账文件.md b/docs/联合收单接口文档/11-获取对账文件.md new file mode 100644 index 0000000..2f6eb8b --- /dev/null +++ b/docs/联合收单接口文档/11-获取对账文件.md @@ -0,0 +1,5 @@ +# 获取对账文件 + +> 来源: + + diff --git a/docs/联合收单接口文档/13-对账单相关说明.md b/docs/联合收单接口文档/13-对账单相关说明.md new file mode 100644 index 0000000..9a09200 --- /dev/null +++ b/docs/联合收单接口文档/13-对账单相关说明.md @@ -0,0 +1,297 @@ +# 对账单相关说明 + +> 来源: + +# **1 FTP对账单** + +## **1.1对账单文件格式说明** + +​**对账文件位置:**FTP(账号信息请联系对接运营提供) **文件生成时间:**交易次日9点后可下载 + +**默认仅生成代理商分润明细**。如需其他对账单,请联系对接运营申请配置(**配置后****隔一日后生效**,**不支持生成此前的****存量数据**)。 + +> 常见问题:不支持生成存量数据对账单,存量交易数据的手续费如何获取?调用**交易结算数据查询、推送**的**交易结算详情查询**主查接口。 +> + +| **序号**​ | **文件内容**​ | **文件名命名格式**​ | **备注**​ | +| --- | --- | --- | --- | +| 1 | 交易明细 | 1619191_trade_new_2018-07-20.txt | 代理商编号_trade_new_日期.txt​ | +| 2 | 代理商分润明细 | 78860_profit_2020-07-20.txt | 代理商编号_profit_日期.txt | +| 3 | 商户打款明细(rt) | 12345687_rt_日期.txt | 代理商编号_rt_日期.txt | +| 4 | 商户打款明细(rtp) | 1051356_rtp_日期.txt | 代理商编号_rtp_日期.txt | +| 5 | 商户打款明细(rtz) | 12345687_rtz_日期.txt | 代理商编号_rtz_日期.txt | +| 6 | 分账明细(订单分账) | 1157213_ledgerDetail_20210114.txt | 代理商编号_ledgerDetail_日期.txt | +| 7 | 分账明细(余额分账) | 1157213_BalanceledgerDetail_20210114.txt​ | 代理商编号_BalanceledgerDetail_日期.txt​ | +| 8 | 分时打款对账单 | (1619191_rtp_2019-10-27.txt) | ​ | +| 9 | 分时明细对账单 | 1619191_trade_timeAdjust_20191107.txt | 代理商编号_trade_timeAdjust_日期.txt | +| 10 | 延时结算(扫码预授权)订单清分明细对账单 | 1619191_7021568_wechat_app_2025-10-28.txt | 代理商编号_7021568_wechat_app_日期.txt | +| 11 | 代理商提现秒到分润对账单 | 5731989_withdraw_profit_20250806.txt | 代理商编号_withdraw_profit_日期.txt | +| 12 | 补贴明细对账单 | 2653276_subsidy_2022-07-20.txt | 服务商编号_subsidy_YYYY-MM-DD.txt | + +## **1.2参数说明** + +### ​**1.2.1 交易明细对账单** + +| **序号** | **字段**​ | **示例值** | **说明** | +| --- | --- | --- | --- | +| 1 | 记录类型 | BT/BV | 标题/记录值 | +| 2 | 编号 | 0 | 序列号,无实际业务含义 | +| 3 | 交易时间 | 2018-07-3116:07:27 | 乐刷记录的时间,T0 订单为结算时间,T1 订单为交易发起时间 | +| 4 | 订单号 | 1807311607130567 | 乐刷记录该笔交易的唯一订单号 | +| 5 | 商户号 | 5800108650 | 乐刷分配的唯一商户编号 | +| 6 | 费率(万分之一) | 38 | 商户的交易成本费率 | +| 7 | 交易金额(分) | 500 | 交易产生的实际金额 | +| 8 | 手续费(分) | 2 | 交易产生的手续费 | +| 9 | 结算金额(分) | 498 | 商户的应结算金额 | +| 10 | 资金流向 | 进账 | 包括:进账,出账,冻结,解冻,退款 | +| 11 | 交易类型 | 未获取 | 1、pos 刷卡交易:消费,消费充正,消费撤销,退货中,退货成功,退货失败;扫码业务:退货中,退货成功,退货失败 【预授权完成】 【预授权完成撤销】 (1)消费:商户资金+ (2)消费冲正:商户资金不变动 (3)消费撤销:商户资金— (4)退货成功:商户资金减 (5)退货失败:商户资金加(这里的退货失败,可以理解为退货扣款的冲正) (6) 冲账:商户资金不变动" | +| 12 | 支付方式 | 支付宝支付 | 包括:刷卡支付,微信支付,支付宝支付、银联扫码支付 | +| 13 | 卡类型 | 信用卡 | 此参数适用于刷卡支付,包括信用卡、借记卡、未知 | +| 14 | 商户优惠类型 | 标准类 | 包括标准类,优惠类 | +| 15 | 参考号 | 20180731210010 04520546902261 | 此参数适用于刷卡支付 | +| 16 | 凭证号 | * | 此参数适用于刷卡支付,交易产生的凭证号 | +| 17 | 终端号 | * | 此参数适用于刷卡支付,交易付款使用的付款终端编号 | +| 18 | 第三方订单号 | 50020180731160717965 | 即代理商代商户发起交易时的订单号 | +| 19 | 第三方退款号 | 50020180731160717965 | 即代理商代商户发起退款时的订单号 | +| 20 | 支付时间 | 2018-07-3116:07:27 | 即交易完成时间,乐刷据此进行结算 | +| 21 | 上游订单号(网、银联) | 91533024438317706700 | 网联、银联端订单号 | +| 22 | 上游订单号(微信、支付宝) | 20180731210010 04520546902261 | 微信、支付宝端订单号 | +| 23 | 付款银行 | ALIPAYACCOUNT | 此参数适用于扫码业务,如花呗、信用卡 | +| 24 | 消费者标识 | otCz6vh-Mok4q6hirkf1T1ZePA2o | 微信、支付宝体系下的用户标识,即微信 OpenId、支付宝 userID | +| 25 | 扫码支付交易类型 | JSAPI | 此参数适用于扫码业务,包括:NATIVE:扫码支付;MICROPAY:条码支付;JSAPI:公众号/服务窗支付;APP:app 支付;SmPgPay:小程序支付; | +| 26 | 乐刷退款流水号 | 50020180731160717965 | 退款时记录的乐刷端创建的流水号 | +| 27 | 优惠活动 | 蓝海 | 此参数为参加蓝海行动/绿洲计划交易标识,包括:蓝海:该笔交易属于蓝海行动;绿洲:该笔交易属于绿洲计划 | +| 28 | 订单金额 | 600 | 交易发起的金额 | +| 29 | 优惠金额 | 100 | 交易中优惠消费者的金额 | +| 30 | 代金券类型 | DISCOUNT | 此参数为参加微信代金券类型标识,包括:DISCOUNT 免充值;N 预充值 | +| 31 | 操作类型 | 0 | 0:进账 1:出账 | +| 32 | 分账标识 | 1 | 1:需分账 2:预授权 | +| 33 | 终端编号 | 123456789 | 终端编号 | +| 34 | 门店编号 | 123456789 | 门店编号 | +| 35 | 补贴金额(分) | 500 | 补贴金 | +| 36 | 分账费率(万分hi之一) | / | (注:暂未取值,正在优化) | +| 37 | 分账手续费(分) | 500 | 分账手续费 | + +### **1.2.2 代理商分润明细对账单** + +| **序号**​ | **字段**​ | **示例值**​ | **说明**​ | +| --- | --- | --- | --- | +| 1 | 订单 id | 1805211723306852 | 乐刷记录该笔交易的分润的唯一流水号 | +| 2 | 商户 id | 1009001843 | 乐刷分配的唯一商户编号 | +| 3 | 代理商 id | 83111708 | 乐刷分配的唯一代理商编号 | +| 4 | 标准/优惠 | 标准 | 包括:标准、优惠、减免、特殊计费类 | +| 5 | 商户费率(百分之一) | 0.43 | 此参数的数量级与交易对账单不一样,为百分之一; | +| 6 | 成本费率(百分之一) | 0.23 | 此参数的数量级与交易对账单不一样,为百分之一; | +| 7 | 金额(分) | 200 | 交易产生的实际金额 | +| 8 | 商户手续费(分) | 0 | 交易产生的手续费,计算方式详询运营经理 | +| 9 | 成本(分) | 0 | 代理商的成本,计算方式详询运营经理 | +| 10 | 分润(分) | 0 | 商户手续费与代理商成本之间的差价 | +| 11 | 交易时间 | 2018-05-21 17:23:49 | 同交易对账单的交易时间 | +| 12 | 交易类型 | 0 | 0进账,1出账 | +| 13 | 分润转补贴 | 0 | 百万分之一分 | + +分润明细文件解析规则: trade_agent_header = ["订单id", "商户id", "代理商id", "标准/优惠", "商户费率(百万分之一)", "成本费率(百万分之一)", "金额(分)", "商户手续费(百万分之一分)", "成本(百万分之一分)", "分润(百万分之一分)", "交易时间","交易类型(0-进账,1-出账)","分润转补贴(百万分之一分)","结算标记(0-D0,1-D1)","交易类型","卡类型"] trade_agent_width = [20,10,8,8,20,20,10,15,15,15,12,8,15,8,8,8] **字段值宽度: **每个字段值的最大占位 + +注意:分润数据一般第二天跑批,即1号交易,2号生成分润数据 + +### **1.2.3 商户打款明细对账单(rt)** + +| **序号**​ | **字段**​ | **示例值**​ | **说明** | +| --- | --- | --- | --- | +| 1 | 结算类型 | T0 | 包括:T0、T1 | +| 2 | 打款单号 | 20180702000051843502 | 乐刷记录该笔打款的唯一流水号 | +| 3 | 商户号 | 6511111102 | 乐刷分配的唯一商户编号 | +| 4 | 结算日期 | 2018-07-01 | 1. T0:该笔打款对应的结算日期;2. T1:该笔打款对应的交易日期(被风控时,对应打款单的生成日期) | +| 5 | 应付金额(分) | 47077 | 扣除手续费之后之后应结算给商户的金额; | +| 6 | 银行账号 | (空值) | 商户结算账号 | +| 7 | 银行开户名 | (空值) | 商户结算账户名(空值) | +| 8 | 开户银行名称 | 招商银行 | 商户结算账号开户银行 | +| 9 | 补贴金额(分) | 10 | 营销补贴金额 | +| 10 | 打款单生成标记 | 0 | ​ | +| 11 | 止付金额(分) | 0 | 退款金额 | +| 12 | 刷卡应付金额(分) | 0 | ​ | +| 13 | 扫码应付金额(分) | 705668 | 扫码支付金额 | +| 14 | 分账应付金额(分) | 0 | ​ | +| 15 | 扫码手续费(分) | 0 | ​ | +| 16 | 刷卡手续费(分) | 2132 | ​ | +| 17 | 分账手续费(分) | 0 | ​ | +| 18 | 止付金额(分) | 0 | ​ | +| 19 | 提现费率(万分之一分) | 0 | ​ | +| 20 | 提现手续费(分) | 0 | ​ | +| 21 | 打款状态 | 付款成功 | 打款状态分别有:付款成功;初始化;打款中;付款失败;退票成功;其他 | +| 22 | 失败原因 | 无效卡号或无此账号 | 付款失败的原因,付款成功时为空 | +| 23 | 资金类型 | 7 | 详见[billFlag说明](https://www.yuque.com/leshua-jhzf/qrcode_pay/ooqu7z?inner=xwLfe) | +| 24 | 实付金额(分) | 10 | 实际打款到账金额 | +| 25 | D0交易单号 | ​ | ​ | +| 26 | 手续费补贴总金额(分) | ​ | ​ | +| 27 | 营销补贴总金额(分) | ​ | ​ | + +### **1.2.4 商户打款明细对账单(rtp)** + +| **序号**​ | **字段**​ | **示例值**​ | **说明** | +| --- | --- | --- | --- | +| 1 | 结算类型 | T0 | 包括:T0、T1 | +| 2 | 打款单号 | 20180702000051843502 | 乐刷记录该笔打款的唯一流水号 | +| 3 | 商户号 | 6511111102 | 乐刷分配的唯一商户编号 | +| 4 | 结算日期 | 2018-07-01 | 1. T0:该笔打款对应的结算日期;2. T1:该笔打款对应的交易日期(被风控时,对应打款单的生成日期) | +| 5 | 应付金额(分) | 47077 | 扣除手续费之后之后应结算给商户的金额; | +| 6 | 银行账号 | (空值) | 商户结算账号 | +| 7 | 银行开户名 | (空值) | 商户结算账户名(空值) | +| 8 | 开户银行名称 | 招商银行 | 商户结算账号开户银行 | +| 9 | 补贴金额(分) | 10 | 营销补贴金额 | +| 10 | 打款单生成标记 | 0 | ​ | +| 11 | 止付金额(分) | 0 | 退款金额 | +| 12 | 刷卡应付金额(分) | 0 | ​ | +| 13 | 扫码应付金额(分) | 705668 | 扫码支付金额 | +| 14 | 分账应付金额(分) | 0 | ​ | +| 15 | 扫码手续费(分) | 0 | ​ | +| 16 | 刷卡手续费(分) | 2132 | ​ | +| 17 | 分账手续费(分) | 0 | ​ | +| 18 | 止付金额(分) | 0 | ​ | +| 19 | 提现费率(万分之一分) | 0 | ​ | +| 20 | 提现手续费(分) | 0 | ​ | +| 21 | 打款状态 | 付款成功 | 打款状态分别有:付款成功;初始化;打款中;付款失败;退票成功;其他 | +| 22 | 失败原因 | 无效卡号或无此账号 | 付款失败的原因,付款成功时为空 | +| 23 | 资金类型 | 7 | 详见[billFlag说明](https://www.yuque.com/leshua-jhzf/qrcode_pay/ooqu7z?inner=xwLfe) | +| 24 | 实付金额(分) | 10 | 实际打款到账金额 | +| 25 | D0交易单号 | ​ | ​ | +| 26 | 手续费补贴总金额(分) | ​ | ​ | +| 27 | 营销补贴总金额(分) | ​ | ​ | + +### ​ + +### **1.2.5 商户打款明细对账单(rtz)** + +| **序号**​ | **字段**​ | **示例值**​ | **说明** | +| --- | --- | --- | --- | +| 1 | 结算类型 | T0 | 包括:T0、T1 | +| 2 | 打款单号 | 20180702000051843502 | 乐刷记录该笔打款的唯一流水号 | +| 3 | 商户号 | 6511111102 | 乐刷分配的唯一商户编号 | +| 4 | 结算日期 | 2018-07-01 | 1. T0:该笔打款对应的结算日期;2. T1:该笔打款对应的交易日期(被风控时,对应打款单的生成日期) | +| 5 | 应付金额(分) | 47077 | 扣除手续费之后之后应结算给商户的金额; | +| 6 | 银行账号 | (空值) | 商户结算账号 | +| 7 | 银行开户名 | (空值) | 商户结算账户名(空值) | +| 8 | 开户银行名称 | 招商银行 | 商户结算账号开户银行 | +| 9 | 补贴金额(分) | 10 | 营销补贴金额 | +| 10 | 打款单生成标记 | 0 | ​ | +| 11 | 止付金额(分) | 0 | 退款金额 | +| 12 | 刷卡应付金额(分) | 0 | ​ | +| 13 | 扫码应付金额(分) | 705668 | 扫码支付金额 | +| 14 | 分账应付金额(分) | 0 | ​ | +| 15 | 扫码手续费(分) | 0 | ​ | +| 16 | 刷卡手续费(分) | 2132 | ​ | +| 17 | 分账手续费(分) | 0 | ​ | +| 18 | 止付金额(分) | 0 | ​ | +| 19 | 提现费率(万分之一分) | 0 | ​ | +| 20 | 提现手续费(分) | 0 | ​ | +| 21 | 打款状态 | 付款成功 | 打款状态分别有:付款成功;初始化;打款中;付款失败;退票成功;其他 | +| 22 | 失败原因 | 无效卡号或无此账号 | 付款失败的原因,付款成功时为空 | +| 23 | 资金类型 | 7 | 详见[billFlag说明](https://www.yuque.com/leshua-jhzf/qrcode_pay/ooqu7z?inner=xwLfe) | +| 24 | 实付金额(分) | 10 | 实际打款到账金额 | +| 25 | D0交易单号 | ​ | ​ | +| 26 | 手续费补贴总金额(分) | ​ | ​ | +| 27 | 营销补贴总金额(分) | ​ | ​ | + +### ​ + +**1.2.6 订单分账明细对账单** + +| **序号**​ | **字段**​ | **示例值**​ | **说明**​ | +| --- | --- | --- | --- | +| 1 | 乐刷商户编号 | 5706109796 | 乐刷分配的唯一商户编号 | +| 2 | 第三方订单号 | 000000100007500288​ | 确认分账传输的分账订单号 | +| 3 | 支付订单号 | 0000116679620106 | 发起交易的订单号 | +| 4 | 分账订单总金额 | 120101 | 发起分账的订单总金额 | +| 5 | 分账详情 | 5706109796#1\|6218114838#10000\|6218114838#10000\|6218114838#10000\|1511216542#100\|5416016682#48000\|5416016682#30000\|5416016682#12000 | 发起分账的详情 | +| 6 | 交易手续费承担方编号 | 5416016682 | 承担交易手续费的商户号 | +| 7 | 交易手续费 | 42 | 该笔交易产生的手续费 | +| 8 | 发起时间 | 2020-04-15 03:04:13 | 发起分账的时间 | +| 9 | 分账状态 | 已退货 | 分账的状态 | +| 10 | 结算日期 | 20200416 | 分账结算日期 | +| 11 | 非交易主体分账金额 | 120100 | 非交易主体分账金额 | +| 12 | 商户退款订单号 | 20041503040000049180 | 发起分账退款的第三方分账订单号 | +| 13 | 乐刷退款流水号 | 0000043779620015​ | 乐刷退款订单号 | +| 14 | 乐刷分账单号 | 0 | 0:进账 1:出账 | +| 15 | 商户分账单号 | ​ | ​ | + +### **1.2.7 余额分账明细对账单** + +| 序号 | 字段 | 示例值 | 说明 | +| --- | --- | --- | --- | +| 1 | 乐刷商户编号 | 5706109796 | 乐刷分配的唯一商户编号,分账商户号 | +| 2 | 第三方分账订单号 | 000000100007500288 | 确认分账传输的第三方分账订单号 | +| 3 | 乐刷分账订单号 | 0000116679620106 | 确认分账乐刷侧生成的分账订单号 | +| 4 | 分账订单总金额 | 120101 | 发起分账的总金额 | +| 5 | 分账详情 | 5706109796#2#1\|6218114838#商户#10000 | 发起分账的详情,格式: 接收方ID#接收方类型#接收方接收金额 接收方类型枚举值有:2商户;3代理商;4服务商 | +| 6 | 发起时间 | 2020-04-15 03:04:13 | 发起分账的时间 | +| 7 | 完成时间 | 2020-04-15 03:04:18 | 受理成功的时间 | +| 8 | 分账状态 | 撤销成功、分账成功 | 分账的状态 | +| 9 | 备注 | 备注 | 备注内容 | + +### **1.2.8 分时明细对账单** + +| **序号**​ | **字段**​ | **示例值**​ | **说明**​ | +| --- | --- | --- | --- | +| 1 | 编号 | 28405 | 序列号 | +| 2 | 交易时间 | 2020-05-24 13:48:13 | 乐刷记录的时间,T0 订单为结算时间,T1 订单为交易发起时间 | +| 3 | 支付订单号 | 9000144040820145 | 发起交易的订单号 | +| 4 | 乐刷商户编号 | 0000000018 | 乐刷分配的唯一商户编号 | +| 5 | 费率(万分之一) | 2.5 | 商户自身费率(对账单会以整数体现) | +| 6 | 交易金额(分) | 2800 | 商户交易金额 | +| 7 | 交易手续费(分) | 700 | 该笔交易产生的手续费 | +| 8 | 结算金额(分) | 279300 | 扣除手续费应结算金额 | +| 9 | 资金流向 | 进账 | 包括:进账,出账,冻结,解冻,退款 | +| 10 | 交易类型 | 消费 | 1、pos 刷卡交易:消费,消费充正,消费撤销,退货中,退货成功,退货失败;、扫码业务:退货中,退货成功,退货失败 未获取:退款成功 【预授权完成】 【预授权完成撤销】 | +| 11 | 支付方式 | 微信支付 | 包含:刷卡支付,支付宝支付,微信支付 | +| 12 | 卡类型 | 信用卡 | 包含:借记卡,信用卡 | +| 13 | 商户优惠类型 | 标准类​ | 无 | +| 14 | 参考号 | * | 此参数适用于刷卡支付 | +| 15 | 凭证号 | HLX39059248892080058729 | 此参数适用于刷卡支付,交易产生的凭证号 | +| 16 | 终端号 | None | ​ | +| 17 | 第三方订单号 | ​ | 即代理商代商户发起交易时的订单号 | +| 18 | 第三方退款号 | ​ | 即代理商代商户发起退款时的订单号 | +| 19 | 支付时间 | 2020-05-24 13:48:13 | 即交易完成时间,乐刷据此进行结算 | +| 20 | 上游订单号(网、银联) | ​ | 网联、银联端订单号 | +| 21 | 上游订单号(微信、 支付宝) | ​ | 微信、支付宝端订单号 | +| 22 | 付款银行 | ​ | 此参数适用于扫码业务,如花呗、信用卡 | +| 23 | 消费者标识 | ​ | 微信、支付宝体系下的用户标识,即微信 OpenId、支付宝 userID | +| 24 | 扫码支付交易类型 | ​ | 此参数适用于扫码业务,包括:NATIVE:扫码支付;MICROPAY:条码支付;JSAPI:公众号/服务窗支付;APP:app 支付;SmPgPay:小程序支付; | +| 25 | 乐刷退款流水号 | ​ | 退款时记录的乐刷端创建的流水号 | +| 26 | 优惠活动 | 蓝海 | 此参数为参加蓝海行动/绿洲计划交易标识,包括:蓝海:该笔交易属于蓝海行动;绿洲:该笔交易属于绿洲计划 | +| 27 | 订单金额 | 2800 | 交易发起的金额 | +| 28 | 优惠金额 | 0 | 交易中优惠消费者的金额 | +| 29 | 代金券类型 | * | 此参数为参加微信代金券类型标识,包括:DISCOUNT 免充值;N 预充值 | +| 30 | 提现手续费 | 0 | ​ | +| 31 | 费率 | 5500 | 百万分之一 | + +## **1.3分账版本** + +| **序号**​ | **对账单类别**​ | **通用版本** | +| --- | --- | --- | +| 1 | 普通交易对账单 | 这个时间点有要求,一般早上8:30前要跑完,基础结算的交易明细,剔除掉了分时商户所产生的交易明细 | +| 2 | 分润对账单 | 包含了正常分润的和退票的,刷卡和扫码的 | +| 3 | 银行打款对账单 | 商户打款单的明细 | +| ​ | ​ | **定制版本** | +| 1 | 分时结算 | 结算对账文件是独有一份,直接查交易数据 | +| 2 | 银联云闪付 | 云闪付开放平台交易对账单 | +| 3 | 分账对账单 | 分账交易的对账单 | + +## **1.4对账推送时间** + +| **序号**​ | **时间**​ | **内容** | +| --- | --- | --- | +| 1 | 9:00 | 普通交易对账单 | +| 2 | 7:02 | 云闪付对账单 | +| 3 | 9:30 | 分时对账单 | +| 4 | 7:50 | 分账对账单 | + +## **1.5 对账单要点说明** + +| **序号**​ | **要点说明**​ | +| --- | --- | +| 1 | 普通交易对账单是提供乐刷结算的交易明细(未通过乐刷结算的无法提供) | +| 2 | 普通交易对账单不提供分时商户的交易信息。 | +| 3 | 未配置提供对账单的代理商不提供普通交易对账单。 | +| 4 | 普通交易对账是T+1提供,即当日的交易次日9.00左右提供 | +| 5 | 普通交易、分润、打款对账单只会按照一级代理商提供 | +| 6 | 反馈问题时请反馈具体哪个对账单,同时提供“取对账单的文件名称”,据此可以判断是哪种类型的对账单。 | diff --git a/docs/联合收单接口文档/14-http获取对账单下载链接API文档.md b/docs/联合收单接口文档/14-http获取对账单下载链接API文档.md new file mode 100644 index 0000000..75937c6 --- /dev/null +++ b/docs/联合收单接口文档/14-http获取对账单下载链接API文档.md @@ -0,0 +1,101 @@ +# http获取对账单下载链接API文档 + +> 来源: + +# 签名方法 + +签名算法(sign)如下: + +**sign= Base64(md5(lepos+渠道商固定key值+data字符串值).toLowerCase())** + +例: 请求报文中,data={"merchantId":"0123456789"} + +待签名串为: leposXXXXXXXXXXXXXXXXXX{"merchantId":"0123456789"} + +MD5后转小写: 0bc0be2e34c2d9779482327da35358cd + +base64: MGJjMGJlMmUzNGMyZDk3Nzk0ODIzMjdkYTM1MzU4Y2Q= + +# 1 HTTPS 获取对账单下载链接 + +## 1.1 接口说明 + +获取对账单下载地址,**需联系乐刷对接运营申请加白**。 + +## 1.2请求方式 + +接口传输的所有参数使用UTF8 编码格式,包括签名以 https的POST方式进行调用​ + +## 1.3请求地址 + +生产环境:[http://saas-mch.leshuazf.com/apiv2/ftp/getDownLoadUrl](http://t-saas-combine.lepass.cn/saas-open-api/codeorder/queryBrand) + +## 1.4频率限制 + +20秒/200次 链接有效时间5分钟内下载次数不限,支持下载最近2个月对账单 + +## 1.5业务入参 + +​公共参数请对照进件接口,以下只针对data字段做说明 + +| **变量名**​ | **类型**​ | **是否必填**​ | **说明**​ | +| --- | --- | --- | --- | +| fileName​ | string​ | 是 | 文件名称 不要包含特殊字符、中文等,否则一律视为非法​ | + +**对账单文件格式说明**​ + +| **序号**​ | **文件内** | **文件名命名格式**​ | **备注**​ | +| --- | --- | --- | --- | +| 1 | 交易明细 | 1619191_trade_new_2018-07-20.txt | 代理商编号_trade_new_日期.txt​ | +| 2 | 代理商分润明细 | 78860_profit_2020-07-20.txt | 代理商编号_profit_日期.txt | +| 3 | 商户打款明细 | 1619191_rt_2019-10-27.txt | 代理商编号_rt_日期.txt | +| 4 | 商户打款明细(新) | 1619191_rtp_2019-10-27.txt | 代理商编号_rtp_日期.txt | +| 5 | 分账明细 | 1157213_ledgerDetail_20210114.txt | 代理商编号_ledgerDetail_日期.txt | +| 6 | 分时打款对账单 | (1619191_rtp_2019-10-27.txt) | ​ | +| 7 | 分时明细对账单 | 1619191_trade_timeAdjust_20191107.txt | 代理商编号_trade_timeAdjust_日期.txt | + +## 1.6业务出参 + +data 数据说明 + +| **变量名**​ | **类型**​ | **说明**​ | +| --- | --- | --- | +| downLoadUrl | string | 文件下载地址。 注: 1文件下载地址后,请下载直接下载下来,如果使用浏览器打开,可能会出现乱码。 2文件下载地址有效期为5分钟(300秒)请及时下载,如果超过5分钟,请调接口重新获取文件下载地址 3下载之前,**请确保文件存在**,如果对账单没有生成或者文件根本不存在,也会导致下载失败(接口报错)或者打开失败(**url访问404**) | +| ttl​ | integer(int64)​ | 文件下载地址有效时间(单位:秒),当前默认为300秒​ | + +## 1.7示例报文 + +​**1)请求报文** + +```plain +url :http://saas-mch.leshuazf.com/apiv2/ftp/getDownLoadUrl +form-data: + "data" = {"fileName":"5963222_trade_new_2021-09-12.txt"}, + "sign" = "da2686a1c2b98cf7183517d903bac81c", + "reqSerialNo" = "111111111", + "version" = "1.0.0", + "agentId" = "123546" +``` + +**2)应答报文** + +```plain +{ + "data": { +"downLoadUrl": "https://saas-jhzf-ftp.leshuazf.com/agent5963222 +/5963222_trade_new_2021-09-12.txt?k=k-8upT4obZQHB-0FH9yK2Q&e=1637316706", + "ttl": 300 + }, + "reqSerialNo": "11111111", + "respCode": "000000", + "respMsg": "成功", + "version": "1.0.0" +} +``` + +## 1.8常见问题 + +| **返回编码**​ | **错误提示内容**​ | **可能原因**​ | +| --- | --- | --- | +| 000000​ | 正常返回​ | ​ | +| 其他​ | 失败​ | 原因在respMsg中说明​ | diff --git a/docs/联合收单接口文档/15-商户维度接入.md b/docs/联合收单接口文档/15-商户维度接入.md new file mode 100644 index 0000000..1260ced --- /dev/null +++ b/docs/联合收单接口文档/15-商户维度接入.md @@ -0,0 +1,144 @@ +# 商户维度接入 + +> 来源: + +# 接入指南(须知) + +**!注意:【商户交易】文档内接口为独立内容,无需参考此接入指南,按照【商户交易】文档描述对接即可** + +**​** + +## **1.1 参数格式与调用方式** + +(1)接口传输的所有参数使用 UTF-8 编码格式,包括签名。接口以 https的POST方式进行调用。 (2)Content-Type为application/json (3)域名: 测试环境:[https://t-uts.lepass.cn](http://t-uts.lepass.cn/) 生产环境:[https://uts.leshuazf.com](https://uts.leshuazf.com/) + +## **1.2 报文结构** + +**请求报文** 请求报文由乐刷商户编号、请求序列号、毫秒级时间戳、签名串、验签方式、报文主体6个参数组成。说明如下: **注意: ** + +**M:must,必须;** **C:condition,条件必填;** **O:option,可选;** + +| **参数名称**​ | **类型** | **长度限制** | **是否必输** | **说明**​ | **是否参与验签**​ | +| --- | --- | --- | --- | --- | --- | +| merchantId | String | 10 | M | 乐刷商户编号 | 是 | +| reqSerialNo | String | 100 | M | 请求序列号,推荐格式:时间+随机字符 | 是 | +| timestamp | String | 无 | M | 毫秒级时间戳,例如:1689822708874 | 是 | +| sign | String | 无 | M | 签名串 | 否 | +| algorithm | boolean | 无 | O | 默认true-国密验签,false-MD5验签 | 否 | +| data | Object | 无 | M | 业务数据 | 是 | + +> 💡 注意,分页请求列表时,每页最多请求50条数据 +> +> 💡 注意,接口有限制调用频率,查询类接口100次/5s,更新类接口20次/5s +> + +**返回报文** 返回报文由error_code、error_msg、count、业务数据报文主体4个参数组成。说明如下: + +​ + +## **1.3 数据签名** + +签名算法(sign)如下: + +将参数以lhsd+&key=value+商户密钥的格式进行拼接得到待加密字符串signStr,其中key按照ascii码顺序排列,merchantKey为商户密钥,例如: + +```plain +商户编号为3131014839,商户密钥key为:C0179E8F7FAA41B89FFAC6D6168F8C9C +则signStr = lhsd&data={}&merchantId=3131014839&reqSerialNo=202307010921000001×tamp=1689921328880C0179E8F7FAA41B89FFAC6D6168F8C9C +``` + +> 💡 参数为null或者空不参与验签,例如data为null则不拼接"data=" +> +> 💡 其中data若不为null,则需转为json字符串进行拼接,并且json内容需要按照ascii码排序,例如{"a":{"d":"D","e":"E"},"b":"B","c":"C"},java语言可参考fastjson工具方法:JSON.toJSONString(data, SerializerFeature.MapSortField) +> +> 💡 加签时data中的字段可以不传,不能多传,并且类型需与文档说明完全一致,例如手机号虽为全数字,但为String类型 +> + +**​** + +**(1)国密验签:** + +**sign = SignUtil**.**encryptBySM3WithSalt(****商户密钥****key值, signStr)** + +**(2)MD5验签:** + +**sign = SignUtil.MD5Encrypt(signStr)** + +## 签名工具类 + +**验签工具类**SignUtil + +```java +package test; + +import cn.hutool.core.codec.Base64; +import cn.hutool.crypto.digest.MD5; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import org.apache.commons.lang.StringUtils; +import org.bouncycastle.crypto.digests.SM3Digest; +import org.bouncycastle.crypto.macs.HMac; +import org.bouncycastle.crypto.params.KeyParameter; + +public class SignUtil { + + public static void main(String[] args) { + // 商户密钥key值 + String key = "C0179E8F7FAA41B89FFAC6D6168F8C9C"; + // 请求参数 + JSONObject param = new JSONObject(); + param.put("merchantId", "3131014839"); + param.put("reqSerialNo", "202307010921000001"); + param.put("timestamp", System.currentTimeMillis()); + param.put("data", new JSONObject()); + String signStr = buildSignStr(param, key); + System.out.println(signStr); + + String sm3Sign = SM3Encrypt(key, signStr); + System.out.println("sm3Sign:" + sm3Sign); + String md5Sign = MD5Encrypt(signStr); + System.out.println("md5Sign:" + md5Sign); + + param.put("sign", sm3Sign); + System.out.println("param:" + param); + } + + // 拼接待加密字符串,简易版,仅供参考 + private static String buildSignStr(JSONObject dto, String key) { + String dataStr = ""; + if (dto.getJSONObject("data") != null) { + dataStr = JSON.toJSONString(dto.getJSONObject("data"), SerializerFeature.MapSortField); + } + return "lhsd" + (StringUtils.isEmpty(dataStr) ? "" : ("&data=" + dataStr)) + + "&merchantId=" + dto.getString("merchantId") + + "&reqSerialNo=" + dto.getString("reqSerialNo") + + "×tamp=" + dto.getString("timestamp") + key; + } + + // MD5验签,md加密后转大写 + public static String MD5Encrypt(String signStr) { + System.out.println("MD5Encrypt,待加密数据:" + signStr); + return MD5.create().digestHex(signStr).toUpperCase(); + } + + // 国密验签,推荐使用 + public static String SM3Encrypt(String key, String signStr) { + System.out.println("SM3Encrypt,待加密数据:" + signStr); + return Base64.encode(hmac(key.getBytes(), signStr.getBytes())); + } + + public static byte[] hmac(byte[] key, byte[] srcData) { + KeyParameter keyParameter = new KeyParameter(key); + SM3Digest digest = new SM3Digest(); + HMac mac = new HMac(digest); + mac.init(keyParameter); + mac.update(srcData, 0, srcData.length); + byte[] result = new byte[mac.getMacSize()]; + mac.doFinal(result, 0); + return result; + } + +} +``` diff --git a/docs/联合收单接口文档/16-基础接口.md b/docs/联合收单接口文档/16-基础接口.md new file mode 100644 index 0000000..c9e5ed9 --- /dev/null +++ b/docs/联合收单接口文档/16-基础接口.md @@ -0,0 +1,80 @@ +# 基础接口 + +> 来源: + +## 上传图片 + +通过此接口上传图片获取路径。 + +> - **URL**:`/open-api/merchantV2/common/uploadPic` +> - **Method**:`POST` +> + +#### 业务请求参数 + +| 参数 | 类型 | 是否必填 | 说明 | +| --- | --- | --- | --- | +| `ext` | String | M | 扩展名,限制jpg/png/jpeg | +| `picData` | String | M | base64编码的图片数据,2M以内 | + +> 💡 注意,目前只支持jpg、jpeg、png格式的图片 +> + +#### 请求示例 + +```json +{ + "sign": "gLjW4s3EBSIvDxYa1mFauv2XrkSuSnblOLbigmIxPVE=", + "merchantId": "3131014839", + "reqSerialNo": "202307010921000006", + "timestamp": "1689844373531", + "data": { + "ext": "jpg", + "picData": "/9j/4QkDRXhpZgAATU0AKgBBBBg……" + } +} +``` + +#### 返回值 + +| 参数 | 类型 | 说明 | +| --- | --- | --- | +| `path` | String | 图片路径 | + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 0, + "data": { + "path": "picture/M00/07/5E/rBQhymPXhGCATiPIHNGomYn0Pz3215.jpg" + } +} +``` + +#### 错误响应 + +> **条件**:请求数据非法,例如 图片格式错误。 +> +> 状态码:`1 参数非法` +> +> 响应示例: +> + +```json +{ + "error_code": "1", + "error_msg": "请上传jpg/png/jpeg文件", + "count": 0, + "data": null +} +``` diff --git a/docs/联合收单接口文档/17-商户交易.md b/docs/联合收单接口文档/17-商户交易.md new file mode 100644 index 0000000..d35005b --- /dev/null +++ b/docs/联合收单接口文档/17-商户交易.md @@ -0,0 +1,1504 @@ +# 商户交易 + +> 来源: + +## + +### API目录 + +| **分类** | **接口中文名** | **接口英文名** | **描述** | +| --- | --- | --- | --- | +| 下单接口 | [统一下单接口](#YGAT6) | /cgi-bin/lepos_pay_gateway.cgi | 主扫,C扫B。消费者主动扫码。 | +| 条码支付 | [条码支付](#AGDJI) | /cgi-bin/lepos_pay_gateway.cgi | 被扫,B扫C。消费者出示付款码被扫。 | +| 交易结果 | [支付结果通知](#93D6z) | / | 返回支付结果。**影响推送的因素较多,建议接交易结果查询接口。** | +| [交易结果查询](#yEuUU) | /cgi-bin/lepos_pay_gateway.cg | 查询交易结果 | | +| 退款 | [退款](#Mh3kb) | /cgi-bin/lepos_pay_gateway.cgi | 进行退款操作 | +| [退款查询](#2D2fx) | /cgi-bin/lepos_pay_gateway.cgi | 查询退款信息 | | +| [退款结果通知](#ZQ0tK) | | 查看退款结果 | | +| 订单关闭接口 | [订单关闭](#z9MWc) | /cgi-bin/lepos_pay_gateway.cgi | 关闭订单 | +| 授权码 | [授权码查询用户openid](#F3rn1) | /cgi-bin/lepos_pay_gateway.cgi | 查询openid | +| [授权码获取银联云闪付用户ID](#DprGi) | | 获取云闪付用户ID | | +| 异步通知 | [刷卡、扫码支付异步通知](#ZD2Om) | | | + +### **​**数字签名 + +(1)为了保证数据传输过程中的数据真实性和完整性,我们需要对数据进行数字签名,在接收签名数据之后进行签名校验。 + +(2)签名有两个步骤,先按一定规则拼接要签名的原始串,再选择具体的算法和密钥计算出签名结果。 + +(3)原始串中,字段名和字段值都采用原始值,不进行URL Encode。 + +(4)平台返回的应答或通知消息可能会由于升级增加参数,请验证应答签名时注意允许这种情况。 + +### 签名方法 + +(1)设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 + +(2)在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。 + +### 签名样例 + +(1)假设需要传递的参数如下: + +```plain +server:query_status +merchant_id:1234567890 +third_order_id:12345678901 +nonce_str:12345678901 +``` + +(2)对参数按照key=value的格式,并按照参数名ASCII字典序排序如下 + +```plain +stringA=merchant_id=1234567890&nonce_str=12345678901&server=query_status&third_order_id=12345678901 +``` + +(3)拼接商户秘钥key + +```plain +stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d" //注:key为商户密钥key +``` + +(4)计算签名 + +```plain +交易报文MD5计算:sign=MD5(stringSignTemp).toUpperCase() +通知报文MD5计算:sign=MD5(stringSignTemp).toLowerCase() +交易报文SM3计算:sign=SM3(stringSignTemp).toUpperCase() +通知报文SM3计算:sign=SM3(stringSignTemp).toLowerCase() +``` + +注:md5加密为32位。 **注**:SM3签名为64位 (1)设所有请求数据为集合M(请求数据中需上送**sign_type**为**SM3**,不上送默认为使用MD5),将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序), + +使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。 + +(2)在stringA最后拼接上key得到stringSignTemp字符串, + +并对stringSignTemp进行SM3运算,再将得到的字符串所有字符转换为大写,得到sign值signValue + +### 特别注意 + +(1)请求数据验签方法 + +```plain +除sign、leshua、resp_code字段外,其他参数按照签名方法验签,空值不传递,不参与签名组串。 +``` + +(2)应答数据验签方法 + +```plain +除sign、leshua、resp_code字段外,其他参数按照签名方法验签,空值参与签名组串。 +(注:微信刷脸接口是全字段加签) +``` + +(3)支付结果通知验签方法 + +```plain +除sign、leshua、error_code字段外,其他参数按照签名方法验签,空值参与签名组串。 +``` + +商户维度接入,支付结果通知验签需要向商务申请 商户获取代理商解析密钥 + +### 判断付款码规则 + +```java +支付宝:支付授权码,25~30开头的长度为16~24位的数字, 实际字符串长度以开发者获取的付款码长度为准 +微信:扫码支付授权码,设备读取用户微信中的条码或二维码信息(注:用户刷卡条形码规则:18位纯数字以10、11、12、13、14、15开头) +银联二维码:62开头19位数字 +数字人民币:0100开头的数字,其中01002 工行(数字人民币的不完整,后续会有改动) +01003 农行 +01004 中行 +01005 建行 +01007 网商 +01008 邮储 +01009 交通银行 +``` + +### 1、统一下单(主扫:C扫B) + +#### 1.1接口说明 + +代理商在C扫B场景调用此支付接口完成下单,支持支付宝拉码支付、公众号支付、服务窗支付、银联JS支付、微信小程序支付。 + +测试商户信息及请求密钥和回调密钥请联系我们获取。 + +生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司。 + +#### 1.2请求方式 + +POST + +#### 1.3请求地址 + +测试环境域名:https://t-paygate.lepass.cn + +生产环境域名:https://paygate.leshuazf.com + +接口地址:/cgi-bin/lepos_pay_gateway.cgi + +#### 1.4频率限制 + +4000次/s + +#### 1.5业务入参 + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| service | M | 无 | string | **接口名**get_tdcode(此为固定值) | +| t0 | O | 无 | int | **T0交易标志**默认为0,0:d1交易 1:d0交易 | +| sign_type | 0 | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| pay_way | M | 16 | string | **支付类型**详见下方[支付类型](#nlHUH) | +| merchant_id | M | 10 | string | **乐刷商户号**由乐刷分配 | +| user_name | O | 无 | string | 收银员名称 | +| third_order_id | M | 64 | string | **商户内部订单号**可以包含字母:确保同一个商户下唯一 | +| amount | M | 10 | string | **订单总金额**金额不能为零或负数 | +| jspay_flag | M | 1 | **string** | **支付类型**0-支付宝Native扫码支付、银联Native扫码支付;1-微信JSAPI、支付宝JSAPI支付、银联JSAPI支付;2-微信、支付宝简易支付<跳转乐刷收银台支付>;(jspay_flag=2时必传jump_url,否则会报错)3-微信小程序支付、支付宝小程序支付注:1)微信拉码支付已下线;2)如需接入银联JS支付,请联系乐刷运营沟通域名报备。3)数字货币支付当前仅支持jspay_flag=0 | +| royalty | O | 1 | string | 交易分账标识0:普通交易 1:分账(用于分账的交易需传该参数) 2:交易主体分账(延迟结算) 3:预授权注:如果未传该字段默认为0,按不分账处理 | +| appid | M | 32 | string | **appid**条件必填,微信支付时必填。填微信公众号支付的公众号id或微信小程序支付的小程序appid;传了会使用此appid 进行下单 | +| sub_openid | [C](#eFgvt) | 32 | string | **sub_openid**微信JSAPI、微信小程序、支付宝JSAPI、支付宝小程序、银联JSAPI支付必填 | +| extend_business_params | O | 无 | string | 该字段 为JSON格式的字符串,当前可透传支付宝的参数见下表具体格式详见文档下方:[业务拓展参数示例](#5u5k5)注:花呗分期商家订单传参贴息示例:"extend_business_params":"{\"business_params\":{ \"enable_thirdparty_subsidy\":\"N\"}}"如果第三⽅贴息活动为全场贴息,默认可贴息,传⼊ N 值则本笔交易禁⽤三⽅贴息; 如果第三⽅贴息活动为指定订单传参贴息,默认禁⽤贴息,传⼊Y 值则本笔交易启⽤三⽅贴息 | +| jump_url | O | 128 | string | **前台跳转地址**简易支付时必填,完成后,乐刷将跳转到该页面,需做UrlEncode 处理(受微信支付宝限制,已失效,可不传) | +| notify_url | O | 128 | string | **通知地址**接收乐刷通知(支付结果通知)的URL,需做UrlEncode 处理,需要绝对路径,确保乐刷能正确访问,若不需要回调请忽略 | +| client_ip | O | 16 | string | **商户发起交易的IP地址** | +| body | O | 256 | string | **商品描述**不能包含回车换行等特殊字符 | +| shop_no | O | 16 | string | **商户门店编号**只能是汉字、英文字母、数字。注:该参数不上传给微信、支付宝 | +| pos_no | O | 16 | string | **商户终端编号**只能是汉字、英文字母、数字 注意:银联类型交易时,只能 8位:数字字母 不支持 特殊字符 | +| attach | O | 96 | string | **附加数据**下单成功原样返回;注意:只能是汉字、英文字母、数字 | +| limit_pay | O | 1 | string | **指定支付方式**1:禁止使用信用卡;0或者不填:不限制 | +| goods_tag | O | 32 | string | **订单优惠标记**订单优惠标记(订单级别-品类级别),透传给微信,对应微信的`goods_tag`字段。微信会自动进行优惠匹配计算和核销。用于给整个订单打上一个"标签",主要用于**代金券立减优惠场景**,示例:`"coffee"`。 | +| goods_detail | O | 8000 | string | **单品详情****微信**单品级详细信息,透传给微信,对应微信的`detail`字段,**注意**不是对应`detail.goods_detail`字段。微信会自动进行优惠匹配计算和核销。按微信单品优惠券格式传递透传给微信,请做UrlEncode示例:`{"goods_detail":[{"merchant_goods_id":"xiaomi_14_pro","goods_name":"小米14 Pro","quantity":1,"unit_price":499900}]}`​ **银联**银联扫码交易时,透传给银联的“收款方附加数据”acqAddnData参数,当前银联的单品营销及扫码点餐均使用到该参数,具体参数格式及说明见:[银联收款方附加数据](https://www.yuque.com/hayley-boppa/ws2xbg/tu6kh5hh2kegkz0c#lUVoy)。 | +| order_expiration | O | 无 | string | **订单有效时间**单位:秒(支付宝的超时时间最小粒度为分钟,建议上送的为60的整数倍)最大时效600s | +| hb_fq_num | O | 无 | string | **花呗分期数**支付宝花呗分期数,支持3、6、12期 | +| front_url | C | 无 | string | **前端跳转地址**银联JSAPI支付时选填,支付成功时跳转 | +| front_fail_url | C | 无 | string | **支付失败前端跳转地址**银联JSAPI支付时选填,支付失败时跳转 | +| nonce_str | M | 32 | string | **随机字符串** | +| sign | M | 32 | string | **签名**MD5签名结果 | +| device_info | O | 32 | string | **设备编号**针对微信、支付宝有效,透传至银联。微信:数字、字母、下划线格式支付宝:目前支持非0开头的数字 | +| store_id | O | 32 | string | **门店编号**针对微信、支付宝有效,透传至银联。微信:数字、字母、下划线格式 | +| ass_merchant_id | O | 32 | string | **通道商户号**非必填。可使用指定的微信、支付宝子商户号进行交易,一个乐刷商户号有多个通道商户号情况下可用。注:对应乐刷商户号大于200条时不能传该参数 | +| pnrins_id_cd | O | 32 | string | **银联服务商标识**银联扫码交易时,透传给银联,对应银联的 pnrInsIdCd参数。 | +| gps_info | O | 512 | string | **gps信息**校验GPS信息格式, 如:-128.12,23.1 -- 1. xxx,xxx -- 2. 经度xxx为[-180,180]之间的浮点数,维度xxx为[-90,90]之间的浮点数,最多保留小数点八位float(11,8) | +| bs_info | O | 512 | string | **基站信息**校验基站信息格式, 格式说明: -- 1. 格式为:xxx,xxx,xxx,xxx 如:460,1,12,23454 -- 2. xxx均为整数,长度不超过11位​ 基站信息,从左至右依次对应以下几个字段: mcc: 移动国家号码,由3位数字组成,唯一地识别移动用户所属的国家。我国为460 mnc:移动网号,由两位数字组成,用于识别移动用户所归属的移动网 lac:位置区编码,为寻呼而设置的一个区域,覆盖一片地理区域,按寻呼量划分 ci :负责收发的天线所朝向的扇区编号 | +| extend_business_params | O | - | string | 见下extend_business_params参数表 | +| scene_info | O | - | string | 该字段用于上报场景信息,仅针对微信交易有效,目前支持上报实际门店信息。该字段 为JSON格式的字符串,对象格式为{"store_info":{"id": "门店 ID","name ": "名称","area_code": "编码","address": "地址"}} ,字段详细说明参考下文。 | +| need_receipt | O | - | boolean | 电子发票功能。仅针对微信交易有效,需要和微信公众平台的发票功能联合使用。枚举:(只能为true或false,只支持全小写字母或全大写字母) truefalse | +| terminal_info | M | - | **String** | 商户侧受理终端信息**terminal_info为String类型,内容为json**:terminal_info="{\"longitude\":\"-121.48352\",\"latitude\":\"+31.221345\",\"network_license\":\"P3100\",\"device_type\":\"01\",\"device_id\":\"54MPDz39\",\"serial_num\":\"5\",\"app_version\":\"v1.1.1\",\"device_ip\":\"252.1.1.25\"}"​ **terminal_info不能为空**,如无终端信息则按此规则传参:**device_type和serial_num必传:****device_type固定传11****serial_num=lhsd+商户编号**​ json内各参数说明longitude:经度,+代表东经,-代表西经。latitude:纬度,+代表北纬,-代表南纬。network_license:银行卡受理终端入网编号。该编号由“中国银联标识产品企业资质认证办公室”为通过入网认证的终端进行 分配。银联直连终端必填。 格式:5 位字符,例如 P3100device_type:设备类型,01:自动柜员机(含 ATM 和 CDM)和 多媒体自助终端 02:传统 POS 03:mPOS 04:智能 POS 05:II 型固定电话 06:云闪付终端; 07:保留使用; 08:手机 POS; 09:刷脸付终端; 10:条码支付受理终端; 11:条码支付辅助受理终端; 12:行业终端(公交、地铁用于指定行 业的终端); 13:MIS 终端;​ serial_num:设备序列号,设备类型02、 03、04、05、06、08、09 或 10 时必填encrypt_rand_num:仅在被扫支付类交易报文中出现:若付 款码为 19 位数字,则取后 6 位; 若付款码码为 EMV 二维码,则取其 tag 57 的卡号/token 号的后 6 位secret_text:仅在条码支付交易报文中出现:64bit 的密文数据,对终端硬件序列号和加密 随机因子加密后的结果。 本子域取值为:64bit 密文数据进行 base64 编码后的结果。该字段需要服务商和厂商联调时由厂商sdk之类加密后给出。app_version:终端应用程序的版本号。应用程序变更 应保证版本号不重复。当长度不足时, 右补空格。固定8位device_ip:终端交易IP。如经、维度信息未上送,该字段必送。 | + +**extend_business_params 参数表** + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| business_params | O | - | String | ​ | +| goods_detail | O | - | String | ​ | +| extend_params | O | - | String | ​ | +| seller_id | O | 28 | String | 卖家支付宝用户 ID。如果该值为空,则默认为商户签约账号对应的支付宝用户 ID | +| discountable_amont | O | 11 | Price | 参与优惠计算的金额,单位为元,精确到 小 数 点 后 两 位 , 取值范围[0.01,100000000]。 如果该值未传入,但传入了【订单总金额】和【不可打折金额】,则该值默认为【订单总金额】-【不可打折金额】 | +| undiscountable_amount | O | 11 | Price | 不参与优惠计算的金额,单位为元,精确 到 小 数 点 后 两 位 , 取 值 范 围[0.01,100000000]。如果该值未传入,但传入了【订单总金额】和【可打折金额】,则该值默认为【订单总金额】-【可打折金额】 | +| buyer_logon_id | O | 100 | String | 买家支付宝账号 | +| operator_id | O | 28 | String | 商户操作员编号 | +| enable_pay_channels | O | 128 | String | 可用渠道,用户只能在指定渠道范围内支付。当有多个渠道时用“,”分隔,与 disable_pay_channels 互 斥。 | +| settle_info | O | - | SettleInfo | 描述结算信息,json 格式,详见结算参数说明 | +| alipay_store_id | O | 32 | String | 支付宝的店铺编号 | +| ext_user_info | O | - | ExtUserInfo | 外部指定买家 | +| qr_code_timeout_express | O | 6 | String | 该笔订单允许的最晚付款时间,逾期将关闭交易,从生成二维码开始计时。取值范围:1m~15d。 m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在 0 点关闭)。 该参数数值不接受小数点,如 1.5h,可转换为90m。(对应jspay_flag为0时) | +| merchant_order_no | O | 32 | String | 商户原始订单号,最大长度限制32 位(对应jspay_flag为1/2/3时) | +| disable_pay_channels | O | 64 | String | 禁用支付渠道,多个渠道以逗号分割,如 同时禁用信用支付类型和积分,则 disable_pay_channels="cre dit_group,point" 具体的渠道以支付宝或者银联提供的为准 | + +**场景信息scene_info字段说明(当前仅针对微信交易会透传给微信):** + +| **名称** | **参数名** | **必填** | **类型** | **示例值** | **描述** | +| --- | --- | --- | --- | --- | --- | +| 门店Id | id | 否 | String(32) | SZTX001 | 门店唯一标识 | +| 门店名称 | name | 否 | String(64) | 腾讯大厦腾大餐厅 | 门店名称 | +| 门店行政区划码 | area_code | 否 | String(6) | 440305 | 门店所在地行政区划码 | +| 门店详细地址 | address | 否 | String(128) | 科技园中一路腾讯大厦 | 门店详细地址 | + +#### 1.6业务出参 + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| resp_code | M | 无 | string | **返回状态码**0 - 成功,非0 - 失败。注:此字段是通信标识,是否获取到二维码要看result_code | +| resp_msg | C | 无 | string | **返回错误信息**错误描述:resp_code非0时返回 | +| result_code | M | 1 | string | **业务结果**0 - 成功,非0 - 失败 | +| error_code | O | 无 | string | **错误码**[参考错误码信息表](#rOC0m) | +| error_msg | O | 无 | string | **错误信息描述** | +| attach | O | 96 | string | **附加数据**原样返回;注意:只能是汉字、英文字母、数字 | +| merchant_id | M | 10 | string | **乐刷商户号**由乐刷分配 | +| sub_merchant_id | M | 无 | string | **通道商户号**微信、支付宝、QRC商户号 | +| third_order_id | M | 64 | string | **商户内部订单号** | +| nonce_str | M | 32 | string | **随机字符串** | +| sign | M | 32 | string | **MD5签名结果** | +| td_code | C | 无 | string | **二维码链接**非公众号支付返回,可直接通过该链接生成二维码扫码支付(jspay_flag传0-2该字段才会返回) | +| jspay_info | C | 无 | string | **支付信息**原生公众号、服务窗、小程序,返回json格式字符串、银联JS支付返回URL,用云闪付打开此链接即可调起支付 生效时间:默认10分钟,具体时间看订单有效时间 | +| jspay_url | C | 无 | string | **支付跳转地址**简易支付时返回。重定向到该url可以完成后续支付流程。返回二维码链接有效期为10分钟; | +| leshua_order_id | M | 32 | string | **乐刷订单号** | +| pay_way | M | 无 | string | **支付类型**[详见下方支付类型](#nlHUH) | +| cost_time | C | 无 | string | **请求耗时**请求接口耗费的时间 | +| channel_flag | O | 32 | string | **通道标记**GXST:高校食堂PUBWEL:公益PUBPAY:公缴ZFBLH:支付宝新蓝海SLZXY:私立中小幼INS:保险ONLINE:线上YLLZ:绿洲 | +| alipay_infos | O | | | trade_no:银联交易号 | + +**注意事项** + +(1)所有涉及到金额的单位都位分,币种为RMB,最小为1分,不允许出现小数 + +(2)文档中参数,标识为必填必须上送(如果缺少会报错),非必填的可填可不填(简易支付"支付跳转地址"字段为必传), + +(3)返回参数中必填为是的参数是一定会返回的,必填为否的参数则不一定返回,因升级或配置等情况实际返回参数可能不会跟文档完全一致,必须以实际接收到的参数为准 + +##### 获取微信用户openid + +```http +https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_CN +``` + +##### 获取支付宝用户openid + +```http +https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8ujLD6&treeId=115&articleId=104114&docType=1 +``` + +**公众号支付请求示例** + +1、请求格式如下: + +```json +https://paygate.leshuazf.com/cgi-bin/lepos_pay_gateway.cgi?amount=1& +appid=wx00e59fa8be9ba128&jspay_flag=1&merchant_id=3219113278& +nonce_str=lnxouwc0r7l93453x5&order_expiration=60&pay_way=WXZF&service=get_tdcode& +sub_openid=oe5BX0qaVuC5vqYdj65GlUcyAVUM&third_order_id=202004271809453917&sign=2A500B7F906284717212304A9BCFB33D +``` + +**返回示例** + +1、响应格式如下: + +```json + + + + + + + + + + + + +``` + +**支付宝拉码支付请求示例** + +1、请求格式如下: + +```json +https://t-paygate.lepass.cn/cgi-bin/lepos_pay_gateway.cgi?amount=1&jspay_flag=0 +&merchant_id=0000000018&nonce_str=w1hxpdiu9nkjfw5qrp&order_expiration=60& +pay_way=ZFBZF&service=get_tdcode&third_order_id=202004291733230374& +sign=340DB607E3BEE2BAE60807B3601008E2 +``` + +**返回示例** + +1、响应格式如下: + +```json + + + + + + + + + + + + +``` + +### 2、条码支付(被扫:B扫C) + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | [M](#eFgvt) | 无 | string | upload_authcode(此为固定值) | +| t0交易标志 | t0 | O | 无 | int | 默认为0,0:d1交易 1:d0交易 | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 付款码 | auth_code | M | 无 | string | 支持以下付款码:微信数字付款码支付宝数字付款码云闪付APP 62开头付款码银行APP 62开头付款码数字人民币APP付款码(0100开头)支付宝刷脸付款码(fp开头) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号,可以包含字母:确保同一个商户下唯一 | +| 订单金额 | amount | M | 10 | string | 总金额 | +| 分账标识 | royalty | O | 1 | string | 交易分账标识0:普通交易 1:分账(用于分账的交易需传该参数) 2:交易主体分账(延迟结算) 3:预授权注:如果未传该字段默认为0,按不分账处理 | +| 商户公 众账号 ID | appid | O | 32 | string | 商户或者商户所属渠道号主体的公众号appid,由微信统一分配,仅对微信交易生效,传送前请确定商户和该appid已经建立绑定关系 | +| 通知地址 | notify_url | [O](#eFgvt) | 128 | string | 接收乐刷通知的URL,需做UrlEncode 处理,需要绝对路径,确保乐刷能正确访问,若不需要回调请忽略 | +| 用户IP地址 | client_ip | O | 16 | string | 商户发起交易的IP地址 | +| 商品描述 | body | O | 256 | string | 商品描述,不能包含回车换行等特殊字符 | +| 商户门店编号 | shop_no | O | 16 | string | 只能是汉字、英文字母、数字 | +| 商户终端编号 | pos_no | O | 16 | string | 只能是汉字、英文字母、数字 注意:银联类型交易时,只能 8位:数字字母 不支持 特殊字符 | +| 附加数据 | attach | O | 96 | string | 支付成功原样返回;注意:只能是汉字、英文字母、数字 | +| 指定支付方式 | limit_pay | O | 1 | string | 1:禁止使用信用卡;0或者不填:不限制 | +| 订单优惠标记 | goods_tag | O | 32 | string | 订单优惠标记,透传给微信 | +| 商品详情 | goods_detail | O | 8000 | string | 按[微信单品优惠券格式](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1)传递,透传给微信;银联扫码交易时,透传给银联的“收款方附加数据”acqAddnData参数,当前银联的单品营销及扫码点餐均使用到该参数,具体参数格式及说明见:[银联收款方附加数据](#lUVoy)。 | +| 花呗分期数 | hb_fq_num | O | 无 | string | 支付宝花呗分期数,支持3、6、12期 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 业务拓展参数 | extend_business_params | O | 8000 | string | 该字段 为JSON格式的字符串,当前可透传支付宝的参数见下表具体格式详见文档下方:[业务拓展参数示例](#5u5k5)注:花呗分期商家订单传参贴息示例:"extend_business_params":"{\"business_params\":{ \"enable_thirdparty_subsidy\":\"N\"}}"如果第三⽅贴息活动为全场贴息,默认可贴息,传⼊ N 值则本笔交易禁⽤三⽅贴息; 如果第三⽅贴息活动为指定订单传参贴息,默认禁⽤贴息,传⼊Y 值则本笔交易启⽤三⽅贴息 | +| 设备编号 | device_info | O | 32 | string | 针对微信、支付宝有效,透传至银联。微信:数字、字母、下划线格式支付宝:目前支持非0开头的数字 | +| 门店编号 | store_id | O | 32 | string | 针对微信、支付宝有效,透传至银联。微信:数字、字母、下划线格式支付宝:目前支持非0开头的数字 | +| 通道商户号 | ass_merchant_id | O | 32 | string | 非必填。可使用指定的微信、支付宝子商户号进行交易,一个乐刷商户号有多个通道商户号情况下可用。注:对应乐刷商户号大于200条时不能传该参数 | +| 银联服务商标识 | pnrins_id_cd | O | 32 | string | 银联扫码交易时,透传给银联,对应银联的 pnrInsIdCd参数。 | +| **gps信息** | gps_info | O | 512 | string | 校验GPS信息格式, 如:-128.12,23.1 -- 1. xxx,xxx -- 2. 经度xxx为[-180,180]之间的浮点数,维度xxx为[-90,90]之间的浮点数,最多保留小数点八位float(11,8) | +| ** 基站信息** | bs_info | O | 512 | string | 校验基站信息格式, 格式说明: -- 1. 格式为:xxx,xxx,xxx,xxx 如:460,1,12,23454 -- 2. xxx均为整数,长度不超过11位​ 基站信息,从左至右依次对应以下几个字段: mcc: 移动国家号码,由3位数字组成,唯一地识别移动用户所属的国家。我国为460 mnc:移动网号,由两位数字组成,用于识别移动用户所归属的移动网 lac:位置区编码,为寻呼而设置的一个区域,覆盖一片地理区域,按寻呼量划分 ci :负责收发的天线所朝向的扇区编号 | +| 场景信息 | scene_info | O | | string | 该字段用于上报场景信息,仅针对微信交易有效,目前支持上报实际门店信息。该字段 为JSON格式的字符串,对象格式为{"store_info":{"id": "门店 ID","name ": "名称","area_code": "编码","address": "地址"}} ,字段详细说明参考下文。 | +| 电子发票功能 | need_receipt | O | | boolean | 电子发票功能。仅针对微信交易有效,需要和微信公众平台的发票功能联合使用。枚举:(只能为true或false,只支持全小写字母或全大写字母) truefalse | +| 交易终端信息 | terminal_info | O | | String | 商户侧受理终端信息,格式为json 格 式。 如terminal_info= { "longitude":"-121.48352",#option "latitude":"+31.221345",#option "network_license":"P3100", "device_type":"01", "device_id":"54MPDz39", "serial_num":"5", "app_version": "v1.1.1" , "device_ip": "252.1.1.25" , }​ json内各参数说明longitude:经度,+代表东经,-代表西经。latitude:纬度,+代表北纬,-代表南纬。network_license:银行卡受理终端入网编号。该编号由“中国银联标识产品企业资质认证办公室”为通过入网认证的终端进行 分配。银联直连终端必填。 格式:5 位字符,例如 P3100device_type:设备类型,01:自动柜员机(含 ATM 和 CDM)和 多媒体自助终端 02:传统 POS 03:mPOS 04:智能 POS 05:II 型固定电话 06:云闪付终端; 07:保留使用; 08:手机 POS; 09:刷脸付终端; 10:条码支付受理终端; 11:条码支付辅助受理终端; 12:行业终端(公交、地铁用于指定行 业的终端); 13:MIS 终端;​ serial_num:设备序列号,设备类型02、 03、04、05、06、08、09 或 10 时必填encrypt_rand_num:仅在被扫支付类交易报文中出现:若付 款码为 19 位数字,则取后 6 位; 若付款码码为 EMV 二维码,则取其 tag 57 的卡号/token 号的后 6 位secret_text:仅在条码支付交易报文中出现:64bit 的密文数据,对终端硬件序列号和加密 随机因子加密后的结果。 本子域取值为:64bit 密文数据进行 base64 编码后的结果。该字段需要服务商和厂商联调时由厂商sdk之类加密后给出。app_version:终端应用程序的版本号。应用程序变更 应保证版本号不重复。当长度不足时, 右补空格。固定8位device_ip:终端交易IP。如经、维度信息未上送,该字段必送。​ ​ | + +extend_business_params参数: + +| **变量名** | **必填** | **限制** | **类型** | **说明** | 示例 | +| --- | --- | --- | --- | --- | --- | +| business_params | O | - | Object | 商户传入业务信息,应用于安全,营销 等参数直传场景,格式为 json 格式。 | | +| goods_detail | O | - | Array | 订单包含的商品列表信息,数组格式。一般在支付宝扫码点餐业务中上传点餐的商品信息 | [{"goods_id": "5544", "goods_name": "爽口青笋丝","price": "0.50","quantity": 2,"goods_category": "888", "categories_tree": "888","body": "爽口青笋丝","show_url":"pageFoodChain/storeDetail/main?suid=10"}] | +| ┖goods_id | M | 32 | String | 商品的编号 | | +| ┖alipay_goods_id | O | 32 | String | 支付宝定义的统一商品编号 | | +| ┖goods_name | M | 256 | String | 商品名称 | | +| ┖quantity | M | 10 | Number | 商品数量 | | +| ┖price | M | 9 | Price | 商品价格,单位为元 | | +| ┖goods_category | O | 24 | String | 商品类目 | | +| ┖categories_tree | O | 128 | String | 商品类目数,从商户品类目根节点到叶子节点的类目id组成,类目id使用\|分割 | 124868003\|126 232002\|126252 004 | +| ┖body | O | 1000 | String | 商品描述信息 | | +| ┖show_url | O | 400 | String | 商品的展示地址 | http://www.alipay.co m/xxx.jpg | +| extend_params | O | - | Object | 支付宝业务扩展参数 | | +| ┖sys_service_provid er_id​ | O | ​ | String | ​ | | +| ┖hb_fq_num | O | ​ | String | ​ | | +| ┖hb_fq_seller_percent | O | ​ | String | ​ | | +| ┖industry_reflux_info | O | ​ | String | ​ | | +| ┖card_type | O | ​ | String | ​ | | +| ​ | ​ | ​ | ​ | ​ | | +| ​ | ​ | ​ | ​ | ​ | | +| ┖ | ​ | ​ | ​ | ​ | | +| ┖ | ​ | ​ | ​ | ​ | | +| ┖ | ​ | ​ | ​ | ​ | | +| ┖ | ​ | ​ | ​ | ​ | | +| seller_id | O | 28 | String | 如果该值为空,则默认为商户签约账号对应的支付宝用户ID预授权场景下无需上送 | | +| discountable_amont | O | 11 | Price | 参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。 如果该值未传入,但传入了【订单总金额】和【不可打折金额】,则该值默认为【订单总金额】-【不可打折金额】 | | +| undiscountable_amount | O | 11 | Price | 不参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。如果该值未传入,但传入了【订单总金额】和【可打折金额】,则该值默认为【订单总金额】-【可打折金额】 | | +| operator_id | O | 28 | String | 商户操作员编号 | | +| alipay_store_id | O | 32 | String | 支付宝的店铺编号 | | +| merchant_order_no | O | 32 | String | 商户的原始订单号 | | +| ext_user_info | O | - | ExtUserInfo | 外部指定买家 | | +| promo_params | O | 512 | PromoParam | 优惠明细参数,通过此属性补充营销参数 | | +| terminal_params | O | 2048 | String | json 格式;商户传入终端设备。如:{"credential":"28763443825664394:20180207192030954:abcdefGHIJKLMN","signature":"xxxxxxx","terminalType":"IOT"} | | +| advance_payment_type | O | 20 | String | 支付模式类型, 若 值 为ENJOY_PAY_V2表示当前交易允许走先享后付 2.0 垫资 | | +| query_options | O | 1024 | String[] | 返回查询选项,商户通过上送该参数来定制同步需要额外返回的信息字段,数组格式。如:["fund_bill_list","voucher_detail_list","discount_goods_detail"] | | +| disable_pay_channels | O | 64 | String | 禁用支付渠道,多个渠道以逗号分割,如 同时禁用信用支付类型和积分,则 disable_pay_channels="cre dit_group,point" 具体的渠道以支付宝或者银联提供的为准 | | + +**场景信息scene_info字段说明(当前仅针对微信交易会透传给微信):** + +| **名称** | **参数名** | **必填** | **类型** | **示例值** | **描述** | +| --- | --- | --- | --- | --- | --- | +| 门店Id | id | 否 | String(32) | SZTX001 | 门店唯一标识 | +| 门店名称 | name | 否 | String(64) | 腾讯大厦腾大餐厅 | 门店名称 | +| 门店行政区划码 | area_code | 否 | String(6) | 440305 | 门店所在地行政区划码 | +| 门店详细地址 | address | 否 | String(128) | 科技园中一路腾讯大厦 | 门店详细地址 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | [C](#eFgvt) | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 支付类型 | pay_way | M | 无 | string | [详见下方支付类型](#nlHUH) | +| 支付完成时间 | pay_time | C | 无 | string | 支付成功时才返回 | +| 银行类型 | bank_type | O | 无 | string | 使用银行卡支付以外的(如零钱)全部展示为others,使用银行卡支付的详见下方[付款银行类型](#cX4pl) | +| 用户openid | openid | C | 无 | string | 支付成功时才返回 | +| 微信、支付宝等订单号 | out_transaction_id | C | 无 | string | 支付成功时才返回 | +| 用户子标识 | sub_openid | C | 无 | string | 支付成功时才返回。微信:公众号APPID下用户唯一标识;支付宝:买家的支付宝用户ID | +| 附加数据 | attach | O | 96 | string | 支付成功原样返回;注意:只能是汉字、英文字母、数字 | +| 交易类型 | trade_type | C | 无 | string | 支付成功时才返回:MICROPAY-条码支付,NATIVE-原生扫码支付,JSAPI-公众号支付、服务窗支付,SmPgPay-小程序支付,JSAPIQuick-简易支付 | +| 通道订单号 | channel_order_id | C | 无 | string | 支付成功时才返回 | +| 通道订单时间 | channel_datetime | C | 无 | string | 支付成功时才返回 | +| 支付宝红包金额 | coupon | C | 无 | string | 支付成功时才返回,单位(分) | +| 应结算金额 | settlement_amount | C | 无 | string | 实际结算金额,支付成功时才返回,单位(分) | +| 折扣优惠金额 | discount_amount | C | 无 | string | [订单优惠金额](#6QKR6),支付成功时才返回,单位(分) | +| 优惠详情 | promotion_detail | O | 无 | string | 银联单品的具体优惠详情;微信优惠详情说明:[微信官网](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1) | +| 活动标志 | active_flag | O | 无 | string | 活动标志。WXLZ:微信绿洲;ZFBLH:支付宝蓝海 | +| 买家实付金额 | buyer_pay_amount | C | 无 | String | 微信、支付宝此值有效 | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | +| 通道标记 | channel_flag | O | 32 | string | GXST:高校食堂PUBWEL:公益PUBPAY:公缴ZFBLH:支付宝新蓝海SLZXY:私立中小幼INS:保险ONLINE:线上 | +| 银联/网联状态码 | channel_code | C | 无 | JSON | 透传银联的返回码。银联支付宝:code, sub_code 银联微信:return_code, result_code,err_code 银联二维码平台:respCode 条码前置平台:status、code、result_code、err_code。以上各种code,仅在银联返回时透传。格式: | +| | alipay_infos | | | | 见下alipay_infos参数表 | + +alipay_infos参数表 + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| | total_amount | M | 11 | Price | 交易金额(单位:分, 类型:数字) | +| | settle_amount | C | 11 | String | 结算币种订单金额 | +| | pay_amount | C | 11 | String | 支付币种订单金额 | +| | receipt_amount | M | 11 | String | 实收金额(单位:分, 类型:数字) | +| | point_amount | C | 11 | Price | 使用集分宝付款的金额 | +| | invoice_amount | C | 11 | Price | 交易中可给用户开具发票的金额(单位:元) | +| | fund_bill_list | M | | TradeFundBill[] | 交易支付使用的资金渠道。只有在签约中指定需要返回资金明细,或者入参的query_options 中指定时才返回该字段信息。 | +| | card_balance | C | 11 | Price | 支付宝卡余额 | +| | store_name | C | 512 | String | 发生支付交易的商户门店名称 | +| | discount_goods_detail | C | 1024 | String | 本次交易支付所使用的单品券优惠的商品优惠信息。只有在 query_options中指定时才返回该字段信息。 | +| | async_payment_mode | C | 20 | String | 异步支付模式,先享后付业务会返回该参 数 , 目 前 有 三 种 值 :ASYNC_DELAY_PAY( 异 步 延 时 付款); ASYNC_REALTIME_PAY( 异步准实时付款); SYNC_DIRECT_PAY(同步直接扣款); | +| | purchase_merchant_contribute | C | 8 | Price | 如果使用的这张券是用户购买的,则该字段代表用户在购买这张券时商户优惠的金额 | +| | auth_trade_pay_mode | C | 64 | String | 预授权支付模式,该参数仅在信用预授权支付场景下返回。信用预授权支付:CREDIT_PREAUTH_PAY | +| | advance_amount | C | 11 | String | 先享后付 2.0 垫资金额,不返回表示没有走垫资,非空表示垫资支付的金额 | +| | business_params | C | 512 | String | 商户传入业务信息,具体值要和支付宝约定将商户传入信息分发给相应系统,应用于安全,营销等参数直传场景格式为 json 格式 | +| | buyer_user_type | C | 18 | String | 买家用户类型。 CORPORATE:企业用户;PRIVATE:个人用户。 | +| | buyer_user_name | C | 128 | String | 买家名称;买家为个人用户时为买家姓名,买家为企业用户时为企业名称; | +| | mdiscount_amount | C | 11 | String | 商家优惠金额 | +| | discount_amount | C | 11 | String | 平台优惠金额 | +| | charge_flags | C | 64 | String | 费率活动标识,当交易享受活动优惠费率时,返回该活动的标识;(1)蓝海活动优惠费率 0,值为 bluesea_1(2) 特 殊 行 业 优 惠 费 率 0 , 值 为industry_special_00(3) 特殊行业优惠费率千一,值为industry_special_01 | +| | buyer_logon_id | M | 100 | String | 买家支付宝账号 | + +##### 订单优惠金额 + +微信支付包含商户和微信给的优惠金额,支付宝支付只包含商户给的优惠金额,银联二维码支付只包含商户给的优惠金额 + +**业务拓展参数示例** + +```json +"extend_business_params": "{ " + extend_params ":{ " + sys_service_provider_id ":" + 208812333665551 ", " + food_order_type ":" + home_delivery " } }", +``` + +**银联单品营销请求示例** + +```http +请求地址?amount=100&auth_code=XXXXXXXXXXXXXXXX&goods_detail= +%7b%22goodsInfo%22%3a%5b%7b%22id%22%3a%2212341234%22%2c%22name%22%3a%22%e6%b5%8b%e8%af%95%e5%95%86%e5%93%81%22%2c%22price%22%3a%22100%22%2c%22quantity%22%3a%221%22%7d%5d%7d +&merchant_id=XXXXXXXXXX&nonce_str=7aee8b722a614cfa9cfb39ad5409fcdf&service=upload_authcode&third_order_id=UB4C0D38F5091465F920200326100751& +sign=69fb04df6dda8bfd3110e4891efedc8b +``` + +##### 银联收款方附加数据 + +price 和 quantity 字段为数字类型 + +```json +银联扫码交易时good_detail示例: +{ + "orderInfo" : { + "title" :"日用品", + "dctAmount" :"10000", + "addnInfo" :"屈臣氏(人民广场)店" + }, + "goodsInfo" : [ + {"id": "1234567890", + "name": "商品 1", + "price": 500, + "quantity": 1 + }, + { + "id": "1234567891", + "name": "商品 2", + "price": 1000, + "quantity": 2, + "category": "类目 1", + "addnInfo": "商品图片 http://www.95516.com/xxx.jpg" } ] +} +``` + +注: + +True. 银联扫码点餐时,在该域的订单信息 orderInfo 子域中的附加信息 addnInfo 字段需填写该门店对应的品牌标识、门店标识、桌号(其中 SaaS 收银的支付交易需有 品牌标识、门店标识,扫码点餐的支付交易必须有品牌标识、门店标识、桌号)。addnInfo 字段的参考格 式为:{brandId=值&storeId=值&tableNo=值},例如: addnInfo={brandId=AXMX&storeId=12345&tableNo=12} +True. 银联单品营销时,按照银联需要的内容,在该域的商品信息goodsInfo上送对应的商品信息。 + +​ + +**注意事项** + +(1)所有涉及到金额的单位都位分,币种为RMB,最小为1分,不允许出现小数 + +(2)文档中参数,标识为必填必须上送(如果缺少会报错),非必填的可填可不填 + +(3)返回参数中必填为是的参数是一定会返回的,必填为否的参数则不一定返回,因升级或配置等情况实际返回参数可能不会跟文档完全一致,必须以实际接收到的参数为准 + +### 3.扫码支付结果 + +#### 3.1、扫码支付结果通知 + +**由于诸多因素都会影响到支付结果的通知,推送可能存在延迟,并且不能保证100%推送成功。故强烈建议主接交易查询接口。 ** + +**POST Content-Type: text/xml; charset=utf-8 ** + +**通知参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使 用MD5算法) | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 商户号 | merchant_id | M | 10 | string | 乐刷商户号 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 乐刷订单号 | leshua_order_id | M | 32 | string | | +| 商户订单号 | third_order_id | M | 64 | string | | +| 订单金额 | amount | M | 无 | string | | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 支付类型 | pay_way | M | 无 | string | [详见下方支付类型](#Mpdey) | +| 支付时间 | pay_time | M | 无 | string | '2020-09-15 10:11:30' | +| 银行类型 | bank_type | O | 无 | string | 使用银行卡支付以外的(如零钱)全部展示为others,使用银行卡支付的详见下方[付款银行类型](#cX4pl) | +| 用户openid | openid | O | 无 | string | | +| 微信、支付宝等订单号 | out_transaction_id | O | 无 | string | | +| 用户子标识 | sub_openid | C | 无 | string | 支付成功时才返回。微信:微信公众号APPID 下用户唯一标识;支付宝:买家的支付宝用户ID | +| 附加数据 | attach | O | 96 | string | 原样返回;注意:只能是汉字、英文字母、数字 | +| 交易类型 | trade_type | C | 无 | string | 支付成功时才返回:MICROPAY-条码支付,NATIVE-原生扫码支付,JSAPI-公众号支付、服务窗支付,SmPgPay-小程序支付,JSAPIQuick-简易支付 | +| 通道订单号 | channel_order_id | C | 无 | string | 支付成功时才返回 | +| 通道订单时间 | channel_datetime | C | 无 | string | 支付成功时才返回 | +| 支付宝红包金额 | coupon | C | 无 | string | 支付成功时才返回 | +| 应结算金额 | settlement_amount | C | 无 | string | 实际结算金额,支付成功时才返回 | +| 折扣优惠金额 | discount_amount | C | 无 | string | 本订单优惠金额,支付成功时才返回 | +| 优惠详情 | promotion_detail | O | 无 | string | 银联单品的具体优惠详情;微信优惠详情说明:[微信官网](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1) | +| 活动标志 | active_flag | O | 无 | string | 活动标志:WXLZ:微信绿洲 ZFBLH:支付宝蓝海 | +| 买家实付金额 | buyer_pay_amount | O | 无 | String | 微信、支付宝此值有效 | +| 付款方附加数据 | iss_addn_data | M | 无 | String | 格式如下 | +| 设备编号 | device_info | O | 32 | string | 上游返回时才返 | +| 门店编号 | store_id | O | 32 | string | 上游返回时才返 | +| 通道标记 | channel_flag | O | 32 | string | GXST:高校食堂PUBWEL:公益PUBPAY:公缴ZFBLH:支付宝新蓝海SLZXY:私立中小幼INS:保险ONLINE:线上 | +| 花呗分期期数 | hb_fq_num | O | 无 | string | 支付宝花呗分期数,一般为3、6、12期,乐刷透传,具体期数由支付宝侧限定 | +| 支付宝优惠信息 | alipay_infos | | | string | 见下alipay_infos参数表 | +| 分期信息 | install_info | O | 无 | string | 包含分期笔数(install_nums)/分期付款手续费率(install_rate)/商户补贴手续费率(merchant_fee_subsidy)) | + +alipay_infos参数表 + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| total_amount | M | 11 | Price | 交易金额(单位:分, 类型:数字) | +| point_amount | O | 11 | Price | 积分支付的金额,单位为元,两位小数。该金额代表该笔交易中用户使用积分支付的金额,比如集分宝或者支付宝实时优惠等 | +| invoice_amount | O | 11 | Price | 交易中用户支付的可开具发票的金额,单位为元,两位小数。该金额代表该笔交易中可以给用户开具发票的金额 | +| receipt_amount | O | 11 | String | 实收金额(单位:分, 类型:数字) | +| discount_goods_detail | M | 1024 | String | 本次交易支付所使用的单品券优惠的商品优惠信息。只有在 query_options中指定时才返回该字段信息。 | +| mdiscount_amount | O | 11 | String | 商家优惠金额 | +| discount_amount | O | 11 | String | 平台优惠金额 | +| buyer_logon_id | M | 100 | String | 买家支付宝账号 | +| fund_bill_list | M | 256 | TradeFundBill[] | 交易支付使用的资金渠道。只有在签约中指定需要返回资金明细,或者入参的query_options 中指定时才返回该字段信息。 | + +**注意:** + +1、支付发起后,乐刷一般30s左右才会返回支付通知,如需快速获取支付结果,请调用“交易结果查询”接口发起查询。 + +2、支付通知的频率:0s/15s/30s/1m/4m/34m/64m/94m/124m/184m + +##### 支付类型 + +| 类型 | 说明 | 状态 | +| --- | --- | --- | +| WXZF | 微信 | 支持 | +| ZFBZF | 支付宝 | 支持 | +| UPSMPAY | 银联二维码 | 支持 | + +**iss_addn_data参考格式:** + +| **参数名** | **变量名** | **类型** | **说明** | +| --- | --- | --- | --- | +| 商品优惠信息 | dctDetail | String | 商品优惠明细 | +| 商品编号 | id | String | 参与优惠的商品编号 | +| 优惠活动编号 | dctId | String | 优惠活动的编号 | +| 商品优惠数量 | dctQuantity | String | 参与优惠的商品数量 | +| 商品优惠金额 | dctPrice | String | 商品的优惠总金额(分) | + +```json +issAddnData= { + "dctDetail" : [{ + "id": "1234567890", + "dctId": "app012345", + "dctQuantity": 1", + "dctPrice": "500" + },{ + "id": "1234567891", + "dctId": "app012345", + "dctQuantity": "2", + "dctPrice": "1000", +``` + +**返回参数** + +| 返回内容 | 说明 | +| --- | --- | +| 000000 | 通知成功,乐刷收到此返回后不会继续通知。返回内容000000是string类型,没有双引号。示例:return 000000; | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知。为避免资源浪费,请核实并确保响应信息的准确性,可以是否重复通知为检查手段 | + +注意: + +1.回调地址为统一下单或条码支付的通知地址。 + +2.交易回调处理时间为5S内。 + +3.支付成功才进行推送。 + +**付款银行类型** + +| 通道 | 说明 | +| --- | --- | +| 微信 | [https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=4_2](https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=4_2) | +| 支付宝 | [https://alipay.open.taobao.com/doc2/detail?treeId=26&articleId=103259&docType=1](https://alipay.open.taobao.com/doc2/detail?treeId=26&articleId=103259&docType=1) | +| 银联二维码 | 1 - 借记卡 2- 贷记卡 | + +#### 3.2、扫码交易结果查询 + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)注:查询时,除非返回明确的支付成功、支付失败、订单关闭等最终状态,其他错误或者未支付状态,都需要再查询,直到得到明确的支付状态。如果超过一段时间还是未支付,可以调用关闭订单接口。 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | query_status(此为固定值) | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | O | 64 | string | 选填 | +| 乐刷订单号 | leshua_order_id | O | 16 | string | third_order_id和leshua_order_id必填1个,优先使用leshua_order_id | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 订单金额 | amount | M | 无 | string | | +| 支付类型 | pay_way | M | 无 | string | [详见下方支付类型](#nlHUH) | +| 支付完成时间 | pay_time | C | 无 | string | 支付成功时才返回 | +| 银行类型 | bank_type | O | 无 | string | 使用银行卡支付以外的(如零钱)全部展示为others,使用银行卡支付的详见下方[付款银行类型](#cX4pl) | +| 用户openid | openid | C | 无 | string | 支付成功时才返回 | +| 微信、支付宝等订单号 | out_transaction_id | C | 无 | string | 支付成功时才返回 | +| 用户子标识 | sub_openid | C | 无 | string | 支付成功时才返回。微信:微信公众号APPID下用户唯一标识;支付宝:买家的支付宝用户ID | +| 附加数据 | attach | O | 96 | string | 支付成功时原样返回;注意:只能是汉字、英文字母、数字 | +| 交易类型 | trade_type | C | 无 | string | 支付成功时才返回:MICROPAY-条码支付,NATIVE-原生扫码支付,JSAPI-公众号支付、服务窗支付,SmPgPay-小程序支付,JSAPIQuick-简易支付 | +| 通道订单号 | channel_order_id | C | 无 | string | 支付成功时才返回 | +| 通道订单时间 | channel_datetime | C | 无 | string | 支付成功时才返回 | +| 支付宝红包金额 | coupon | C | 无 | string | 支付成功时才返回,单位(分) | +| 应结算金额 | settlement_amount | C | 无 | string | 实际结算金额,支付成功时才返回 | +| 折扣优惠金额 | discount_amount | C | 无 | string | 订单优惠金额,支付成功时才返回 | +| 优惠详情 | promotion_detail | O | 无 | string | 银联单品的具体优惠详情; 微信优惠详情说明:[微信官方文档](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1) | +| 活动标志 | active_flag | O | 无 | string | 活动标志。WXLZ:微信绿洲;ZFBLH:支付宝蓝海 | +| 买家实付金额 | buyer_pay_amount | O | 无 | String | 微信、支付宝此值有效 | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | +| 退款金额 | refund_amount | O | 无 | string | 订单已退款的金额 | +| 简易支付标识 | simple_url_flag | O | 无 | string | 1表示是简易支付,0表示不是简易支付 | +| 设备编号 | device_info | O | 32 | string | 上游返回时才返 | +| 门店编号 | store_id | O | 32 | string | 上游返回时才返 | +| 支付中间态补充 | interm_state | O | 32 | O | 目前仅针对微信支付,订单为支付中时返回:NOTPAY,USERPAYING | +| 通道标记 | channel_flag | O | 32 | string | GXST:高校食堂PUBWEL:公益PUBPAY:公缴ZFBLH:支付宝新蓝海SLZXY:私立中小幼INS:保险ONLINE:线上 | +| 花呗分期期数 | hb_fq_num | O | 无 | string | 支付宝花呗分期数,一般为3、6、12期,乐刷透传,具体期数由支付宝侧限定 | +| | alipay_infos | | | | 见下alipay_infos参数表 | + +alipay_infos参数表 + +| **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | +| total_amount | M | 11 | Price | 交易金额(单位:分, 类型:数字) | +| point_amount | O | 11 | Price | 积分支付的金额,单位为元,两位小数。该金额代表该笔交易中用户使用积分支付的金额,比如集分宝或者支付宝实时优惠等 | +| invoice_amount | O | 11 | Price | 交易中用户支付的可开具发票的金额,单位为元,两位小数。该金额代表该笔交易中可以给用户开具发票的金额 | +| receipt_amount | O | 11 | String | 实收金额(单位:分, 类型:数字) | +| discount_goods_detail | M | 1024 | String | 本次交易支付所使用的单品券优惠的商品优惠信息。只有在 query_options中指定时才返回该字段信息。 | +| mdiscount_amount | O | 11 | String | 商家优惠金额 | +| discount_amount | O | 11 | String | 平台优惠金额 | +| buyer_logon_id | M | 100 | String | 买家支付宝账号 | +| fund_bill_list | M | 256 | TradeFundBill[] | 交易支付使用的资金渠道。只有在签约中指定需要返回资金明细,或者入参的query_options 中指定时才返回该字段信息。 | + +**注意事项** + +(1)所有涉及到金额的单位都位分,币种为RMB,最小为1分,不允许出现小数 + +(2)文档中参数,标识为必填必须上送(如果缺少会报错),非必填的可填可不填 + +(3)返回参数中必填为是的参数是一定会返回的,必填为否的参数则不一定返回,因升级或配置等情况实际返回参数可能不会跟文档完全一致,必须以实际接收到的参数为准 + +### + +### 4、扫码退款 + +#### 4.1、扫码退款接口 **注意:超过三个月的订单,无法退款请注意 ****一个交易订单号,最多支持发起50次退款** + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)退款一般会返回退款中的状态,如需获取真实退款状态,请调用退款查询接口 + +(5)每笔支付订单部分退款次数不能超过50次 + +(6)退款有效期为60天,即订单发起后的60天内可以退款 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | unified_refund 注:此为固定值 | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | O | 64 | string | | +| 乐刷订单号 | leshua_order_id | O | 32 | string | 商户订单号跟乐刷订单号必填1个,优先使用leshua_order_id | +| 商户退款单号 | merchant_refund_id | M | 64 | string | 可以包含字母(不能有“_”等特殊字符),确保同一商户下唯一 | +| 附加数据 | attach | O | 96 | string | 退款成功原样返回;注意:只能是汉字、英文字母、数字 | +| 退款金额 | refund_amount | M | 10 | string | 退款金额,可做部分退款 | +| 退款类型 | refund_type | O | 否 | string | 0:不使用账户余额退款, 1:可以使用账户余额退款(优先使用正向交易抵扣,正向交易不够抵扣情况下可用账户余额进行退款)。2:限定只可以用账户余额进行退款不传默认不使用账户余额退款 (注意: 实时清分的只能使用账户退款 ) | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串,长度要求32位以内 | +| 通知地址 | notify_url | O | 128 | string | 接收乐刷退款结果通知的URL,需做Url Encode处理,需要绝对路径,确保乐刷能正确访问 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +返回参数 + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 附加数据 | attach | O | 96 | string | 退款成功原样返回;注意:只能是汉字、英文字母、数字 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| | | | | | | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 退款金额 | refund_amount | M | 无 | string | 退款金额 | +| 商户退款id | merchant_refund_id | M | 64 | string | | +| 乐刷退款id | leshua_refund_id | M | 32 | string | | +| 订单总金额 | total_amount | M | 无 | string | 订单总金额 | +| 订单余额 | order_balance | M | 无 | string | 订单余额:本次退款后订单剩余金额 | +| 实际退款金额 | settlement_refund_amount | O | 无 | string | 实际退款金额 | +| 折扣优惠退款金额 | discount_refund_amount | O | 无 | string | 折扣优惠退款金额 | +| 退款优惠详情 | refund_detail | O | 无 | string | 退款优惠详情 | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | + +#### 4.2、扫码退款查询 + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)注: 此接口如果查询到退款状态为中间状态时,会同步向上游查询一次退款状态;如果查询到是退款异常情况时,会同步向上游重新发起一次退款请求。 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | unified_query_refund 注:此为固定值 | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | O | 64 | string | | +| 乐刷订单号 | leshua_order_id | O | 32 | string | 跟third_order_id必填1个 | +| 商户退款单号 | merchant_refund_id | O | 64 | string | | +| 乐刷退款单号 | leshua_refund_id | O | 32 | string | 跟merchant_refund_id必填1个 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0代表成功,非0代表失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 附加数据 | attach | O | 96 | string | 原样返回;注意:只能是汉字、英文字母、数字 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 退款金额 | refund_amount | M | 无 | string | 退款金额 | +| 商户退款id | merchant_refund_id | M | 64 | string | | +| 乐刷退款id | leshua_refund_id | M | 32 | string | | +| 订单总金额 | total_amount | M | 无 | string | | +| 退款时间 | refund_time | O | 无 | string | 退款成功时间:退款成功才返回 | +| 实际退款金额 | settlement_refund_amount | O | 无 | string | 实际退款金额 | +| 折扣优惠退款金额 | discount_refund_amount | O | 无 | string | 折扣优惠退款金额 | +| 退款优惠详情 | refund_detail | O | 无 | string | 退款优惠详情 | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | + +#### 4.3、扫码退款结果通知 + +**由于诸多因素都会影响到支付结果的通知,推送可能存在延迟,并且不能保证100%推送成功。故强烈建议主接交易查询接口。** + +**通知参数** + +| **字段名** | **变量名** | **必填** | **长度限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 订单状态 | status | M | 无 | string | [详见下方订单状态](#aIxZP) | +| 失败原因 | failure_reason | O | 无 | string | 失败原因 | +| 附加数据 | attach | O | 96 | string | 原样返回;注意:只能是汉字、英文字母、数字 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 通道商户号 | sub_merchant_id | M | 无 | string | 微信、支付宝、QRC商户号 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 退款金额 | refund_amount | M | 无 | string | 退款金额 | +| 商户退款id | merchant_refund_id | M | 64 | string | | +| 乐刷退款id | leshua_refund_id | M | 32 | string | | +| 订单总金额 | total_amount | M | 无 | string | | +| 退款时间 | refund_time | C | 无 | string | 退款成功时间:退款成功才返回 | +| 折扣优惠退款金额 | discount_refund_amount | O | 无 | String | 折扣优惠退款金额 | +| 实际退款金额 | settlement_refund_amount | O | 无 | String | 实际退款金额 | +| 退款优惠详情 | refund_detail | O | 无 | String | 退款优惠详情(**在退款成功后才返回**) | + +**注意:** + +1、发起退款请求后,乐刷一般30s左右才会返回支付通知,如需快速获取支付结果,请调用“退款”接口发起查询。 + +**返回参数** + +| 返回内容 | 说明 | +| --- | --- | +| 000000 | 通知成功,乐刷收到此返回后不会继续通知 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知。为避免资源浪费,请核实并确保响应信息的准确性,可以是否重复通知为检查手段 | + +### 5、扫码订单关闭接口 + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)统一条码支付的订单后15秒后才允许调用订单关闭接口,统一下单订单无此限制。 (5)银联二维码的不支持关单 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | close_order(此为固定值) | +| sign_type | sign_type | O | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法;(不上送默认为使用MD5算法) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | O | 64 | string | 选填 | +| 乐刷订单号 | leshua_order_id | O | 16 | string | third_order_id和leshua_order_id必填1个,优先使用leshua_order_id | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 用户子标识 | sub_openid | M | 无 | string | | +| 订单状态 | status | M | 无 | string | ​ | +| 乐刷订单号 | leshua_order_id | M | 32 | string | 乐刷订单号 | +| 交易类型 | pay_way | M | 无 | string | [详见下方支付类型](#nlHUH) | +| 订单金额 | amount | M | 无 | string | | +| 请求耗时 | cost_time | C | 无 | string | 请求接口耗费的时间 | + +##### 订单状态 + +| **值** | **说明** | +| --- | --- | +| 0 | 支付中 | +| 2 | 支付成功 | +| 6 | 订单关闭 | +| 8 | 支付失败 | +| 10 | 退款中 | +| 11 | 退款成功 | +| 12 | 退款失败 | + +### 6、授权码 + +> 授权码相关接口与**条码支付接口**配套使用 +> + +#### 6.1、授权码查询用户openid + +**​** + +**请求地址** + +(1)/cgi-bin/lepos_pay_gateway.cgi + +(2)测试商户信息及请求密钥和回调密钥请联系我们获取。 + +(3)生产环境走完协议流程并且联调完提交测试报告后,我司运营同事将会提供参数给贵司 + +(4)注: 此接口需要上送户付款码和对应的微信公众号appid才能查询到用户openid + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | query_openid 注:此为固定值 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 授权码 | auth_code | M | 32 | string | 微信授权码 | +| 微信appid | appid | M | 32 | string | 微信公众号ID | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | C | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 用户子标识 | sub_openid | M | 无 | string | | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 微信用户标识 | openid | M | 无 | string | 乐刷appid下的用户微信openid | + +#### 6.2、授权码获取银联云闪付用户ID + +**简要描述** + +(1)使用用户授权码换取银联云闪付用户ID,使用此ID发起银联JS支付 + +**注:** 此步骤的前置条件:与公司归属银联分公司签署协议,并添加域名白名单获取用户授权码。 + +**请求参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 接口名 | service | M | 无 | string | query_userid(此为固定值) | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 用户授权码 | user_auth_code | M | 无 | string | | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 银联支付标识 | app_up_identifier | C | | | 收款方识别HTTP请求User Agent中包含银联支付标识,格式为“UnionPay/<版本号> ”,注意APP标识仅支持字母和数字。云闪付app支付不填,云闪付外app必填。示例:UnionPay/1.0 ICBCeLife | +| 签名 | sign | M | 32 | string | MD5签名结果 | + +**返回参数** + +| **参数名** | **变量名** | **必填** | **限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 返回状态码 | resp_code | M | 无 | string | 0 - 成功,非0 - 失败。注:此字段是通信标识,业务状态要看result_code | +| 返回错误信息 | resp_msg | O | 无 | string | 错误描述:resp_code非0时返回 | +| 业务结果 | result_code | M | 1 | string | 0 - 成功,非0 - 失败 | +| 错误码 | error_code | O | 无 | string | [参考错误码信息表](#rOC0m) | +| 错误码描述 | error_msg | O | 无 | string | 错误信息描述 | +| 商户号 | merchant_id | M | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | M | 64 | string | 商户内部订单号 | +| 随机字符串 | nonce_str | M | 32 | string | 随机字符串 | +| 签名 | sign | M | 32 | string | MD5签名结果 | +| 用户ID | user_id | O | 无 | string | | + +##### 支付类型 + +| 类型 | 说明 | 状态 | +| --- | --- | --- | +| WXZF | 微信 | 支持 | +| ZFBZF | 支付宝 | 支持 | +| UPSMZF | 银联二维码 | 支持 | +| DCPAY | 数字货币 | 支持 | + +##### 订单状态 + +| **值** | **说明** | +| --- | --- | +| 0 | 支付中 | +| 2 | 支付成功 | +| 6 | 订单关闭 | +| 8 | 支付失败 | +| 10 | 退款中 | +| 11 | 退款成功 | +| 12 | 退款失败 | + +##### 付款银行类型 + +| **通道** | **说明** | +| --- | --- | +| 微信 | [https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=4_2](https://pay.weixin.qq.com/wiki/doc/api/mch_bank.php?chapter=4_2) | +| 支付宝 | [https://alipay.open.taobao.com/doc2/detail?treeId=26&articleId=103259&docType=1](https://alipay.open.taobao.com/doc2/detail?treeId=26&articleId=103259&docType=1) | +| 银联二维码 | 1 - 借记卡 2- 贷记卡 | + +##### 业务拓展参数示例(支付宝小程序需传) + +```json +"extend_business_params": "{ " +business_params ": { + "bizSource": "mAppQrFood", + "sourcePath": "pageFoodChain/shopTakeOut/main?suid=10" + }, + "goods_detail": [{ + "goods_id": "5544", + "goods_name": "爽口青笋丝", + "price": "0.50", + "quantity": 2, + "goods_category": "888", + "categories_tree": "888", + "body": "爽口青笋丝", + "show_url": "pageFoodChain/storeDetail/main?suid=10" + }], "extend_params": { + "sys_service_provider_id": "208812333665551", + "food_order_type": "home_delivery" + } +}", +``` + +**条码支付接口goods_detail,按银联单品营销格式传递****参数goodsInfo,格式如下** + +```json + "goods_detail":{ + "goodsInfo" : [ + { + "id": "1234567890", + "name": "商品 1", + "price": "500", + "quantity": "1"}, + { + "id": "1234567891", + "name": "商品 2", + "price": "1000", + "quantity": "2", + "category": "类目 1", + "addnInfo": "商品图片 http://www.95516.com/xxx.jpg"}] + }, +``` + +## 7、刷卡及扫码支付异步通知 + +采用HTTP 标准的POST协议(请使用 application/x-www-form-urlencoded 此Content-Type接收通知消息),为了保证数据正确性、准确性,数据必须验证签名。 + +**返回数据(支付成功通知如下)** + +```xml + + 0 + 1 + 0 + ALIPAYACCOUNT + + 2018-12-07 22:42:39 + 7551000001201812073279154152 + 0 + 0 + + 1812072242293655 + 0000000018 + 2088032562556921 + 2018120722001456935441223102 + 2018-12-07 22:42:39 + ZFBZF + 0 + 1 + 0b574d40e722ec76b55d4e8795f71182 + 2 + + 20181207224223102101 + NATIVE + +``` + +**返回数据(刷卡支付成功通知如下)** + +```xml + +0 +600 +000000 +000010 + +890584058130851 +89147601 +000109 +2203221139307885 +220322393155923079 +2041000394 +6012514015 +20220322114213731 + + +113935096395 +2022-03-22 11:41:43 +21e70c91171b8d6ba00dea3c3ef6affa +218JCA8L7760 +32 +20220322114005352 +220322393155923079 + +``` + +**返回数据(扫码退款成功通知如下)** + +```xml + + 0 + + 0 + 90001401275201 + 90002391275201 + 9115219 + 0000091152192752007041753 + mccqvx9q0d5nifcsd0uv9xlmkxgr6kdg + 2020-07-04 17:53:24 + 1000 + 426adb68310b659953d18b629c1a2e7e + 11 + 208860057301617 + 0000091152192752007041749 + 5500 + +``` + +### 7.1 扫码支付成功通知 + +(1)通知 URL 是代理商后台配置的通知地址。扫码支付成功后,乐刷会把相关支付信息和用户信息发送到该 URL,商户需要接收处理信息。对后台通知交互时,如果收到商户的应答不是成功或者超时,乐刷认为通知失败,会通过一定的策略定期重新发起通知,尽可能的提高通知的成功率,但是不保证通知最终一定能成功。由于存在重复发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。系统必须能够正确处理重复的通知。 + +(2)验证签名方法:通知的 error_code、sign 字段不参与签名,签名方式参照数据格式及数据签名说明,其中签名 key 统一由乐刷提供。另外,组织签名串时空值也参与签名。 + +**通知参数** + +| **字段名** | **变量名** | **必填** | **长度限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 错误码 | error_code | 否 | 无 | string | 参照错误码信息参照表 | +| sign_type | sign_type | 否 | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法; | +| 签名 | sign | 是 | 32 | string | MD5 签名结果 | +| 商户号 | merchant_id | 是 | 10 | string | 乐刷商户号 | +| 乐刷订单号 | leshua_order_id | 是 | 32 | string | | +| 商户订单号 | third_order_id | 是 | 64 | string | | +| 订单金额 | amount | 是 | 无 | string | | +| 订单状态 | status | 是 | 无 | string | 见下方[订单的状态](#CozIx) | +| 支付类型 | pay_way | 是 | 无 | string | 见下方[支付类型](#yGR0s) | +| 支付时间 | pay_time | 是 | 无 | string | '2018-08-20 19:19:19' | +| 银行类型 | bank_type | 否 | 无 | string | | +| 用户openid | openid | 否 | 无 | string | | +| 微信、支付宝等订单号 | out_transaction_id | 否 | 无 | string | | +| 用户子标识 | sub_openid | 否 | 无 | string | 支付成功时才返回。微信:子商户appid 下用户唯一标识;支付宝:买家的支付宝用户id; | +| 附加数据 | attach | 否 | 96 | string | 支付成功时才返回。原样返回 | +| 交易类型 | trade_type | 否 | 无 | string | 支付成功时才返回。(1)MICROPAY--刷卡支付/条码支付(2)NATIVE--原生扫码支付(3)JSAPI--公众号支付/服务窗支付(4)APP--app支付(5)H5Pay-支付支付(6)SmPgPay-小程序支付(7)JSAPIQuick-简易支付 | +| 通道订单号 | channel_order_id | 否 | 无 | string | 支付成功时才返回 | +| 通道订单时间 | channel_datetime | 否 | 无 | string | 支付成功时才返回 | +| 支付宝红包金额 | coupon | 否 | 无 | string | 支付成功时才返回,单位:分 | +| 应结算金额 | settlement_amount | 否 | 无 | string | 实际结算金额,支付成功时才返回,单位:分 | +| 折扣优惠金额 | discount_amount | 否 | 无 | string | 本订单优惠金额,支付成功时才返回,单位:分 | +| 优惠详情 | promotion_detail | 否 | 无 | string | 优惠详情:[微信官网](https://pay.weixin.qq.com/wiki/doc/api/danpin.php?chapter=9_101&index=1) | +| 活动标志 | active_flag | 否 | 无 | string | 活动标志:WXLZ:微信绿洲,ZFBLH:支付宝蓝海 | +| **商户终端编号** | pos_no | 否 | 60 | string | 只能是汉字、英文字母、数字 注意:银联类型交易时,只能 8位:数字字母 不支持 特殊字符 | + +**返回参数** + +| **字段名** | **说明** | +| --- | --- | +| 000000 | 通知成功,乐刷收到此返回后不会继续通知 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知。为避免资源浪费,请核实并确保响应信息的准确性,可以是否重复通知为检查手段。 | + +##### 支付类型 + +| **类型** | **说明** | **状态** | +| --- | --- | --- | +| WXZF | 微信 | 支持 | +| ZFBZF | 支付宝 | 支持 | +| UPSMZF | 银联二维码 | 支持 | +| QQZF | QQ | 支持 | +| POS | 刷卡 | 支持 | +| DCPAY | 数字货币 | 支持 | +| UPSMPAY | 银联二维码(回调时返回) | 支持 | + +##### 订单状态值 + +| **值** | **说明** | +| --- | --- | +| 0 | 支付中 | +| 2 | 支付成功 | +| 6 | 订单关闭 | +| 8 | 支付失败 | +| 10 | 退款中 | +| 11 | 退款成功 | +| 12 | 退款失败 | +| 30 | 刷卡支付成功 | +| 31 | 刷卡撤销成功 | +| 32 | 刷卡退货成功 | +| 33 | 刷卡冲正成功 | + +### 7.2 扫码退款通知 + +(1)通知 URL 与扫码支付成功通知一样,均为代理商后台配置的通知地址。扫码交易退款时、退款成功时、退款失败时,乐刷均会把相关退款信息发送到该 URL,商户需要接收处理信息。对后台通知交互时,如果收到商户的应答不是成功或者超时,乐刷认为通知失败,会通过一定的策略定期重新发起通知,尽可能的提高通知的成功率,但是不保证通知最终一定能成功。由于存在重复发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。系统必须能够正确处理重复的通知。 + +(2)验证签名方法:通知的 error_code、sign 字段不参与签名,签名方式参照第 3 章 数据签名,其中签名 key 统一由乐刷提供。另外,组织签名串时空值也参与签名。 + +**通知参数** + +| **字段名** | **变量名** | **必填** | **长度限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 签名 | sign | 是 | 32 | string | MD5 签名结果 | +| sign_type | sign_type | 否 | 10 | string | 接口签名类型::MD5/SM3。 支持MD5和国密SM3算法 | +| 订单状态 | status | 是 | 无 | string | 见下方[订单状态](#yP5Xo) | +| 失败原因 | failure_reason | 否 | 无 | string | 失败原因 | +| 商户号 | merchant_id | 是 | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | 是 | 64 | string | 商户内部订单号 | +| 乐刷订单号 | leshua_order_id | 是 | 32 | string | 乐刷订单号 | +| 退款金额 | refund_amount | 是 | 无 | string | 退款金额(分) | +| 商户退款 id | merchant_refund_id | 是 | 64 | string | | +| 乐刷退款 id | leshua_refund_id | 是 | 32 | string | | +| 订单总金额 | total_amount | 是 | 无 | string | | +| 退款时间 | refund_time | 否 | 无 | string | 退款成功时间-退款成功才返回 | + +**返回参数** + +| **字段名** | **变量名** | +| --- | --- | +| 000000 | 通知成功,乐刷收到此返回后不会继续通知 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知 | + +##### 订单状态 + +| **值** | **说明** | +| --- | --- | +| 0 | 支付中 | +| 2 | 支付成功 | +| 6 | 订单关闭 | +| 8 | 支付失败 | +| 10 | 退款中 | +| 11 | 退款成功 | +| 12 | 退款失败 | +| 30 | 刷卡支付成功 | +| 31 | 刷卡撤销成功 | +| 32 | 刷卡退货成功 | +| 33 | 刷卡冲正成功 | + +### 7.3 刷卡交易通知 + +(1)通知 URL 与扫码支付成功通知一样,均为代理商后台配置的通知地址。刷卡交易成功时、刷卡撤销成功时、刷卡退货成功时、刷卡冲正成功时,乐刷均会把相关交易信息发送到该 URL,商户需要接收处理信息。对后台通知交互时,如果收到商户的应答不是成功或者超时,乐刷认为通知失败,会通过一定的策略定期重新发起通知,尽可能的提高通知的成功率,但是不保证通知最终一定能成功。由于存在重复发送后台通知的情况,因此同样的通知可能会多次发送给商户系统。系统必须能够正确处理重复的通知。 + +(2)验证签名方法:通知的 error_code、sign 字段不参与签名,签名方式参照第 3 章 数据签名,其中签名 key 统一由乐刷提供。另外,组织签名串时空值也参与签名。 + +(3)境外卡统一按照贷记卡费率进行结算,所以返回2 + +**通知参数** + +| **字段名** | **变量名** | **必填** | **长度限制** | **类型** | **说明** | +| --- | --- | --- | --- | --- | --- | +| 签名 | sign | 是 | 32 | string | MD5 签名结果 | +| 订单状态 | status | 是 | 无 | string | 详见下方[订单状态](#p7QuH) | +| 结算类型 | T0 | 是 | 无 | string | | +| 设备SN号 | sn | 是 | 无 | string | 硬件序列号和机身上一致 | +| 授权码 | authorize_code | 是 | 6 | string | 普通交易下返回000000 预授权交易不固定 | +| 失败原因 | failure_reason | 否 | 无 | string | 失败原因 | +| 商户号 | merchant_id | 是 | 10 | string | 由乐刷分配 | +| 商户订单号 | third_order_id | 是 | 64 | string | 商户内部订单号退货时,返回原订单的第三方订单号 | +| 乐刷订单号 | leshua_order_id | 是 | 32 | string | 乐刷订单号退货时,返回原订单的乐刷订单号 | +| 交易金额 | amount | 是 | 无 | string | 交易金额(分) | +| 银行卡号 | card_id | 否 | 无 | string | 刷卡交易时提供 | +| 卡类型 | card_type | 否 | 1 | string | 1----借记卡2----贷记卡 3---- 准贷记 | +| 发行主体 | pan_overseas | 否 | 1 | string | 0----境内卡 1----境外卡​ | +| 结算方式 | pan_type | 否 | 1 | string | (1使用商户借记卡费率,非1使用商户贷记卡费率 ) 0-----未知 1-----借记 2-----贷记 3-----准贷记 4-----借贷合一 5-----预付费 6-----半开放预付费 | +| 发卡行 | bank_name | 否 | 无 | string | 刷卡交易时提供 | +| 刷卡pos批次号 | batch_no | 是 | 无 | string | 每次签到后从后台获取批次号,当批交易均上送此批次号 | +| 刷卡pos流水号 | flow_id | 是 | 3 | string | 终端为每个交易随机生成的流水号,随交易信息上送 | +| 乐刷SN号 | leshua_sn | 是 | 无 | string | 刷卡交易时提供 | +| 刷卡pos参考号 | reference_number | 是 | 32 | string | POS中心分配的流水号,作为对账参考号 | +| 银联商户号 | cups_merchant_id | 否 | 20 | string | 表示上送银联的商户编号 | +| 银联终端号 | cups_terminal_id | 否 | 8 | string | 表示上送银联的终端编号 | +| 交易流水号 | transaction_id | 否 | 18 | string | 用于表示此操作的流水号 | +| 刷卡交易时间 | pay_time | 否 | 无 | string | 刷卡交易时提供 | +| 消费撤销时间 | refund_time | 否 | 无 | string | 消费撤销时提供 | +| 消费退货时间 | returngoods_time | 否 | 无 | string | 消费退货时提供 | +| 消费冲正时间 | reverse_time | 否 | 无 | string | 消费冲正时提供 | +| 商户撤销id | merchant_refund_id | 否 | 无 | string | 消费撤销时提供第三方传入的撤销订单号 | +| 商户退货id | merchant_returngoods_id | 否 | 无 | string | 消费退货时提供第三方传入的退货订单号 | +| 乐刷退款id | leshua_refund_id | 否 | 18 | string | 消费退货时提供乐刷生成的退货流水号 | +| 商户冲正id | merchant_reverse_id | 否 | 无 | string | 消费冲正时提供第三方传入的冲正订单号 | +| 到账标识 | t0 | 否 | 1 | String | 0:表示t1到账 1:表示t0到账; 刷卡交易时提供 | + +**返回参数** + +| **字段名** | **变量名** | +| --- | --- | +| 000000 | 通知成功,乐刷收到此返回后不会继续通知 | +| 其他 | 乐刷收到回复或者未收到回复,系统会再次通知 | + +##### 订单状态 + +| **值** | **说明** | +| --- | --- | +| 30 | 刷卡支付成功 | +| 31 | 刷卡撤销成功 | +| 32 | 刷卡退货成功 | +| 33 | 刷卡冲正成功 | +| 41 | 预授权成功 | +| 43 | 预授权撤销成功 | +| 45 | 预授权完成(请求)成功 | +| 47 | 预授权完成(通知)成功 | +| 49 | 预授权完成撤销成功 | + +### 7.4 刷卡交易查询 + +请求地址:/agentCardTransaction/cardFlowQuery + +加密规则: md5hex(代理商密钥+reqSerialNo+version+ data的 json 串) + +​ + +**请求参数:** + +| 名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 | +| --- | --- | --- | --- | --- | --- | +| version | string | 必须 | | 版本号 | | +| agentId | string | 必须 | | 代理商编号 | | +| sign | string | 必须 | | 验签值 | | +| reqSerialNo | string | 必须 | | 随机字符串,一般为一个和日期有关的随机数 | | +| data | object | 非必须 | | | | +| └merchantId | string | 必须 | | 商户号 | | +| └operation | string | 必须 | | 操作类型(query_by_order,query_by_transaction,query_by_third_order)) | | +| └orderId | string | 非必须 | | 订单编号 | | +| └transactionId | string | 非必须 | | 交易单号 | | +| └thirdOrderId | string | 非必须 | | 第三方订单号 | | + +**返回参数:** + +| 名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 | +| --- | --- | --- | --- | --- | --- | +| traceId | string | 必须 | | 请求序列号 | | +| code | integer | 必须 | | 错误码 | | +| message | string | 必须 | | 错误信息 | | +| data | object | 非必须 | | | | +| └orderId | string | 非必须 | | 乐刷订单号 | | +| └errorCode | integer | 非必须 | | 请求错误码,成功为0 | | +| └errorMsg | string | 非必须 | | 错误提示信息,成功时值为空 | | +| └thirdOrderId | string | 非必须 | | 商户内部订单号 | | +| └merchantId | string | 非必须 | | 乐刷商户号 | | +| └amount | integer | 非必须 | | 交易金额 | | +| └orderStatus | integer | 非必须 | | 订单状态,0-初始状态(可能交易失败);5-交易成功;11-交易失败;53-交易失败(冲正成功);54-交易结果未知(冲正失败);3-退款成功;32-退款失败;33-退款状态未知;4-退货成功;41-退货失败;42-退货状态未知 | | +| └batchNo | string | 非必须 | | POS交易批次号 | | +| └flowNo | string | 非必须 | | POS交易流水号 | | +| └sign | string | 非必须 | | 签名 | | +| └merchantName | string | 非必须 | | 乐刷商户名称 | | +| transactionsInfo | object [] | 非必须 | | 流水 | item 类型: object | +| └merchantId | string | 非必须 | | 乐刷商户号 | | +| └pinpadUuid | string | 非必须 | | 乐刷SN | | +| └channelMerchantId | string | 非必须 | | 通道商户号 | | +| └channelTerminalId | string | 非必须 | | 通道终端号 | | +| └operationType | integer | 非必须 | | 操作类型,与订单状态一致 | | +| └inputType | string | 非必须 | | 交易用卡方式:051-插卡有密交易;052-插卡无密交易;071-挥卡有密交易;072-挥卡无密交易; | | +| └cardBank | string | 非必须 | | 发卡行名称 | | +| └authorizeCode | string | 非必须 | | 交易授权码 | | +| └referenceNo | string | 非必须 | | 交易参考号 | | +| └cardId | string | 非必须 | | 交易卡号 | | +| └pinpadSn | string | 非必须 | | 机具终端硬件号TUSN | | +| └time | string | 非必须 | | 交易时间 | | +| └cardType | integer | 非必须 | | 卡类型:0(借记卡),2(贷记卡) | | +| └channelBatchNo | string | 非必须 | | 通道交易批次号 | | +| └channelFlowNo | string | 非必须 | | 通道交易流水号 | | +| └transactionId | string | 非必须 | | 乐刷流水号 | | +| └channelId | string | 非必须 | | 通道id | | +| └channelMerchantName | string | 非必须 | | 通道商户名称 | | +| └amount | string | 非必须 | | 流水金额 | | + +### 8、交易错误码信息参照表 + +| **错误码** | **描述** | +| --- | --- | +| -20001 | 参数错误或无效 | +| -20002 | 无效的乐刷商户号 | +| -20003 | 商户订单号格式有误 | +| -20004 | 乐刷订单不存在 | +| -20005 | 服务错误 | +| -20006 | 验签失败 | +| -20007 | 签名 Key 未配置 | +| -20008 | 支付类型错误 | +| -20009 | 订单金额填写有误 | +| -20010 | 系统错误 | +| -20011 | 非法参数 | +| -20012 | 授权码为空 | +| -20013 | 非法的授权码 | +| -20014 | 未知类型的授权码 | +| -20015 | 非法的公众号支付标识 | +| -20016 | 无效乐刷订单号 | +| -20018 | 无效的第三方订单号或者乐刷订单号 | +| -20019 | 订单状态不允许退款 | +| -20020 | 订单未退款 | +| -20021 | 用户名跟商户ID不匹配 | +| -20022 | 无效的第三方退款订单号 | +| -20023 | 订单可退余额不足 | +| -20024 | 乐刷或第三方订单号必填 1 个 | +| -20025 | 乐刷或第三方退款订单号必填 1 个 | +| -20026 | 第三方订单号在该商户号下已经存在 | +| -20027 | 该订单已支付 | +| -20028 | 订单支付失败,不能撤销 | +| -20029 | 该订单已退款 | +| -20030 | 该订单退款失败,不能撤销 | +| -20031 | 无效的机具 SN 编号,请联系客服 | +| -20032 | 机具 SN 跟商户无绑定关系 | +| -4027 | 系统异常 | +| -4006 | 订单不存在 | +| -1006 | 该订单号已被用 | +| -1002 | 无效商户号 | +| -2034 | 测试商户号金额限制 | +| -4004 | 订单正在处理中 | +| -5103 | 商户退款 id 已存在 | +| -5014 | 商户无退款权限 | +| -5015 | 暂不支持退款 | +| -5016 | 订单状态异常 | +| -5017 | 订单可退金额不足 | +| -5018 | 订单退款次数超限 | +| -5019 | 订单未发起退款 | +| -5020 | 接口不支持该功能 | +| -2125 | 交易被风控拦截 | + +| -5035 | 下单异常,可能原因有通道网络异常,通道状态异常,通道商户异常等 | +| --- | --- | + +以实际返回的错误提示(error_msg)为准 diff --git a/docs/联合收单接口文档/18-交易结算数据查询.md b/docs/联合收单接口文档/18-交易结算数据查询.md new file mode 100644 index 0000000..7a1d864 --- /dev/null +++ b/docs/联合收单接口文档/18-交易结算数据查询.md @@ -0,0 +1,112 @@ +# 交易结算数据查询 + +> 来源: + +通过此接口 查询订单交易结算信息 , 查询跨度不允许超过30天, 不支持跨年查询 + +> 💡 注意,结算数据根据订单的实际结算时间生成 +> + +> - URL:/open-api/merchantV2/tradeDetail/listTradeDetail +> - **Method**:POST +> + +​ + +#### 业务请求参数 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| startTime | string | M | 交易开始时间(交易开始时间必传) | +| endTime | string | M | 交易结束时间(交易结束时间必传) | +| orderId | string | O | 乐刷订单号 | +| pageNo | Integer | M | 当前页 | +| pageSize | Integer | M | 每页大小 | + +#### 返回值 + +| 参数 | 类型 | 是否必须 | 说明 | +| --- | --- | --- | --- | +| merchantId | String | M | 商户编号 | +| merchantName | String | M | 商户名称 | +| agentId | String | M | 直属代理编号 | +| topAgentId | String | M | 一级代理编号 | +| keeperId | String | M | 业务员编号 | +| transactionId | String | M | 交易流水号 | +| orderId | String | M | 订单编号 | +| time | String | M | 交易时间 | +| posSn | String | M | pos_sn | +| pinpadUuid | String | M | 乐刷sn | +| qrcodeNo | String | M | 码牌编号 | +| amount | Integer | M | 交易金额(单位:分) | +| cardType | Integer | M | 刷卡交易卡类型:0-借记卡,2-贷记卡,3-境外卡,4未知 | +| state | Integer | M | 交易状态:-1 未知,0 交易初始,5 支付成功,11 支付失败,3 退款成功,31 退款中,32 退款失败,40 预授权成功,41 预授权失败,42 预授权撤销成功,43 预授权撤销失败,44 预授权完成成功,45 预授权完成失败,48 预授权完成撤销成功,49 预授权完成撤销失败,50 预授权完成中间状态,51 预授权中间状态,52 预授权撤销中间状态,53 预授权完成撤销状态,54 预授权完成退款订单 | +| tradeType | Integer | M | 交易类型:1-支付, 2-退款 | +| payType | Integer | M | 支付方式:1-刷卡,2-微信,3-支付宝,6-银联二维码 | +| t0Flag | Integer | M | t0标识: 1、t0 ; 0 T1 | +| attach | String | M | 备注信息 | +| settleAmount | Integer | M | 结算金额(分) | +| feeRate | Integer | M | 手续费费率(百万分之一) | +| feeFixed | Integer | M | 商户固定手续费,单位:万分之一分 | +| merchantFee | Integer | M | 手续费(分) | + +#### 请求示例 + +```json +{ + "sign": "gLjW4s3EBSIvDxYa1mFauv2XrkSuSnblOLbigmIxPVE=", + "merchantId": "3131014839", + "reqSerialNo": "202307010921000007", + "timestamp": "1689844373531", + "data": { + "pageNo": 1, + "pageSize": 10, + "startTime": "2023-05-09 00:00:00", + "endTime": "2023-05-09 23:59:59" + } +} +``` + +#### 成功响应 + +> **条件**:请求参数合法,并且数据校验通过。 +> +> **状态码:**`0 OK` +> +> **响应示例:** +> + +```json +{ + "error_code": "0", + "error_msg": "success", + "count": 61, + "data": [ + { + "merchantId": "3131014839", + "merchantName": "孤独荒迪", + "agentId": "1923721", + "topAgentId": "1923721", + "keeperId": "1923721001", + "transactionId": "0000000283903146", + "orderId": "0000000283903146", + "time": "2022-05-26 16:02:09", + "posSn": "", + "pinpadUuid": "", + "qrcodeNo": "", + "amount": 1, + "cardType": 0, + "state": 5, + "tradeType": 1, + "payType": 2, + "t0Flag": 0, + "attach": "扫码收款备注", + "settleAmount": 0, + "feeRate": 0, + "feeFixed": 0, + "merchantFee": 0, + "profitAmount": 0 + } + ] +} +``` diff --git a/docs/联合收单接口文档/README.md b/docs/联合收单接口文档/README.md new file mode 100644 index 0000000..1f20c40 --- /dev/null +++ b/docs/联合收单接口文档/README.md @@ -0,0 +1,25 @@ +# 联合收单接口文档 + +语雀链接: + +## 目录 + +- SDK&Demo (私有/无法匿名读取) + - Java-sdk文档 (私有/无法匿名读取) +- 接入前必看-接入流程 (私有/无法匿名读取) +- [代理商维度接入 <-这里可点](04-代理商维度接入-这里可点.md) + - [基础接口](05-基础接口.md) + - [商户进件](06-商户进件.md) + - [商户交易](07-商户交易.md) + - [交易结算数据查询、推送](08-交易结算数据查询-推送.md) + - [码牌管理](09-码牌管理.md) + - [代理商管理](10-代理商管理.md) + - [获取对账文件](11-获取对账文件.md) + - 对账单申请流程 (私有/无法匿名读取) + - [对账单相关说明](13-对账单相关说明.md) + - [http获取对账单下载链接API文档](14-http获取对账单下载链接API文档.md) +- [商户维度接入](15-商户维度接入.md) + - [基础接口](16-基础接口.md) + - [商户交易](17-商户交易.md) + - [交易结算数据查询](18-交易结算数据查询.md) +- 内部对接人员指引(不公开) (私有/无法匿名读取)