生鲜应用对接¶
1. 阅读对象¶
本文档的阅读对象为合作方的产品研发人员。
2. 统一语言¶
| 名词 | 说明 |
|---|---|
| 合作方 | 提供生鲜服务的平台。 |
3. 业务描述¶
本文档使用生鲜应用对接项目。
用户从关爱通侧跳转到合作方的应用里完成交易。
交易中扣减用户在关爱通侧的资产(技术对接完成)。
合作方需要将交易相关明细通过本文档描述的接口推送关爱通。

4. 通用协议¶
4.1. 对接准备¶
● 关爱通给合作方开通测试环境的 appid 和 appsecret
● 关爱通协助合作方完成开发者授权
● 文档中涉及的金额单位统一为元,并保留2为小数
4.2. 基本信息¶
对接都是基于关爱通的开放平台完成,因此可了解关爱通开放平台的一些内容:
4.3. 接口协议¶
除了标准支付(跳关爱通收银台),其他接口基于 JSON 数据格式,https 安全加密传输协议。
公共入参请查看:公共参数 - 关爱通开放平台
公共返回参数如下:
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 |
|---|---|---|---|---|
| code | 是 | Integer | [1,10] | 错误码,为 0 则表示成功。 |
| msg | 是 | String | [0, 128] | 具有可读性的请求结果信息。 |
| data | 是 | Object | 具体业务返回内容,以 JSON 格式组织。 |
下文接口说明里只描述业务有关的入参数据和返回内容里 data 数据。
有些接口需要额外申请开通。
5. 业务接口¶
5.1. 标准支付¶
接口路径:¶
/seller/v3/pay/excashier
ContentType:¶
application/json
HTTP请求方式:¶
POST
接口说明: 当用户在合作方侧下单后,到支付环节时,合作方通过该接口唤起关爱通的收银台。
请求入参:¶
-
公有参数
发送请求是必须传入公共参数,详见公共参数
-
私有参数
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 |
|---|---|---|---|---|
| outerTradeNo | 是 | String | [2,50] | 外部交易号,请以appid开头 |
| timeOrdered | 是 | string | 50 | 下单时间,格式(yyyy-MM-dd HH:mm:ss) |
| buyerOpenId | 是 | String | 32 | 下单员工唯一标识 |
| reason | 否 | String | [0,245] | 买家备注 |
| totalAmount | 是 | BigDecimal | (10, 2) | 订单总金额(含运费),支付的总金额 |
| tradeInfo | 否 | Object | 订单信息 | |
| attach | 否 | string | [0,100] | 附加信息,原样返回,复杂参数建议urlencode |
| tradeType | 否 | int | 1 | 交易类型 1即时交易 2非即时交易 默认为即时交易 |
| returnUrl | 是 | string | [1,254] | 支付完成后,跳转的商家订单显示URL |
| notifyUrl | 是 | string | [1,254] | 商家提供的notifyUrl。订单完成后,关爱通会对此URL进行请求,通知商家订单成功 |
| expireTime | 否 | string | [0,50] | 订单支付超时时间,格式(yyyy-MM-dd HH:mm:ss) |
| provinceCode | 否 | string | [0,50] | 消费省会编码 |
| provinceName | 否 | String | [0,50] | 消费省会 |
| cityCode | 否 | string | [0,50] | 消费城市编码 |
| cityName | 否 | String | [0,50] | 消费城市 |
| locationCode | 否 | string | [0,50] | 消费地区编码 |
| locationName | 否 | String | [0,50] | 消费地区 |
| shopName | 否 | String | [0,100] | 商家名称 |
| shopPhone | 否 | String | [0,50] | 商家电话 |
| shopAddress | 否 | String | [0,500] | 商家地址 |
| poiCateCode | 否 | String | [0,100] | 商家一级品类code |
| poiCateDesc | 否 | String | [0,100] | 商家一级品类名称 |
| poi2ndCateCode | 否 | String | [0,100] | 商家二级品类code |
| poi2ndCateDesc | 否 | String | [0,100] | 商家二级品类名称 |
| poi3rdCateCode | 否 | String | [0,100] | 商家三级品类code |
| poi3rdCateDesc | 否 | String | [0,100] | 商家三级品类名称 |
| recipientName | 否 | String | [0,50] | 收货人名称 |
| recipientPhone | 否 | String | [0,50] | 收货人电话 |
| recipientAddress | 否 | String | [0,500] | 收货人地址 |
TradeInfo对象
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 |
|---|---|---|---|---|
| thirdTradeNo | 是 | string | [1,50] | 第三方订单号 |
| thirdTotalAmount | 是 | decimal | [0.01,99999999.99] | 订单总金额 |
| thirdPayAmount | 是 | decimal | [0.01,99999999.99] | 支付总金额 |
| thirdCostAmount | 是 | decimal | [0.00,99999999.99] | 结算总成本价 |
| thirdDeliveryFee | 否 | decimal | [0.00,99999999.99] | 有运费必填 运费 |
| isThirdOrders | 是 | int | 1 | 是否有子订单 1有 2无 |
| thirdOrders | 否 | object | 无 | 有子订单必填。子订单信息列表,List |
| goodsDetail | 否 | object | 无 | 无子订单必填。商品信息列表,List |
注意 在返点模式下: thirdPayAmount与thirdCostAmount金额要保持一致
ThirdOrder对象
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 |
|---|---|---|---|---|
| outerTradeNo | 是 | String | [2,50] | 子订单的外部交易号,请以appid开头,不能与主订单一致 |
| thirdSubTradeNo | 是 | string | [1,50] | 第三方子订单编号 |
| thirdSubDeliveryFee | 否 | decimal | [0.00,99999999.99] | 有运费必填 运费 |
| thirdSubTotalAmount | 是 | decimal | [0.01,99999999.99] | 子订单原金额 |
| thirdSubPayAmount | 是 | decimal | [0.01,99999999.99] | 子订单原支付金额 |
| thirdSubCostAmount | 是 | decimal | [0.00,99999999.99] | 子订单原结算成本价 |
| goodsDetail | 是 | object | 无 | 商品信息列表,List |
GoodsDetail数据:
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 | 示例 |
|---|---|---|---|---|---|
| skuCode | 是 | String | [1, 50] | 商品编码 | 100013952938 |
| skuName | 是 | String | [1, 50] | 商品名称 | 蒙牛 特仑苏脱脂纯牛奶 每100ml含3.6g乳蛋白 送礼推荐 250ml×16 礼盒装 |
| skuCateCode | 否 | String | [0,100] | 商品一级品类code | |
| skuCateDesc | 否 | String | [0,100] | 商品一级品类名称 | |
| sku2ndCateCode | 否 | String | [0,100] | 商品二级品类code | |
| sku2ndCateDesc | 否 | String | [0,100] | 商品二级品类名称 | |
| sku3rdCateCode | 否 | String | [0,100] | 商品三级品类code | |
| sku3rdCateDesc | 否 | String | [0,100] | 商品三级品类名称 | |
| quantity | 是 | Integer | 32 | 数量 | 1 |
| price | 是 | BigDecimal | (10, 2) | 商品单价 | 115.35 |
| taxRate | 否 | BigDecimal | (10, 2) | 税率 | 13 |
| taxCode | 否 | String | [1, 50] | 税收分类编码 | 1060406010000000000 |
| taxUnit | 否 | String | [1, 20] | 开票单位 | 件 |
| invoiceType | 否 | Integer | 32 | 发票类型 (1:普票 2:专票) | 2 |
| amount | 是 | BigDecimal | (10, 2) | 商品金额(price * quantity) | 115.35 |
| gatAmount | 是 | BigDecimal | (10, 2) | 关爱通资产支付金额 | 115.35 |
| costAmount | 是 | BigDecimal | (10, 2) | 关爱通结算价 | 115.35 |
| freight | 否 | BigDecimal | (10, 2) | 运费(非单个商品的运费) | 8 |
5.1.1. 返回示例¶
{
"code": 0,
"msg": "OK",
"data": {
"outerTradeNo":"200913220230728003450944707739",
"redirectUrl":"https://excashier.guanaitong.com/entry?reason=%E5%8F%AE%E5%92%9A%E4%B9%B0%E8%8F%9C-2307281159271857739&outer_trade_no=200913220230728003450944707739&owner_id=xxx&sign=8810E9B3888D5923763DF8C648F4FEA771D7DA74&source_appid=20091322&signtype=SHA1¬ify_url=https%3A%2F%2Fopenapi.guanaitong.com%2Fseller%2Fpay%2FnotifyUrl&encoding=UTF-8&output=JSON&point_payer_id=xxx&total=44.00&issync=2&apiname=gat.account.pay&v=3.0&appid=20091322&return_url=https%3A%2F%2Fopenapi.guanaitong.com%2Fseller%2Fpay%2FreturnUrl&point_payee_id=%E5%8F%AE%E5%92%9A%E4%B9%B0%E8%8F%9C%E7%9B%B4%E8%BF%9E×tamp=20230728112919"
}
}
说明¶
合作方拿到回调地址,进行302跳转
5.1.2. 跳回商家(return_url)¶
从关爱通收银台,跳回商家页面
请求URL¶
调用支付接口时,填写的return_url
HTTP请求方式¶
GET 跳转页面
输入参数说明¶
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| appid | string | 应用appid |
| outer_trade_no | string | 跳转收银台时传递的外部交易号 |
| attach | string | 前面附带的信息 |
| pay_result | string | success成功 fail 失败 |
| timestamp | string | 时间戳,其值为1970-1-01 00:00:00.000到当前时刻的时间距离,单位是秒,时区为GMT+8(东八区)。如1469691921。关爱通接口允许的时间戳偏差为5分钟,偏差超过5分钟的请求将被拒绝。 |
| sign | string | 签名,见 签名机制 |
请求示例(浏览器URL)为:¶
https://test.guanaitong.com/?outer_trade_no=100000010000000001&appid=10000001&
timestamp=1537253931&sign=c9a7ede47d9f40a599d76e98a8c8a039d7ae4e2d&pay_result=success
跳转说明¶
(1)用户支付完成后,会跳转到商家填写的return_url地址; (2)商家根据outerTradeNo进入订单支付中的页面; (3)商家服务端等待来自关爱通的notify通知,更新订单状态后,页面改为订单成功;
5.1.3.支付回调(notify_url)¶
请求URL¶
调用支付接口时,填写的notify_url
HTTP请求方式¶
POST
输入参数说明¶
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| appid | string | 应用appid |
| outer_trade_no | string | 外部交易号 |
| buyer_open_id | string | 下单人open_id |
| attach | string | 前面附带的信息 |
| total_amount | decimal | 下单金额 |
| trade_no | string | 关爱通交易号 |
| timestamp | string | 时间戳,其值为1970-1-01 00:00:00.000到当前时刻的时间距离,单位是秒,时区为GMT+8(东八区)。如1469691921。关爱通接口允许的时间戳偏差为5分钟,偏差超过5分钟的请求将被拒绝。 |
| sign | string | 签名,见 签名机制 |
请求示例¶
POST 商家URI,如:/syncPay/notify HTTP/1.1
Host: 商家域名,如:test.guanaitong.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
appid=10000001&outer_trade_no=100000010000000001&total_amount=100.00&
buyer_open_id=d87797eea12a2f80ad72ed93214a0908&trade_no=2018070920000005&
timestamp=1531120153&sign=31f531d0ca40e6d7fb02688564f637f458e63ec8
返回参数说明¶
- notify只有在关爱通订单成功后才会发送;
- 商家在收到了请求、校验通过后,请即时更新自己的订单状态,并返回success(不要带任何其他源码内容);
- 若关爱通的notify请求无响应或者接收的内容不是“success”,则认为通知失败,等一段时间后会再次请求(notify请求会在此后24小时内按递增时间间隔继续发送通知);
- notify仅为通知,不论第三方返回成功或失败,都不会改变关爱通的订单状态;
正确返回示例¶
错误返回示例¶
5.2. 标准退款¶
接口路径:¶
/seller/v3/pay/syncRefund
ContentType:¶
application/json
HTTP请求方式:¶
POST
请求入参:¶
-
公有参数
发送请求是必须传入公共参数,详见公共参数
-
私有参数
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 |
|---|---|---|---|---|
| outerTradeNo | 是 | string | [2,50] | 外部交易号,请以appid开头,例如:10000001101 |
| outerRefundNo | 是 | string | [2,50] | 外部退款号,请以appid开头,例如:10000001201 |
| reason | 是 | string | [1,254] | 退款原因 |
| refundAmount | 是 | decimal | [0.01,99999999.99] | 本次退款的总金额 |
| costAmount | 否 | BigDecimal | (10, 2) | 结算价(差价结算时需要,具体咨询关爱通对接人员) |
| deliveryFee | 否 | decimal | [0.01,99999999.99] | 运费(结算价包含运费时,该字段不用传递) |
| notifyUrl | 否 | string | [1,254] | 通知url,非必填,退款完成时进行通知结果,与同步返回结果一致 |
| tradeInfo | 否 | Object | 订单信息 | |
| provinceCode | 否 | Long | 64 | 消费省会编码 |
| provinceName | 否 | String | [0,50] | 消费省会 |
| cityCode | 否 | Long | 64 | 消费城市编码 |
| cityName | 否 | String | [0,50] | 消费城市 |
| locationCode | 否 | Long | 64 | 消费地区编码 |
| locationName | 否 | String | [0,50] | 消费地区 |
| shopName | 否 | String | [0,100] | 商家名称 |
| shopPhone | 否 | String | [0,50] | 商家电话 |
| shopAddress | 否 | String | [0,500] | 商家地址 |
| poiCateCode | 否 | Long | 64 | 商家一级品类code |
| poiCateDesc | 否 | String | [0,100] | 商家一级品类名称 |
| poi2ndCateCode | 否 | Long | 64 | 商家二级品类code |
| poi2ndCateDesc | 否 | String | [0,100] | 商家二级品类名称 |
| poi3rdCateCode | 否 | Long | 64 | 商家三级品类code |
| poi3rdCateDesc | 否 | String | [0,100] | 商家三级品类名称 |
| recipientName | 否 | String | [0,50] | 收货人名称 |
| recipientPhone | 否 | String | [0,50] | 收货人电话 |
| recipientAddress | 否 | String | [0,500] | 收货人地址 |
TradeInfo对象
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 |
|---|---|---|---|---|
| thirdTradeNo | 是 | string | [1,50] | 第三方订单号 |
| thirdRefundNo | 是 | string | [1,50] | 第三方退款单号 |
| thirdRefundAmount | 是 | decimal | [0.01,99999999.99] | 退款总金额 |
| thirdCostAmount | 是 | decimal | [0.00,99999999.99] | 结算总成本价 |
| thirdDeliveryFee | 否 | decimal | [0.00,99999999.99] | 有运费必填 运费 |
| isThirdOrders | 是 | int | 1 | 是否有子订单 1有 2无 |
| thirdOrders | 否 | object | 无 | 有子订单必填。子订单信息列表,List |
| goodsDetail | 否 | object | 无 | 无子订单必填。商品信息列表,List |
注意 在返点模式下: thirdPayAmount与thirdCostAmount金额要保持一致
ThirdOrder对象:
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 |
|---|---|---|---|---|
| outerTradeNo | 是 | String | [2,50] | 子订单的外部交易号,请以appid开头 |
| thirdSubTradeNo | 是 | string | [1,50] | 第三方子订单编号 |
| thirdSubRefundNo | 是 | string | [1,50] | 第三方子订单退款单号 |
| thirdSubDeliveryFee | 否 | decimal | [0.00,99999999.99] | 有运费必填 运费 |
| thirdSubRefundAmount | 是 | decimal | [0.01,99999999.99] | 子订单退款金额 |
| thirdSubCostAmount | 是 | decimal | [0.00,99999999.99] | 子订单原结算成本价 |
| goodsDetail | 是 | object | 无 | 商品信息列表,List |
GoodsDetail数据:
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 | 示例 |
|---|---|---|---|---|---|
| skuCode | 是 | String | [1, 50] | 商品编码 | 100013952938 |
| skuName | 是 | String | [1, 50] | 商品名称 | 蒙牛 特仑苏脱脂纯牛奶 每100ml含3.6g乳蛋白 送礼推荐 250ml×16 礼盒装 |
| skuCateCode | 否 | Long | 64 | 商品一级品类code | |
| skuCateDesc | 否 | String | [0,100] | 商品一级品类名称 | |
| sku2ndCateCode | 否 | Long | 64 | 商品二级品类code | |
| sku2ndCateDesc | 否 | String | [0,100] | 商品二级品类名称 | |
| sku3rdCateCode | 否 | Long | 64 | 商品三级品类code | |
| sku3rdCateDesc | 否 | String | [0,100] | 商品三级品类名称 | |
| quantity | 是 | Integer | 32 | 数量 | 1 |
| price | 是 | BigDecimal | (10, 2) | 商品单价 | 115.35 |
| taxRate | 否 | BigDecimal | (10, 2) | 税率 | 13 |
| taxCode | 否 | String | [1, 50] | 税收分类编码 | 1060406010000000000 |
| taxUnit | 否 | String | [1, 20] | 开票单位 | 件 |
| invoiceType | 否 | Integer | 32 | 发票类型 (1:普票 2:专票) | 2 |
| amount | 是 | BigDecimal | (10, 2) | 商品金额(price * quantity) | 115.35 |
| gatAmount | 是 | BigDecimal | (10, 2) | 关爱通资产支付金额 | 115.35 |
| costAmount | 是 | BigDecimal | (10, 2) | 关爱通结算价 | 115.35 |
| freight | 否 | BigDecimal | (10, 2) | 运费(非单个商品的运费) | 8 |
5.3. 完成订单¶
接口路径:¶
/seller/v3/pay/complete
ContentType:¶
application/json
HTTP请求方式:¶
POST
请求入参:¶
-
公有参数
发送请求是必须传入公共参数,详见公共参数
-
私有参数
| 参数名称 | 是否必须 | 参数类型 | 长度限制 | 描述 |
|---|---|---|---|---|
| outerTradeNo | 是 | string | [2,50] | 外部交易号,请以appid开头,例如:10000001101 |
| completeTime | 是 | string | [1,50] | 完成时间,格式(yyyy-MM-dd HH:mm:ss) |
6. 测试场景¶
请查看测试场景