以接口的形式对哈哈便利的无人售货柜进行开门、结算、查询业务数据等。
库存管理:哈哈不维护API商家的库存信息。如商家对库存有要求,请上货时自行保存商品的库存数量,并根据识别结果对库存进行增减。
业务流程:用户扫码后商户端自行决定是否可开门(比如判断是否签约免密支付,或者用户余额是否足够)。开门时,设备的开门和关门或者发生错误状态信息,识别完成后,识别的结果,生成订单时,订单信息,都会通过消息通知给商户。商户需要自行免密签约、免密扣款等。所以一般来说,需要商户端开通支付宝和微信的免密支付才能接入本接口。
定位人群:哈哈便利接口文档是面向具有一定的网站或APP开发能力,了解 ASP、PHP、JAVA、ASP.NET 等开发语言中的一种及 SQL 数据库语言的网站开发、维护和管理人员。
联系哈哈运营人员开通您的商家账户的API功能。
地址要求:
(系统交互流程示意图 - 描述商户系统、哈哈平台、设备之间的交互关系)
基本规范:
域名地址:
签名说明: 为保证接口安全,所有接口调用都需要进行签名验证。
签名算法:
示例:
原始参数:
access_token=abc123
page_no=1
page_size=20
AppSecret=secret_key
排序后拼接:
access_token=abc123&page_no=1&page_size=20&appsecret=secret_key
MD5加密后得到 sign 值
简要描述:获取访问令牌,用于后续所有API调用的身份验证。
请求URL:http://api.hahabianli.com/login/getToken
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| appid | 是 | string | 商家应用ID,在商家后台获取 |
| appsecret | 是 | string | 商家应用密钥,在商家后台获取 |
| sign | 是 | string | 签名,签名算法见2.2章节 |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"access_token": "169efc8ffe416006910bd606380782148b7587f7",
"expires_in": 1296000
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 返回码,1表示成功,其他表示失败 |
| info | string | 返回信息 |
| access_token | string | 访问令牌,有效期内可重复使用 |
| expires_in | int | 过期时间,单位:秒(15天 = 1296000秒) |
备注:
通用错误码:
| 错误码 | 说明 | 处理方案 |
|---|---|---|
| 1 | SUCCESS | 操作成功 |
| 0 | FAIL | 操作失败 |
| -1 | 参数错误 | 检查请求参数是否完整且正确 |
| -2 | 签名错误 | 检查签名算法和密钥是否正确 |
| -3 | access_token无效 | 重新获取access_token |
| -4 | access_token过期 | 重新获取access_token |
| -5 | 权限不足 | 联系运营人员开通相应权限 |
| -6 | 请求频率超限 | 降低请求频率 |
| -7 | 系统繁忙 | 稍后重试 |
| -100 | 设备不存在 | 检查设备ID是否正确 |
| -101 | 设备离线 | 等待设备上线后重试 |
| -102 | 设备故障 | 联系设备维护人员 |
| -103 | 设备正在使用中 | 等待当前购物结束后重试 |
| -200 | 商品不存在 | 检查商品ID是否正确 |
| -300 | 订单不存在 | 检查订单号是否正确 |
简要描述:获取商家的设备列表。
请求URL:http://api.hahabianli.com/device/getlist
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| page_no | 是 | int | 第几页,如:1,表示第一页 |
| page_size | 是 | int | 每页多少条,如:20 表示每页20条数据 |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": [
{
"id": "device001",
"name": "测试设备1",
"address": "北京市朝阳区XXX大厦1层",
"status": "1"
},
{
"id": "device002",
"name": "测试设备2",
"address": "北京市海淀区XXX商场2层",
"status": "1"
}
]
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | string | 设备ID |
| name | string | 设备名称 |
| address | string | 设备地址 |
| status | string | 设备状态 (1: 正常, 2: 冻结) |
备注:
简要描述:查询设备是否为多门单开。如果只有单门柜可忽略此接口。
多门单开定义:
请求URL:http://api.hahabianli.com/device/isMultiDoorUnique
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"multi_door_unique": 2
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| multi_door_unique | int | 是否为多门单开:0-非多门单开,2-双门单开,3-三门单开,4-四门单开 |
备注:
简要描述:调用此接口实现设备开门功能。
请求URL:http://api.hahabianli.com/device/open
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
| out_trade_no | 是 | string | 商户订单号,由商户生成,全局唯一 |
| door_index | 否 | int | 门编号,多门单开设备必传。0或不传表示A门,1表示B门 |
返回示例:
{
"code": 1,
"info": "开门成功",
"data": {
"order_no": "HH202401240001"
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| order_no | string | 哈哈平台订单号 |
备注:
简要描述:哈哈平台通过此接口推送各类消息通知给商户,所有消息类型通过 notify_type 字段区分。
通知URL:商户在后台配置的消息回调地址(统一入口)
请求方式:POST
通用参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| notify_type | 是 | string | 通知类型,用于区分具体的消息类型 |
| sign | 是 | string | 签名,验证请求来源 |
触发条件:在设备开门成功、关门成功或开门失败时推送
参数说明:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| notify_type | 是 | string | 固定值:DEVICE_STATUS |
| activity_id | 是 | string | 活动编号,如:1712271138560743 |
| create_time | 是 | int | 创建时间戳,如:1633745862 |
| device_id | 是 | string | 设备号,如:D00003 |
| open_type | 是 | string | IN(补货),OUT(消费) |
| out_user_id | 是 | string | 外部用户id |
| user_id | 是 | string | 用户id |
| status | 是 | string | 开门结果:1=ERROR(开门失败),2=OPENED(门已开),3=CLOSED(门已关),4=ANOTHER(设备繁忙) |
| sign | 是 | string | 签名 |
回调示例:
Array (
[activity_id] => "1712271138560743",
[create_time] => 1633745862,
[device_id] => "D00003",
[notify_type] => "DEVICE_STATUS",
[status] => "OPENED",
[open_type] => "OUT",
[out_user_id] => "20210918001",
[user_id] => "2109181628353272",
[sign] => "c9e3b08303408347ae350ab2c8a22a05"
)
返回要求:
success
触发条件:设备在线状态发生变化时推送(需联系运营开通权限)
参数说明:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| notify_type | 是 | string | 固定值:ONLINE_STATUS |
| device_id | 是 | string | 设备编号 |
| is_online | 是 | int | 设备在线状态:0=不在线,1=在线 |
| signal_val | 否 | array | 信号值:上线时近两次上报信号值(is_online=1时有值) |
| ping_val | 否 | array | 延时值:上线时近两次上报延时值(is_online=1时有值) |
| sign | 是 | string | 签名 |
signal_val 和 ping_val 数组结构:
[
{
"occur_time": 1573401600,
"value": "1"
},
{
"occur_time": 1573401600,
"value": "1"
}
]
回调示例:
Array (
[device_id] => "D00085",
[is_online] => 1,
[notify_type] => "ONLINE_STATUS",
[signal_val] => array:2 [
0 => array:2 [
"occur_time" => 1573401600
"value" => "1"
]
1 => array:2 [
"occur_time" => 1573401600
"value" => "1"
]
],
[ping_val] => array:2 [
0 => array:2 [
"occur_time" => 1573401600
"value" => "1"
]
1 => array:2 [
"occur_time" => 1573401600
"value" => "1"
]
],
[sign] => "c9e3b08303408347ae350ab2c8a22a05"
)
返回要求:
success
触发条件:设备音量调节成功时推送
参数说明:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| notify_type | 是 | string | 固定值:VOICE_RESULT |
| device_id | 是 | string | 设备号,如:D00003 |
| voice | 是 | number | 音量值,为 0~15 的数字 |
| sign | 是 | string | 签名 |
回调示例:
Array (
[notify_type] => "VOICE_RESULT",
[device_id] => "B1507",
[voice] => 6,
[sign] => "819bb39c0a93c05e485568083a6c8784"
)
返回要求:
success
触发条件:新品审核完成时推送
参数说明:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| notify_type | 是 | string | 固定值:CLIENT_NEW_PRODUCT |
| status | 是 | integer | 审核状态:1=已通过,2=已拒绝,3=已上架 |
| reject_reason | 是 | string | 被拒绝原因 |
| id | 是 | string | 新品申请唯一编码 |
| msg | 是 | string | 审核结果信息 |
| name | 是 | string | 商品名称 |
| bar_code | 是 | string | 条形码 |
| code | 是 | string | 商品code标识符(拒绝时为空,通过时不为空) |
| product_extends | 否 | string | 扩展字段信息 |
| sign | 是 | string | 签名 |
回调示例:
Array (
[bar_code] => "20210913006",
[id] => "20315850049321972025",
[msg] => "已拒绝",
[name] => "哈哈api测试新品申请",
[notify_type] => "CLIENT_NEW_PRODUCT",
[reject_reason] => "商品名称不合规范,请参考示例,重新编辑商品名称",
[status] => 2,
[code] => "",
[product_extends] => "1212374",
[sign] => "fba0b9b78efd190c4858c88afb488c93"
)
返回要求:
success
触发条件:商品合并操作完成时推送
参数说明:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| notify_type | 是 | string | 固定值:MERGE_PRODUCT |
| list | 是 | array | 商品合并列表 |
| sign | 是 | string | 签名 |
list 数组元素说明:
main_code (string): 主商品code,正常使用的商品codeproduct_code (string): 合并的相同商品的code,除主商品code外,同组其他商品code将不再使用list 示例:
[
{
"main_code": "dongpengteyinpingzhuang",
"product_code": "dpty8988,dpty6525,dpty500ml"
},
{
"main_code": "hongshiliubaiputaoguozhi",
"product_code": "hongshiliuputao,hongshiliubaiputaoguozhi"
}
]
回调示例:
{
"list": [
{
"main_code": "dongpengteyinpingzhuang",
"product_code": "dpty8988,dpty6525,dpty500ml,dongpemg500ml,dongpengteyinpingzhuang"
},
{
"main_code": "hongshiliubaiputaoguozhi",
"product_code": "hongshiliuputao,hongshiliubaiputaoguozhi"
}
],
"notify_type": "MERGE_PRODUCT",
"sign": "fba0b9b78efd190c4858c8xxxxxxxxxx"
}
返回要求:
success
触发条件:AI识别完成后推送识别结果
参数说明:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| notify_type | 是 | string | 固定值:ORC_RESULT |
| activity_id | 是 | string | 活动编号,如:1712271138560743 |
| device_id | 是 | string | 设备号,如:D00003 |
| result | 是 | string(JSON) | 识别结果,包含type、data、excepts |
| sku_list | 是 | string(JSON) | 商品SKU列表 |
| out_user_id | 是 | string | 商家用户编号 |
| source | 是 | string | 请求开门接口时传入的source |
| nobuy | 是 | int | 是否有消费:1=无消费,0=有消费 |
| resource_info | 是 | string(JSON) | 视频或图片信息 |
| sign | 是 | string | 签名 |
result 字段说明:
{
"type": "OUT", // IN(补货) 或 OUT(消费)
"data": { // 商品code:数量,正数为上货,负数为消费
"longfu": -2,
"naicha": -4,
"abnormal": -1, // 异常商品(excepts=6)
"unfriendly": -1, // 非友好购物(excepts=1,2)
"unknow": -1, // 商品不在模板(excepts=5)
"unrecognized": -1 // 无法判断订单(excepts=7)
},
"excepts": [1, 2, 5, 6, 7] // 异常枚举值
}
excepts 枚举值说明:
sku_list 字段说明:
[
{
"sku": "naicha01", // 商家自定义商品编号
"number": -1, // 商品数量,减少为负,增加为正
"code": "naicha" // 哈哈商品编码
},
{
"sku": "unknow01",
"number": -2,
"code": "unknow"
}
]
resource_info 字段说明:
{
"device_type": 1,
"video_url": "http://img.hahabianli.com/buyvideo/20210906/170309_1130918988346058398_0.mp4"
}
返回要求:
success
回调示例:
Array (
[activity_id] => "1712271138560743",
[device_id] => "D00003",
[notify_type] => "ORC_RESULT",
[result] => '{"type":"OUT","data":{"longfu":-2,"naicha":-4,"abnormal":-1,"unfriendly":-1},"excepts":[1,2,5,6]}',
[sku_list] => '[{"sku":"naicha01","number":-1,"code":"naicha"},{"sku":"unknow01","number":-2,"code":"unknow"}]',
[out_user_id] => '123456',
[source] => 'XXX',
[nobuy] => '0',
[resource_info] => '{"device_type":1,"video_url":"http://img.hahabianli.com/buyvideo/20210906/170309_1130918988346058398_0.mp4"}',
[sign] => "eb17ae3ae97600f2b357dc598f86b6c1"
)
备注:
简要描述:用于刷卡设备,验证用户刷卡信息是否有效。
请求URL:http://api.hahabianli.com/device/cardVerify
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
| card_no | 是 | string | 卡号 |
| card_type | 是 | int | 卡类型:1-IC卡,2-身份证,3-其他 |
返回示例:
{
"code": 1,
"info": "验证成功",
"data": {
"can_open": true,
"user_info": {
"name": "张三",
"phone": "138****1234"
}
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| can_open | boolean | 是否允许开门 |
| user_info | object | 用户信息(可选) |
简要描述:查询设备当前在线状态。
请求URL:http://api.hahabianli.com/device/onlineStatus
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"online_status": 1,
"last_online_time": "2024-01-24 15:30:00"
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| online_status | int | 在线状态:0-离线,1-在线 |
| last_online_time | string | 最后在线时间 |
简要描述:调节设备播报音量。
请求URL:http://api.hahabianli.com/device/setVolume
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
| volume | 是 | int | 音量值:0-100,0表示静音,100表示最大音量 |
返回示例:
{
"code": 1,
"info": "设置成功"
}
简要描述:查询设备和门锁的实时状态。
请求URL:http://api.hahabianli.com/device/status
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"device_status": 1,
"door_status": 0,
"lock_status": 1,
"camera_status": 1,
"network_status": 1
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| device_status | int | 设备状态:0-离线,1-在线,2-故障 |
| door_status | int | 门状态:0-关闭,1-打开 |
| lock_status | int | 锁状态:0-未锁,1-已锁 |
| camera_status | int | 摄像头状态:0-异常,1-正常 |
| network_status | int | 网络状态:0-断开,1-连接 |
简要描述:获取指定设备可售卖的商品列表。
请求URL:http://api.hahabianli.com/goods/deviceGoodsList
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": [
{
"goods_id": "goods001",
"goods_name": "可口可乐",
"barcode": "6901234567890",
"price": 3.50,
"image": "http://example.com/coke.jpg",
"stock": 10
}
]
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| goods_id | string | 商品ID |
| goods_name | string | 商品名称 |
| barcode | string | 商品条码 |
| price | decimal | 商品价格 |
| image | string | 商品图片URL |
| stock | int | 库存数量 |
简要描述:获取哈哈平台的商品总库列表。
请求URL:http://api.hahabianli.com/goods/totalList
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| page_no | 是 | int | 页码 |
| page_size | 是 | int | 每页条数 |
| keyword | 否 | string | 搜索关键词(商品名称或条码) |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"total": 100,
"list": [
{
"goods_id": "goods001",
"goods_name": "可口可乐",
"barcode": "6901234567890",
"image": "http://example.com/coke.jpg"
}
]
}
}
简要描述:从哈哈平台商品总库中选择商品添加到商家自己的商品库。
请求URL:http://api.hahabianli.com/goods/addToMerchant
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| goods_id | 是 | string | 商品ID(来自商品总库) |
| price | 是 | decimal | 售价 |
返回示例:
{
"code": 1,
"info": "添加成功"
}
简要描述:获取商家自己的商品库列表。
请求URL:http://api.hahabianli.com/goods/merchantList
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| page_no | 是 | int | 页码 |
| page_size | 是 | int | 每页条数 |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"total": 50,
"list": [
{
"goods_id": "goods001",
"goods_name": "可口可乐",
"barcode": "6901234567890",
"price": 3.50,
"image": "http://example.com/coke.jpg",
"status": 1
}
]
}
}
简要描述:设置商品在指定设备的上架或下架状态。
请求URL:http://api.hahabianli.com/goods/setStatus
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
| goods_id | 是 | string | 商品ID |
| status | 是 | int | 状态:0-下架,1-上架 |
返回示例:
{
"code": 1,
"info": "设置成功"
}
简要描述:获取设备的货架层级模板配置。
请求URL:http://api.hahabianli.com/goods/getLayerTemplate
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"layers": [
{
"layer_no": 1,
"layer_name": "第一层",
"goods_list": []
}
]
}
}
简要描述:创建或更新设备的货架层级模板。
请求URL:http://api.hahabianli.com/goods/updateLayerTemplate
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| device_id | 是 | string | 设备ID |
| layers | 是 | array | 层级配置数组 |
返回示例:
{
"code": 1,
"info": "更新成功"
}
简要描述:商家申请添加新商品到哈哈平台商品总库。
请求URL:http://api.hahabianli.com/goods/applyNew
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| goods_name | 是 | string | 商品名称 |
| barcode | 是 | string | 商品条码 |
| image | 是 | string | 商品图片URL |
| description | 否 | string | 商品描述 |
返回示例:
{
"code": 1,
"info": "申请已提交,等待审核"
}
简要描述:查询商家商品ID与哈哈平台商品ID的对应关系。
请求URL:http://api.hahabianli.com/goods/idMapping
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| merchant_goods_id | 否 | string | 商家商品ID |
| haha_goods_id | 否 | string | 哈哈平台商品ID |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"merchant_goods_id": "m_goods_001",
"haha_goods_id": "h_goods_001"
}
}
简要描述:将多个相似商品合并为一个商品。
请求URL:http://api.hahabianli.com/goods/merge
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| target_goods_id | 是 | string | 目标商品ID(保留的商品) |
| source_goods_ids | 是 | array | 源商品ID数组(将被合并的商品) |
返回示例:
{
"code": 1,
"info": "合并成功"
}
回调地址配置:
在商家后台配置一个消息回调地址,用于接收所有类型的通知:
回调通知特点:
notify_type 字段用于区分具体的业务类型sign 字段用于验证success 字符串表示接收成功notify_type 枚举值:
| notify_type 值 | 说明 | 章节 |
|---|---|---|
| DEVICE_STATUS | 开关门状态通知 | 3.3.2.1 |
| ONLINE_STATUS | 设备在线状态通知 | 3.3.2.2 |
| VOICE_RESULT | 音量调节结果通知 | 3.3.2.3 |
| CLIENT_NEW_PRODUCT | 新品审核结果回调 | 3.3.2.4 |
| MERGE_PRODUCT | 商品合并结果通知 | 3.3.2.5 |
| ORC_RESULT | AI识别结果通知 | 3.3.2.6 |
签名验证:
幂等性要求:
重要提示:
简要描述:查询哈哈平台是否成功推送识别结果或订单通知给商户。
请求URL:http://api.hahabianli.com/order/callbackStatus
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| order_no | 是 | string | 哈哈平台订单号 |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"callback_status": 1,
"callback_time": "2024-01-24 15:30:00",
"retry_count": 0
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| callback_status | int | 回调状态:0-未推送,1-推送成功,2-推送失败 |
| callback_time | string | 回调时间 |
| retry_count | int | 重试次数 |
简要描述:主动查询订单的AI识别结果。
请求URL:http://api.hahabianli.com/order/recognizeResult
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| order_no | 否 | string | 哈哈平台订单号 |
| out_trade_no | 否 | string | 商户订单号 |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"order_no": "HH202401240001",
"out_trade_no": "M202401240001",
"goods_list": [
{
"goods_id": "goods001",
"goods_name": "可口可乐",
"price": 3.50,
"quantity": 2,
"amount": 7.00
}
],
"total_amount": 7.00,
"confidence": 0.95,
"video_url": "http://example.com/video/123.mp4",
"status": "completed"
}
}
简要描述:查询订单详细信息。
请求URL:http://api.hahabianli.com/order/query
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| order_no | 否 | string | 哈哈平台订单号 |
| out_trade_no | 否 | string | 商户订单号 |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"order_no": "HH202401240001",
"out_trade_no": "M202401240001",
"device_id": "device001",
"goods_list": [],
"total_amount": 7.00,
"order_status": "paid",
"create_time": "2024-01-24 15:00:00",
"pay_time": "2024-01-24 15:05:00"
}
}
简要描述:商户完成扣款后,通知哈哈平台订单支付状态。
请求URL:http://api.hahabianli.com/order/setPayStatus
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| order_no | 是 | string | 哈哈平台订单号 |
| pay_status | 是 | int | 支付状态:1-支付成功,2-支付失败 |
| pay_time | 否 | string | 支付时间 |
| transaction_id | 否 | string | 第三方支付流水号 |
返回示例:
{
"code": 1,
"info": "设置成功"
}
简要描述:获取订单关联的开门前后对比图片或购物视频。
请求URL:http://api.hahabianli.com/order/media
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| order_no | 是 | string | 哈哈平台订单号 |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"before_image": "http://example.com/before.jpg",
"after_image": "http://example.com/after.jpg",
"video_url": "http://example.com/video.mp4"
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| before_image | string | 开门前图片URL |
| after_image | string | 关门后图片URL |
| video_url | string | 购物过程视频URL |
简要描述:获取静态货柜的分层图片和每层的识别结果(适用于静态识别柜)。
请求URL:http://api.hahabianli.com/order/layerRecognize
请求方式:POST
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| access_token | 是 | string | 访问token |
| order_no | 是 | string | 哈哈平台订单号 |
返回示例:
{
"code": 1,
"info": "SUCCESS",
"data": {
"layers": [
{
"layer_no": 1,
"before_image": "http://example.com/layer1_before.jpg",
"after_image": "http://example.com/layer1_after.jpg",
"goods_list": [
{
"goods_id": "goods001",
"goods_name": "可口可乐",
"change_quantity": -2
}
]
}
]
}
}
返回参数说明:
| 参数名 | 类型 | 说明 |
|---|---|---|
| layer_no | int | 层级编号 |
| before_image | string | 开门前该层图片 |
| after_image | string | 关门后该层图片 |
| change_quantity | int | 商品数量变化(负数表示减少) |
Q1: access_token多久过期? A: access_token有效期为15天(1296000秒)。token到期前2天内请求接口会自动生成新的access_token,其它时间请求接口将不会更新token。建议获取到token后自行保存,发现过期或在token到期前的2天内就对token进行更新。
Q2: 如何处理识别结果通知? A: 商户应在收到识别结果通知后,根据商品列表和金额进行用户扣款,并调用"设置订单支付状态"接口告知哈哈平台支付结果。
Q3: 识别置信度低于0.8怎么办? A: 建议进行人工审核,可通过"开门前后图片或视频查询"接口获取购物视频进行核实。
Q4: 回调接口没有收到通知? A: 可通过"识别或订单回调结果查询"接口查询推送状态。如果推送失败,可主动调用"识别结果查询"接口获取数据。
Q5: 多门柜如何开门? A: 先调用"设备是否多门单开"接口判断设备类型,如果是多门单开设备,在调用开门接口时需传递door_index参数指定门编号。
| 版本 | 日期 | 变更内容 |
|---|---|---|
| 1.0.0 | 2024-01-24 | 初始版本,包含完整API文档 |
文档来源:https://showdoc.hahabianli.com/web/#/685869388/275897889 最后更新:2024-01-24