什么是智能福袋机
智能福袋机属于自动贩卖机,机器内每条轨道分别放置了价值不等的福袋,商品种类繁多,其中不定时会在福袋内出现不同的高价值礼品,福袋采用统一大小的精美礼品盒。乐摇摇提供强大的联网通讯功能与saas服务,在设备上整合了移动支付、远程管理、数据分析能力,让您可以在任何时间、地点进行监控管理。是一款集合了创新、智能、娱乐为一体的新型终端设备。
多种通讯类型
支持2G/4G/WiFi三种通讯方式
24H自助零售
支付成功后,相应轨道自动启动出货,并记录出货数据
触摸屏交互
支持屏幕显示礼品信息,选择礼品后自动生成动态支付码
支持游戏运行、语音与视频播放
支持主板参数设置、固件版本升级
SaaS服务
1移动支付
同时支持微信、支付宝、云闪付等多种主流支付方式
银行直连清算,资金直接导致商户绑定的银行卡,0风险
2设备管理
支持绑定多台设备关系,远程监控设备运行状态、主板参数设置
支持设置设备启动单价
3经营统计
支持数据统计、查询、分析管理,支持监控每个设备与投放点的趋势
4订单查询
支持追踪每一笔消费订单,支持查看每个用户的订单明细
5会员管理
支持用户消费统计,勾勒用户画像,提供多种营销工具
6礼品统计
支持记录轨道出礼数据,统计礼品成本与出奖率
支持监控轨道礼品现存数,及时推送消息提醒补货
7预警
支持设备故障自动诊断,推送消息预警;
智能化充电桩与传统产品对比的优势
对比项 | 智能化充电桩 | 传统充电桩 |
---|---|---|
支付渠道 | 接入移动支付,同时兼容微信、支付宝、银联等主流支付渠道 资金安全,银行直接清算到账,并提供详细的流水明细 丰富的营销资源补贴 | 设备无法联网通讯,只能使用现金、投币支付方式,无法满足线上支付行为,导致消费用户流失 现金收益存储在设备内,存在一定的资金风险 |
管理 | 通过SaaS后台实时监控设备运营状态,跟踪设备使用分布和故障,及时维护 线上支付收益直接到账,账目清晰 远程设置收费标准 售后维护,提升用户忠诚度 | 无法知晓设备运行情况,只能通过员工定时维护,人力成本高 需要定期收款,清点金额数量,低效且账目容易出现错乱 出现消费纠纷,无法立刻排查处理 |
数据分析 | 从消费金额、频率、人数等维度出发,实时了解经营状况并进行比对 勾勒用户消费画像,提供运营决策依据 | 无法系统地收集数据,只能基于经验或片面的认知,做出运营决策 |
厂商研发能力不一,设备销售成本也存在一定的价格差异。同时,部分厂商为了提升自身产品竞争力,在满足日常功能基础上,希望为运营商和消费者提供增值功能或服务。对此,乐摇摇基于研发能力、价格、接口扩展等方面,提供了多样的硬件联网方案。
移动支付
通过联网,接入乐摇摇平台的充电桩,实现了移动支付功能,消费者在屏幕上选择礼品后,点击购买,扫描支付二维码,付款成功后,礼品轨道启动出货。
1在屏幕选择礼品,可以选择一个或多个;
2点击支付购买,出现支付二维码;
3扫描支付二维码,支付成功后,启动轨道启动出货。(支持金额会直接清算至运营商账号)
整个操作过程简单快捷。
设备管理后台
为了提升管理效率,实现精细化运营,接入乐摇摇平台的福袋机,运营商可以通过设备管理后台进行远程监控,及时了解礼品出货情况,保证设备的正常运作。
设备管理后台功能列表
功能 | 描述 |
---|---|
设备注册 | 扫描设备注册二维码,实现设备绑定,绑定后即可正常运作 |
设备管理 | 远程监控设备运行状态,启动分布与异常设备统计等 |
远程调整主板参数 | 灵活的权限配置,指定场地负责人 |
收费套餐设置 | 修改每条轨道启动单价 |
礼品统计 | 记录每个轨道礼品存量、出货量,后台实时生成数据报表 当礼品小于每个值,推送消息提醒商户 |
经营统计 | 统计在线支付、现金、线下投币等数据,绘制可视化数据分析图表 分析每个场地单位时间收益趋势 比对一段时间支付单价、用户消费数、消费分布,构建用户画像 |
订单查询 | 跟踪每一笔支付消费,每一次设备启动,提升售后服务 |
营销工具 | 多样化营销工具,随机立减、优惠券、自建优惠活动、广告分成 商户品牌信息设置 |
会员管理 | 划分用户消费等级,并提供排行榜、积分商城,实现二次营销 |
若请体验设备管理后台功能,请扫描并关注企业二维码,进入后台并注册账号接即可。
面向对象
本文档面向合作伙伴的技术员,适用于乐摇摇SAAS平台福袋机产品的硬件技术对接,便于双方技术团队遵循既定的合作流程,完成技术的沟通和对接,提升效率。
集成文档包括《技术协议文档》、《open-netty-client.jar》、《open-netty-client-sources.jar》
接入方案处于内测阶段,若需接入,请和市场人员沟通,申请并分配APPID和密钥。
联系方式:陈先生-13728058558
SDK说明
设备接入SDK封装了福袋机与乐摇摇SAAS系统的云端通讯过程。 这些过程包括配置、连接、心跳、状态上报以及场景功能接口等。 使用SDK,可以使得开发者快速完成APP开发,开发者仅需关注APP的UI和UE设计即可,而相对复杂的协议与错误处理等事项可忽略。
SDK初始化
配置产品参数实例化NettyClient工具类,调用connect方法开始初始化。
SDK工具类
类定义静态变量appid、appSecret、uuid,在程序中直接通过“类名.参数名”的方式直接调用。
App上行数据包到服务器
SDK包的工具类MsgProducer封装服务器交互的消息发送接口,调用对应API完成消息发送。
服务器下发消息处理逻辑
继承 AbstractMsgHandler 并实现逻辑处理方法,在初始化 sdk 阶段传入该类实例。
SDK文档
合作方根据实际情况选择jar包的版本,可以在maven仓库查询maven和gradle依配置
仓库地址:https://mvnrepository.com
Gradle依赖
引入netty和json包
compile group: 'io.netty', name: 'netty-all', version: '4.1.16.Final'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
Mave依赖
io.netty netty-all 4.1.16.Final
com.google.code.gson gson 2.8.2 |
乐摇摇提供联网模组/芯片,厂商把模组与设备主板连接,基于标准化的硬件通信协议进行开发,使设备获得联网通讯能力以及一体化的sass服务。智能化的设备上整合了移动支付、远程管理、数据分析、渠道运营、广告投放等能力,让投放商可以在任何时间、地点进行监控管理,提升整体管理效率与渠道收益。
串口方案
乐摇摇提供了两种串口解决方案,分布是:串口版和集成芯片,两者实现的功能一样,只是与主板连接方式、价格上存在差异。厂商可根据自身需求选择。
针对厂商设备主板与乐摇摇串口联网模组对接,平台提供标准串口数据通讯协议、自动生成参数界面、串口调试工具,简化开发过程,使设备快速联网获得增值功能。本文档基于乐摇摇串口联网模组与设备主板的标准对接流程编写
适用范围:方案适用于福袋机、口红机、售货机等自助零售设备
协议文档
集成芯片对接参考设计资料
若选择串口集成芯片对接方案,请下载相应参考资料
SDK
下载串口与函数SDK
串口调测功工具
准备工作:对接前,需要先获取乐摇摇联网芯片或模组,以便后续开发测试。
如果您是首次接入乐摇摇联网方案,请按以下流程进行对接。下文将针对各个步骤进行详细描述。
对接流程 | 参考文档 |
---|---|
1注册开发账号 | 查看流程文档 |
2创建产品 | 查看流程文档 |
3主板参数配置 | 查看流程文档 |
4硬件嵌入式开发 | 查看流程文档 |
5硬件联调 | 查看流程文档 |
6发布,体验功能 | 查看流程文档 |
模组名称:福袋机Android板
主板图片:
方案概述:通过串口进行数据交互,与设备双向通讯:向设备发送控制指令、接受设备上报数据。不容易受到干扰,传输数据准确率高。方案优点是不受限于SOC片上资源、应用扩展度高;
适用设备:福袋机
联网方式:2G/4G/wifi
连接方式:与设备传感器连接
工厂开发:基于Android板与控制板通讯指令开发
开发团队已经对福袋机通讯协议进行封装,app只需要在工程中引入open-netty-client.jar,即可调用相应api进行数据收发操作。
登陆流程示意图
客户端实例声明
NettyClient client = new NettyClient ( appId , key , host , port , uuid,handler ) ;
client.connect(); // 请求服务器建立链接
参数说明
| 参数名称 | 说明 || | ----- | | ------------------------------------------------- | | appId || 系统分配的应用编号 | | Key || 密钥 | | Host || 通讯域名或者IP | | Port || 端口 | | Uuid || 设备唯一编码,由厂家自定义生成,全局唯一,否则登陆失败。 目前推荐规则:厂家前缀+设备唯一码 | | Handler || 参考“消息处理器”说明 |
消息处理器 消息子类继承AbstractMsgHandler,重写业务逻辑方法,详见“处理器实现”说明。 实现样例:
public class SimpleMsgHandler extends AbstractMsgHandler {
/**
重写登陆逻辑
**/
@Override
protected boolean loginHandler(ResponseParam responseParam) {
// 业务实现代码
return true;
}
……
用户点击商品生成二维码进行支付操作,程序要严谨处理支付逻辑、出礼和退款操作。
1.请求生成二维码,显示到终端屏幕
方法名称:MsgProducer.getPayCode(GetPayCodeParam param);。
详细参数说明如下:
参数名称 | 参数说明 |
---|---|
selectChannels | 选择的货道信息,每个元素分别表示一个货道的选择情况,元素内容为 仓位id,购买数量, 单价组成,例 1,2,300 表示第一货道需要购买两每个3元;多个货道信息使用”;”分隔。 |
isGaming | 表示是否是玩游戏,如果是玩游戏 则上面 单价 表示游戏的价格 |
uniqueKey | 随机生成,作为支付事务校验唯一码,在支付结果回调,启动结果上传都需要使用到该 唯一码 |
代码示例:
public static boolean getPayCode() {
System.out.println("获取支付二维码......");
GetPayCodeParam param = new GetPayCodeParam();
param.setUniqueKey(UUID.randomUUID().toString());
param.setSelectChannels(Arrays.asList("2,2,2;1,1,1"));
param.setIsGaming(true);
return MsgProducer.getPayCode(param);
}
代码示例:二维码请求参数返回处理,重写handler子类的qrCodeHandler方法,完成显示逻辑。
@Override
protected boolean qrCodeHandler(ResponseParam responseParam) {
QrCodeResp resp = getResp(responseParam, QrCodeResp.class);
System.out.println(String.format("get 设备注册二维码为:%s", gson.toJson(resp)));
return true;
}
2监听用户支付返回消息,启动终端出礼设备;
用户支付成功后,服务会下发消息通知到APP,开发者需要重写handler子类的payResultHandler方法,完成显示逻辑。
代码示例:
@Override
protected boolean payResultHandler(ResponseParam responseParam) {
System.out.println(String.format("支付结果为:%s", gson.toJson(responseParam)));
// 完成设备相关的启动逻辑
return true;
}
扫码支付流程时序图如下:
上传设设备仓位的退礼信息到服务器,存档对应的退礼数据。
方法名称:MsgProducer.uploadGift(UploadGiftParam param);
详细参数说明如下:
参数名称 | 参数说明 |
---|---|
mainPosition | 货道的唯一编号 |
giftInc | 退礼增量 |
giftTotal | 退礼总量 |
uniqueCode | 上传事务随机码:没有收到响应消息,重复上传情况下请使用同一个随机码。 |
originType | 退礼来源:GAME=游戏退礼,BUY=购买退礼,RD=远程上分退礼 |
代码示例如下:
public static boolean uploadGift() { System.out.println("上传礼品信息"); String key = UUID.randomUUID().toString(); UploadGiftParam param = new UploadGiftParam(); param.setUniqueCode(key); param.setGiftTotal("2"); param.setGiftInc("2"); param.setMainPosition("4"); param.setOriginType("BUY"); MsgProducer.uploadGift(param);
System.out.println("上传礼品信息......");
key = UUID.randomUUID().toString();
param = new UploadGiftParam();
param.setUniqueCode(key);
param.setGiftTotal("1");
param.setGiftInc("1");
param.setMainPosition("3");
MsgProducer.uploadGift(param);
return true;
}
退礼操作需要确认上报结果,如果没有接收到消息或者返回接收失败,建议进行3次重试。
重写handler子类的uploadGiftResultHandler方法,接收退礼上报结果。
代码示例:
@Override
protected boolean uploadGiftResultHandler(ResponseParam responseParam) {
System.out.println(String.format("上传退礼信息返回结果为:%s", gson.toJson(responseParam)));
return true;
}
在公众号后台进行设备绑定和解除绑定操作,流程如下:
操作成功后,服务器下发的设备消息到安卓APP;如果操作失败,请开发这重复上述流程,重复操作流程不下发消息通知。
开发者实现handler的通知逻辑,重写eqBindNoticeHandler绑定通知;重写 eqUnBindNoticeHandler解绑通知。
示例代码如下:
/** * 设备绑定通知 *@param responseParam *@return **/ protected boolean eqBindNoticeHandler(ResponseParam responseParam) { System.out.println(String.format("get 收到设备绑定通知: %s", gson.toJson(responseParam))); return true; } /** *设备解绑通知 *@param responseParam *@return **/
@Override
protected boolean eqUnBindNoticeHandler(ResponseParam responseParam) {
System.out.println(String.format("get 收到设备解绑通知: %s", gson.toJson(responseParam)));
return true; }
B端是指公众号【设备管理系统】提供的商户后台管理系统,提供一系列的设备管理、经营统计、会员管理等相关的管理工具和数据统计功能。
通过一些的设备管理操作功能,实现对联网设备的动态管理和监控,提供运营效率。
B端界面:
参数设置
商户在公众号后台设置设备参数,服务器下发消息到终端APP,开发者需要重写handler的setEquipmentParamHandler方法,实现设备参数同步。
示例代码:
@Override protected boolean setEquipmentParamHandler(ResponseParam responseParam) { System.out.println(String.format("set 参数设置通知:%s", gson.toJson(responseParam))); List<SetEquipmentParamResp> resps = getRespList(responseParam, SetEquipmentParamResp.class); System.out.println(String.format("解析参数为:%s", gson.toJson(resps)));
// 实现参数同步逻辑
return true;
}
开门操作
商户在B端点击补货, 服务器下发设备参数到终端,开发者重写handler的openDoorHandler方法,解析仓位列表参数,打开对应的仓门。
示例代码如下:
@Override
protected boolean openDoorHandler(ResponseParam responseParam) {
System.out.println(String.format("set 开门通知:%s", gson.toJson(responseParam)));
List<OpenDoorResp> resps = getRespList(responseParam, OpenDoorResp.class);
System.out.println(String.format("解析参数为:%s", gson.toJson(resps)));
return true;
}
补货/清货操作
商户在B端点击补货/清货(参考下图操作界面),服务器下发消息通知到APP。开发者重写handler的addOrcleanStockHandler方法进行数据处理,参数包括补货的仓位列表、数量,打开对应的仓门进行补货。
示例外码如下:
@Override
protected boolean addOrCleanStockHandler(ResponseParam responseParam) {
System.out.println(String.format("set 补货/清货通知:%s", gson.toJson(responseParam)));
List<AddOrCleanStockResp> resps = getRespList(responseParam, AddOrCleanStockResp.class);
System.out.println(String.format("解析参数为:%s", gson.toJson(resps)));
return true;
}
SDK初始化成功后,自身机制管理与服务器链接状态,自动发起随机数获取、登陆、货到上传流程,完成服务器约定的设备初始化流程。 步骤如下:
获取随机数 详见“获取随机字串”说明。
设备登陆 详见“设备登录接口”说明。
货道上传 详见“上传货道信息”说明
当设备有线下投币的时候,需要调用 MsgProducer 中的 uploadCoins 方法 同步数据到服务端。 同步投币数据后 AbstractMsgHandler 中的 uploadCoinsResultHandler 方法会返回服务端的接收结果。 如果没有接收到消息或者返回接收失败,则需要进行 3次 重试;
方法名称:MsgProducer. uploadCoins(UploadGiftParam param);
详细参数说明如下:
参数名称 | 参数说明 |
---|---|
mainPosition | 仓位编号:正整数,对设备唯一 |
coinsInc | 投币增量:本次投币数量 |
coinsTotal | 投币总量:设备投币总量(当该数大于上次上传的投币总量时:本次投币数量=本次投币总量-上次投币总量,否则:本次投币数量=投币增量) |
代码示例如下:
public static boolean uploadCoins(String total, String inc) {
System.out.println("上传投币信息......");
String key = UUID.randomUUID().toString();
UploadCoinsParam param = new UploadCoinsParam();
param.setUniqueCode(key);
param.setMainPosition("2");
param.setCoinsTotal(total);
param.setCoinsInc(inc);
MsgProducer.uploadCoins(param);
return true;
}
代码示例:重写handler的uploadCoinsResultHandler方法,处理消息通知。
@Override
protected boolean uploadCoinsResultHandler(ResponseParam responseParam) {
System.out.println(String.format("get 上传投币信息返回结果为:%s", gson.toJson(responseParam)));
return true;
}
方法名称:MsgProducer.getSignRandom(GetSignRandomParam param)。
该接口为 获取随机字串,获取随即字串接口是用于登录使用, SDK 在获取随即字段成功后会自动调用登录接口。如果自动登录接收登录结果为失败,需要手工调用该接口进行重试;
方法名称:login(LoginParam param)。
如果登录结果返回失败,需要手动调用 getSignRandom(GetSignRandomParam param) 进行重新登录,建议重试时间间隔 5 秒。
方法名称:MsgProducer.updloadMainboardInfo(UpdloadMainboardInfoParam param)。
设备初始化、货道信息变更的情况下,必须调用本接口上传货道信息。
支付环节进行货道参数校验,如果缺少货道信息会引发支付异常。
详细参数说明如下:
参数名称 | 参数说明 |
---|---|
mainPosition | 货道id 对于设备唯一 |
produceName | 商品名称 售卖商品的名称 |
gamePrice | 货道游戏价格 |
buyPrice | 商品购买价格 |
Probability | 游戏概率 |
Capture | 容量 |
Stock | 库存 |
uniqueCode | 上传事务随机码(重复上传时使用同一个随机码) |
代码示例:
public static boolean uploadMainboard(String mp) {
System.out.println("上传仓位信息......:" + mp);
int max = Integer.valueOf(mp);
for (int i = 1 ; i <= max ; ++i) {
String key = UUID.randomUUID().toString();
UploadMainboardInfoParam param = new UploadMainboardInfoParam();
param.setUniqueCode(key);
param.setStock("10");
param.setCapture("50");
param.setProbability("10");
param.setBuyPrice("2000");
param.setGamePrice("100");
param.setProductName("暂无");
param.setMainPosition(i + "");
param.setProductCost("500");
param.setPicture("https://picture");
param.setPositionName("仓位名");
param.setPositionStatus("1");
MsgProducer.uploadMainboardInfo(param);
}
return true;
}
重写handler接口setMainboardHandler方法处理服务器下发通知消息。
示例代码:
@Override
protected boolean setMainboardHandler(ResponseParam responseParam) {
SetMainboardResp resp = getResp(responseParam, SetMainboardResp.class);
System.out.println(String.format("set 设置仓位信息:%s", gson.toJson(resp)));
return true;
}
终端用户支付成功,本地成启动设备并通知服务器当前设备的启动状态。
当前接口是必须实现的功能接口,启动状态(成功/失败)作为退款依据!
方法名称:MsgProducer.eqStartResult(EqStartResultParam param)。
详细参数说明如下:
参数名称 | 参数说明 |
---|---|
isSuccess | 表示设备启动成功或者失败 |
uniqueCode | 用户支付结果通知中获取到的 k |
channels | 启动失败,退款仓位列表:仓位,数量,金额。 |
代码示例如下:
public static boolean eqStartResult(String key) { System.out.println("设备启动失败上传..."); EqStartResultParam param = new EqStartResultParam(); param.setUniqueCode(key); param.setIsSuccess(false);
// 退款金额
List<String> strs = new ArrayList<String>();
strs.add("3,1,5");
strs.add("2,1,4");
param.setChannels(strs);
MsgProducer.eqStartResult(param);
return true;
}
设备上报结果返回处理:
重写handler子类的eqStartResultReHandler方法,代码示例如下:
/**
* 设备启动结果上传 结果返回
*
* @param responseParam
*@return
**/
@Override
protected boolean eqStartResultReHandler(ResponseParam responseParam) {
System.out.println(String.format("get 设备启动结果上传返回结果为:%s", gson.toJson(responseParam)));
return true;
}
帧格式图
格式说明
起始字节 | 名称 | 定义 | 数据类型 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | 固定为0xAA | BYTE | |
1 | Length(长度) | Index + CMD +Data + Check 数据总长 | BYTE | |
2 | Index (索引) | 主机:0x01 终端:0x02 | BYTE | 标识消息发出方 售货机主板为02 |
3 | CMD(命令) | 表明数据帧的类型 | BYTE | |
4 | Data(数据) | 数据区 | BYTE[n] (n<200) | 数据区长度可以为0 |
4+n | Check(校验) | 校验范围:Length+ Index+ CMD+ Data | BYTE | 异或校验 |
5+n | End(帧尾) | 固定为0xDD | BYTE |
通信配置
通信接口:串口(RS485/RS232/TTL)
波特率:38400
停止位:1位
数据位:8位
校验位:0位
数据类型
数据类型 | 描述 |
---|---|
BYTE | 无符号单字节整型(字节,8位) |
WORD | 无符号双字节整型(双字节,16位) |
DWORD | 无符号四字节整型(四字节,32位) |
BYTE[n] | N字节 |
传输规则
协议采用小端模式(little-endian)的网络字节序来传递字和双字。
约定如下:
——字节(BYTE)的传输约定:按照字节流的方式传输;
——字(WORD)的传输约定:先传递低八位,再传递高八位;
——双字(DWORD)的传输约定:先传递低八位,然后传递高八位,再传递高16位,
最后传递高24位。
主机查询方式
主机按照一定的时间间隔向终端发送数据帧,终端接收到数据帧后返回应答帧,终端不主动上传数据,若主机在规定时间内未接受到规定的数据帧的应答数据帧,则重发数据帧直到终端返回应答数据帧。
正常通信时序:
异常通信时序:
终端上传数据帧方式
正常通信时序:
异常通信时序:
进行福袋机/零售机串口协议对接之前,您需要先了解娃娃机的串口功能指令。
功能指令 | 参考文档 |
---|---|
设备登录 | 查看设备登录指令文档 |
终端参数 | 查看终端参数指令文档 |
有屏售货机主扫支付 | 查看有屏售货机主扫支付指令文档 |
有屏售货机反扫支付 | 查看有屏售货机反扫支付指令文档 |
无屏售货机支付 | 查看无屏售货机支付指令文档 |
远程上分 | 查看远程上分指令文档 |
上传账面增量 | 查看上传账面增量指令文档 |
查询网络信号 | 查看查询网络信号指令文档 |
扩展指令 | 查看查看扩展指令文档 |
登录流程
指令说明——查询链接状态
支付盒子 -------------> 售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0x0B | |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0x01 | 查询链接状态 |
4 | Data(数据) | BYTE[8] | 8位设备唯一码 | |
12 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
13 | End(帧尾) | BYTE | 0xDD |
售货机主板 ------------->支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0x05 | |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0x01 | 查询链接状态 |
4 | Data(数据) | WORD | 登录标识 | 小端模式传输 |
6 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
7 | End(帧尾) | BYTE | 0xDD |
指令说明——同步本地通道信息
售货机主板 ------------->支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以实际情况为准 |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0xC9 | 售货机特定指令 |
4 | Data(数据) | 见表1 | 见表1 | |
4+n | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
14 | End(帧尾) | BYTE | 0xDD |
表1支付盒子获取设备状态指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——同步本地通道信息 | BYTE | 0x02 |
Data[1-2] | 通道总数 | WORD | 0x0000-0xFFFF;小端模式传输 |
Data[3-4] | 通道序号 | WORD | 0x0000-0xFFFF;小端模式传输 |
Data[5-8] | 购买价格 | DWORD | 单位:分;游戏出礼模式下置0 |
Data[9-12] | 游戏价格 | DWORD | 单位:分;购买出礼模式下置0 |
Data[13-14] | 通道货品数量 | WORD | 0x0000-0xFFFF;小端模式传输 |
Data[15-16] | 通道货品容量 | WORD | 0x0000-0xFFFF;小端模式传输 |
Data[17] | 通道名称字段长度 | BYTE | |
Data[18-n] | 通道名称 | BYTE[n] | 支持GB18030,ASCII编码 注意:本字段长度需与Data[17]中数值保持一致 |
支付盒子 -------------> 售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0x0C | |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0xC9 | 售货机特定指令 |
4 | Data(数据) | 见表2 | 详见表2 | |
13 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
14 | End(帧尾) | BYTE | 0xDD |
表2支付盒子获取设备状态指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——获取设备状态 | BYTE | 0x01 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
Data[7-8] | 预留 | WORD | 取值0x00-0xFFFF;小端模式传输 |
登录标识
登录标识是乐摇摇支付盒子用以识别所对接设备主板身份的标识码,每个产品都有且只有一个(请把登录标识烧录到设备中。当设备激活时,会上报到云端鉴权认证设备参数)。
标识码获取流程
(1)打开乐摇摇后台网站https://open.leyaoyao.com(推荐Chrome浏览器),输入账号密码并登录。若无账号,请先注册开发账号。
(2)登录成功后,即可进入开发者中心。
(3)点击创建产品出现弹窗,请按要求完善产品信息。
主板信息填写与要求:
1主板名称格式为厂家名称+设备类型,例如:乐摇摇福袋机
2上传的主板原图与接线方式图片参照上方示例,特别注意拍摄清晰保证主板与支付盒子间的接口电路,以便工作人员审核
(4)主板信息提交成功后,乐摇摇硬件工作人员将在3个工作日内对其进行审核,审核结果会同步以短信形势发送到主板厂商预留的手机号码,请注意查收。
(5)待审核通过后,即可在该页面看到该主板对应登录标识。如未通过,请留意申请反馈并与乐摇摇硬件工作人员进一步沟通。
(6)注意:获取到的登录标识为十进制,通信数据中需转换为16进制,并令低位在前,高位在后,以小端模式传输。如:登录标识为150,则通信中实际需传输的登录标识数据为 0x96 0x00
指令说明——查询终端参数
支付盒子 -------------> 售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0x03 | |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0x05 | 查询终端参数 |
- | Data(数据) | - | - | 不含数据区 |
4 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
5 | End(帧尾) | BYTE | 0xDD |
**售货机主板 ------------->**支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以自定义情况为准 |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0x05 | 查询终端参数 |
4 | Data(数据) | BYTE[n] | 自定义参数项 | 自定义方法说明见终端参数指令说明 |
4+n | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
5+n | End(帧尾) | BYTE | 0xDD |
指令说明——设置终端参数
支付盒子 -------------> 售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以自定义情况为准 |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0x15 | 设置终端参数 |
4 | Data(数据) | BYTE[n] | 自定义参数项 | 自定义方法说明见终端参数指令说明 |
4+n | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
5+n | End(帧尾) | BYTE | 0xDD |
售货机主板 ------------->支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 视自定义情况 |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0x15 | 设置终端参数 |
4 | Data(数据) | BYTE | 参数设置结果 | 0x00:设置失败 0x01:设置成功 |
5 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
6 | End(帧尾) | BYTE | 0xDD |
自定义终端参数项
(1)打开乐摇摇后台网站https://open.leyaoyao.com(推荐Chrome浏览器),输入账号密码并登录开发者中心。若无账号,请先注册开发账号。
(2)在智能化产品列表中,找到需要进行自定义参数项的主板,点击“编辑”。若找不到该主板,请参照登录标识中的说明,添加需要对接的主板。
(3)进入主板参数配置页面,参数配置由3部分组成,包括基础参数、终端参数、故障参数。参数配置是对产品功能的抽象表示,可以通过不同功能类型定义。目前平台提供:布尔型、数值型、枚举型、故障型这四种参数类型。详情设置说明见参数配置
(4)界面预览
配置完成后,点击写一步,系统根据你配置的参数,自动生成设备参数管理界面,通过微信扫码二维码即可查看。确定功能、界面是否符合,若符合点击下一步即可,若不符合,返回参数配置界面调整。
(5)参数配置以及开发完成后,需要发布主板参数才完成入库对接。发布后,终端参数功能会显示在乐摇摇设备管理系统-设备管理模块中。
(6)当主板参数状态变为已发布后,即可进行对应的调试工作。若在此后修改参数项,需在修改完成后再次点击同步更新。
(7)发布后请厂商务必做好主板调试,主板调试完成,发布前请联系乐摇摇对接人员
支付流程
指令综述
有屏售货机反扫支付功能中所用指令属于售货机特定指令集,其CMD皆为0xC9,通过对数据区进行定制实现不同命令,利用其首位的子命令标识码区分,详情见下。其中,大部分指令已在3.3中说明,不再赘述。
通用框架
支付盒子 -------------> 售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以实际情况为准 |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0xC9 | 售货机特定指令 |
4 | Data(数据) | 详见后文 | 详见后文 | |
13 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
14 | End(帧尾) | BYTE | 0xDD |
售货机主板 ------------->支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以实际情况为准 |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0xC9 | 售货机特定指令 |
4 | Data(数据) | 详见后文 | 详见后文 | |
13 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
14 | End(帧尾) | BYTE | 0xDD |
上传扣款金额(反扫设备)
售货机主板 ------------->支付盒子上传扣款金额指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——上传扣款金额 | BYTE | 0x0B |
Data[1-6] | 随机数 | BYTE[6] | |
Data[7-10] | 本次支付总金额 | DWORD | 单位:分 0x0000表示支付失败 |
支付盒子 -------------> 售货机主板 上传扣款金额应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——上传扣款金额 | BYTE | 0x0B |
Data[1-6] | 随机数 | BYTE[6] |
支付流程
指令综述
有屏售货机反扫支付功能中所用指令属于售货机特定指令集,其CMD皆为0xC9,通过对数据区进行定制实现不同命令,利用其首位的子命令标识码区分,详情见下。
通用框架
支付盒子 -------------> 售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以实际情况为准 |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0xC9 | 售货机特定指令 |
4 | Data(数据) | 详见后文 | 详见后文 | |
13 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
14 | End(帧尾) | BYTE | 0xDD |
**售货机主板 ------------->支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以实际情况为准 |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0xC9 | 售货机特定指令 |
4 | Data(数据) | 详见后文 | 详见后文 | |
13 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
14 | End(帧尾) | BYTE | 0xDD |
子设备状态查询
支付盒子 -------------> 售货机主板 子设备状态查询指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——子设备控制 | BYTE | 0x0E |
Data[1-8] | 控制板子设备唯一码 | BYTE[8] | 区分一拖多子控制机地址,若未操作从机则为主机唯一码 |
Data[9] | 控制板命令 ——子设备状态查询 | BYTE | 0x01 |
售货机主板 ------------->支付盒子子设备状态查询应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——子设备控制 | BYTE | 0x0E |
Data[1-8] | 控制板子设备唯一码 | BYTE[8] | 区分一拖多子控制机地址,若未操作从机则为主机唯一码 |
Data[9] | 控制板命令 ——子设备状态查询 | BYTE | 0x01 |
Data[10] | 状态 | BYTE | 0x00:离线 0x01:在线 |
控制仓位
支付盒子 -------------> 售货机主板 控制仓位指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——子设备控制 | BYTE | 0x0E |
Data[1-8] | 控制板子设备唯一码 | BYTE[8] | 区分一拖多子控制机地址,若未操作从机则为主机唯一码 |
Data[9] | 控制板命令 ——控制仓位 | BYTE | 0x02 |
Data[10-15] | 指令唯一码 | BYTE[6] | |
Data[16] | 控制仓位总数 | BYTE | |
Data[17] | 仓位行参数 | BYTE | 当控制多个仓位时,需在末尾额外添加这些参数,注意与控制仓位总数对应 |
Data[18] | 仓位列参数 | BYTE | |
Data[19-20] | 仓位控制次数 | WORD |
售货机主板 ------------->支付盒子控制仓位应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——子设备控制 | BYTE | 0x0E |
Data[1-8] | 控制板子设备唯一码 | BYTE[8] | 区分一拖多子控制机地址,若未操作从机则为主机唯一码 |
Data[9] | 控制板命 ——控制仓位 | BYTE | 0x02 |
Data[10-15] | 指令唯一码 | BYTE[6] | |
Data[16] | 执行结果 | BYTE | 0x00:执行成功 0x01:执行失败 |
控制板出货上传
售货机主板 ------------->支付盒子 控制板出货上传指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——子设备控制 | BYTE | 0x0E |
Data[1-8] | 控制板子设备唯一码 | BYTE[8] | 区分一拖多子控制机地址,若未操作从机则为主机唯一码 |
Data[9] | 控制板命令 ——控制板出货上传 | BYTE | 0x03 |
Data[10-15] | 指令唯一码 | BYTE[6] | |
Data[16] | 仓位行参数 | BYTE | |
Data[17] | 仓位列参数 | BYTE | |
Data[18] | 出货结果 | BYTE | 0x00:出货成功 0x01:出货失败 |
支付盒子 -------------> 售货机主板 控制板出货上传应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——子设备控制 | BYTE | 0x0E |
Data[1-8] | 控制板子设备唯一码 | BYTE[8] | 区分一拖多子控制机地址,若未操作从机则为主机唯一码 |
Data[9] | 控制板命令 ——控制板出货上传 | BYTE | 0x03 |
Data[10-15] | 指令唯一码 | BYTE[6] | 与控制仓下发码保持一致 |
功能说明
本功能用以实现由商户直接控制售货机出货,日常交易中不会涉及。
指令说明——远程上分
支付盒子 -------------> 售货机主板 远程上分指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——远程上分 | BYTE | 0x0D |
Data[1-6] | 订单号 | BYTE[6] | |
Data[7-8] | 通道号 | WORD | 小端模式传输 |
Data[9] | 上分模式 | BYTE | 0x00:游戏启动 0x01:商品出货 |
售货机主板 ------------->支付盒子远程上分应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——远程上分 | BYTE | 0x0D |
Data[1-6] | 订单号 | BYTE[6] |
1此功能不可去除,后台关于售货机的收益、出礼等各项经营统计,皆基于本指令中数据完成。
2其中,故障代码可根据厂商需求,在乐摇摇后台网站https://open.leyaoyao.com(推荐Chrome浏览器打开)中的主板参数配置(参考设置终端参数)页面中最下方一栏自行定义。
创建故障参数
1点击添加,然后根据实际需求填写故障情况
2编写完成提交后,点击同步主板参数,即可进行调试。
3福袋机(售货机、礼品机)主板上报故障代码后,可以在乐摇摇手机后台的消息通知中接收到对应的故障信息,如下图所示
指令说明——终端主动上传账目增量
售货机主板 ------------->支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0x0A | |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0x13 | 终端主动上传账目增量 |
4 | Data(数据) | 见表3 | 详见表3 | |
11 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
12 | End(帧尾) | BYTE | 0xDD |
表3终端主动上传账目增量指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 自增码 | BYTE | 避免数据重复处理,新发送的上分数据自增码增加,重发的数据帧自增码不变。 自增码到达0xFF后置0,建议默认0x10 |
Data[1] | 故障代码 | BYTE | 设备故障码(定制方法见上传账目增量-功能说明) |
Data[2] | 投币增量 | BYTE | 设备一段时间投币的增量 |
Data[3] | 退礼增量 | BYTE | 设备一段时间退礼的增量 |
Data[4] | 营收增量 | BYTE | 设备一段时间营收的增量 |
Data[5-6] | 预留字节 | WORD |
支付盒子 ------------->售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0x03 | |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0x13 | 终端主动上传账目增量 |
- | Data(数据) | - | - | 数据区无数据 |
4 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
5 | End(帧尾) | BYTE | 0xDD |
功能说明
此功能可以使售货机主板主动获取到支付盒子当前的网络状态。需要注意,在开机约10分钟后,才可以正常获取到支付盒子的信号值。
指令说明——查询支付盒子网络状态
**售货机****主板 ------------->**支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0x03 | |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0x19 | 查询支付盒子网络状态 |
- | Data(数据) | - | - | 不含数据区 |
4 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
5 | End(帧尾) | BYTE | 0xDD |
支付盒子 ------------->售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0x03 | |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0x19 | 查询支付盒子网络状态 |
4 | Data(数据) | 见表4 | 详见表4 | |
6 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
7 | End(帧尾) | BYTE | 0xDD |
表4查询支付盒子网络状态指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 信号值 | BYTE | 0-31种级别 数字越大,信号越强 |
Data[1] | 链接服务器状态 | BYTE | 0x00:在线 0x01:离线 |
功能说明
厂商可通过此功能根据自身需求定义扩展指令,如清空当前局数,恢复出厂设置等功能。
在乐摇摇后台网站https://open.leyaoyao.com(推荐Chrome浏览器打开)中的主板参数配置(参考终端参数)页面中,新增终端操作。
根据实际情况填写各项内容。若设置功能不含参,则该指令固定不含数据区;若设置功能含参,则需进一步设置子参数,具体可参考自定义终端参数项。设置中的功能码对应数据帧中的CMD项,数值范围0x30-0xC8(48-200)。
设置完成后,功能会显示在乐摇摇设备管理系统-设备管理模块中,右图4
指令说明——扩展指令
支付盒子 ------------->售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以自定义情况为准 |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0xXX | 自定义指令 |
4 | Data(数据) | BYTE[n] | 自定义参数项 | 自定义方法说明见扩展指令-功能说明 |
4+n | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
5+n | End(帧尾) | BYTE | 0xDD |
售货机主板 ------------->支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以自定义情况为准 |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0xXX | 自定义指令 |
4 | Data(数据) | BYTE[n] | 自定义参数项 | 自定义方法说明见扩展指令-功能说明 |
4+n | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
5+n | End(帧尾) | BYTE | 0xDD |
支付流程
通用框架
有屏售货机主扫支付功能中所用指令属于售货机特定指令集,其CMD皆为0xC9,通过对数据区进行定制实现不同命令,利用其首位的子命令标识码区分,详情见下
支付盒子 -------------> 售货机主板
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以实际情况为准 |
2 | Index (索引) | BYTE | 0x01 | 标识盒子主机 |
3 | CMD(命令) | BYTE | 0xC9 | 售货机特定指令 |
4 | Data(数据) | 详见后文 | 详见后文 | |
13 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
14 | End(帧尾) | BYTE | 0xDD |
售货机主板 ------------->支付盒子
起始字节 | 名称 | 数据类型 | 描述 | 备注 |
---|---|---|---|---|
0 | Head(帧头) | BYTE | 0xAA | |
1 | Length(长度) | BYTE | 0xXX | 以实际情况为准 |
2 | Index (索引) | BYTE | 0x02 | 标识售货机主板 |
3 | CMD(命令) | BYTE | 0xC9 | 售货机特定指令 |
4 | Data(数据) | 详见后文 | 详见后文 | |
13 | Check(校验) | BYTE | 异或校验码 | 校验范围:Length+ Index+ CMD+ Data |
14 | End(帧尾) | BYTE | 0xDD |
售货机主板 ------------->支付盒子获取二维码支付链接指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——获取二维码支付链接 | BYTE | 0x0A |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 若线下启动则随机产生唯一码 |
Data[7-10] | 本次支付总金额 | DWORD | 单位:分 0x0000表示支付失败 |
支付盒子 -------------> 售货机主板 获取二维码支付链接应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——获取二维码支付链接 | BYTE | 0x0A |
Data[1-n] | 二维码链接数据 | BYTE[n] | 通用格式:http://m.leyaoyao.com/lyy/t/<设备号> |
支付盒子 -------------> 售货机主板 获取设备状态指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令——获取设备状态 | BYTE | 0x01 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
Data[7-8] | 预留 | WORD | 0x0000-0xFFFF;小端模式传输 |
售货机主板 ------------->支付盒子 获取设备状态应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令——获取设备状态 | BYTE | 0x01 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
Data[7] | 设备状态 | BYTE | 0x00:空闲状态 0x01:支付状态(显示二维码后进入此状态) 0x02:故障状态 0x03:游戏状态 0x04:其他状态 |
Data[8] | 预留 | BYTE |
售货机主板 ------------->支付盒子上报上分结果指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——上报上分结果 | BYTE | 0x04 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
Data[7-10] | 支付总金额 | DWORD | 单位:分 0x0000表示支付失败 |
支付盒子 -------------> 售货机主板 上报上分结果应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——上报上分结果 | BYTE | 0x04 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
Data[7-10] | 支付总金额 | DWORD | 单位:分 0x0000表示支付失败 |
支付盒子 -------------> 售货机主板同步支付结果指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——同步支付结果 | BYTE | 0x03 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
Data[7-10] | 支付总金额 | DWORD | 单位:分 数值为0表示支付失败 |
Data[11] | 中奖概率 | BYTE | 0xFF表示无效 |
Data[12] | 用户ID字段长度 | BYTE | |
Data[13-n] | 用户ID | BYTE[n] | 注意:本字段长度需与Data[12]中数值保持一致 |
售货机主板 ------------->支付盒子同步支付结果应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——同步支付结果 | BYTE | 0x03 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
Data[7-10] | 核对金额结果 | DWORD | 单位:分 0x0000表示支付失败 |
上报交易结果——线上支付
售货机主板 ------------->支付盒子上报交易结果(线上支付)指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——上报交易结果(线下支付) | BYTE | 0x09 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
Data[7-10] | 本次支付总金额 | DWORD | 单位:分 0x0000表示支付失败 |
Data[11-14] | 退款总金额 | DWORD | |
Data[15-16] | 出礼品通道个数 | WORD | 未出礼仍需上报,但此项置0 |
Data[17-18] | 出礼品通道序号 | WORD | 未出礼则上报所选通道序号 |
Data[19-20] | 购买礼品数量 | WORD | |
Data[21-22] | 出礼品数量 | WORD | 未出礼仍需上报,但此项置0 |
Data[23-26] | 累计出礼品数量 | DWORD | |
Data[27-30] | 购买价格 | DWORD | 单位:分 通过游戏出礼时此项置0 |
Data[31-34] | 游戏价格 | DWORD | 单位:分 通过购买出礼时此项置0 |
支付盒子 -------------> 售货机主板 上报交易结果(线上支付)应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——上报上分结果 | BYTE | 0x09 |
Data[1-6] | 支付唯一码 | BYTE[6] | 每个支付流程的支付唯一码不改变 |
上报交易结果——线下支付
售货机主板 ------------->支付盒子上报交易结果(线下支付)指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——上报交易结果(线下支付) | BYTE | 0x06 |
Data[1-6] | 预留 | BYTE[6] | 填充随机数 |
Data[7-10] | 本次支付总金额 | DWORD | 单位:分 0x0000表示支付失败 |
Data[11-12] | 出礼品通道个数 | WORD | 未出礼仍需上报,但此项置0 |
Data[13-14] | 出礼品通道序号 | WORD | |
Data[15-16] | 出礼品数量 | WORD | 未出礼仍需上报,但此项置0 |
Data[17-20] | 累计出礼品数量 | DWORD | |
Data[21-24] | 购买价格 | DWORD | 单位:分 通过游戏出礼时此项置0 |
Data[25-28] | 游戏价格 | DWORD | 单位:分 通过购买出礼时此项置0 |
Data[29-32] | 此通道支付累计金额 | DWORD | 单位:分 |
支付盒子 -------------> 售货机主板 上报交易结果(线下支付)应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——上报上分结果 | BYTE | 0x06 |
Data[1-6] | 预留 | BYTE[6] |
支付盒子 -------------> 售货机主板 同步本地通道信息指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——同步本地通道信息 | BYTE | 0x08 |
Data[1-2] | 通道总数 | WORD | 小端模式传输 |
Data[3-4] | 通道序号 | WORD | 小端模式传输 |
Data[5-8] | 购买价格 | DWORD | 单位:分;小端模式传输 |
Data[9-12] | 游戏价格 | DWORD | 单位:分;小端模式传输 |
Data[13-14] | 通道货品数量 | WORD | 小端模式传输 |
Data[15-16] | 通道货品容量 | WORD | 小端模式传输 |
Data[17] | 通道名称字段长度 | BTYE | 单位:分 |
Data[18-n] | 通道名称 | BYTE[n] | 支持GB18030,ASCII编码 注意:本字段长度需与Data[17]中数值保持一致 |
售货机主板 ------------->支付盒子 同步本地通道信息应答指令数据区说明
数据字段 | 名称 | 数据类型 | 备注 |
---|---|---|---|
Data[0] | 子命令 ——同步本地通道信息 | BYTE | 0x08 |
Data[1-2] | 通道总数 | WORD | 小端模式传输 |
Data[3-4] | 通道序号 | WORD | 小端模式传输 |