商米团餐机T1D10 使用帮助

一、产品规格

支持活体检测:是

摄像头类型:   金融级别的3D结构光摄像头,蚂里奥S1

处理器:        高通骁龙8核处理器

操作系统:      安卓8.1

内存:           2GB RAM + 16GB ROM

主机尺寸:      209.2X129X36.3mm

防护等级:      IP55

认证信息:      3C、SRRC(无委)

二、安装和配置指南

安装位置:建议先将支架固定在窗口位置,再将设备插入支架中,通过螺丝固定支架与设备。

安装高度:建议机身距离地面高度,依据使用群体的身高采用最合适的距离。

建议摄像头安装高度是支持群体最高、最低身高的平均值。

环境光线:尽量放置于灯光均匀的环境中,切忌灯光太过强烈或太过昏暗,避免刷脸人员的背景光线过强。

启动设备:插入电源,按开机键启动设备。关机状态下点按设备底部开关按钮可启动设备。

网络设置:本机标配有线网络功能,建议用户优先使用有线网络。若有线网络异常,建议配置Wi-Fi网络。

系统设置:本设备收银apk默认设置为霸屏,安装过程若要设置网络、屏幕亮度等可通过同时按下键盘【设置】+【功能】+【+】退出霸屏,进入操作系统桌面。完成后点击桌面收银apk重新启动收银应用。

刷卡支付:用户使用非接NFC卡实现刷卡支付;

三、常见问题

1、设备出现异常或者不连接网络?

-如遇异常情况,设备无法正常工作,应该如何操作?

-建议重启设备后再试

-定期检查插线是否松动,网络环境是否稳定,有利于保障设备良好运行。    

2、如何恢复出厂设置?

-如果按照上述操作后设备仍然无法启动,请扫描机具上支付宝二维码,提交维保任务单。

支付相关问题

3、哪些用户可以使用刷脸支付?       

–仅支持在一脸通行开通代扣及采集过人脸的人员本机才能支持刷脸支付。

4、为什么刷脸支付有时候需要输入身份证号后四位,有时候不需要?

–为了给用户更极致的刷脸付款体验,系统会综合评估当次付款是否需要校验身份证号后四位。

5、刷脸为什么一直刷不过?

–可能由以下原因导致用户刷不过,可以引导用户做相应调整后再做尝试:

确认本人操作:

确认操作正常:尽量保持正面,抬头看摄像头,并且脸部无帽子、墨镜等遮挡。

6、费用收取逻辑是怎么样的?

刷脸支付:  通过人脸识别确认学生身份后通过绑定的支付宝账号进行扣款实现刷脸消费。

刷卡支付:

–非接触卡收单接口,可以使用市面上常用非接卡实现刷卡消费。

–支持NFC非接卡,支持13.56MHz频段,识别兼容市面上常用的各类校园卡(逻辑加密卡、智能卡等如:M1卡,CPU卡等)

四、商米团餐机的新亮点

硬件方面,做了全面优化 

–外观轻巧时尚,团餐机设计更加突出,采用机架分离设计方式支持不同场景的安装; 

–出厂支持有线和无线网络,适应不同网络环境;设备可选Wi-Fi&4G版本,就可以使用4G蜂窝网络; 

–摄像头对强光、逆光做了优化,体验更优; 

–主机配备双屏异显功能,且标配可拆卸数字小键盘,更方便使用;

–主机支持IP55防护等级

–主机支持防油污、V0防火等级; 

五、商米团餐机说明

1、商米团餐机是支付宝授权和认证的团餐机具设备供应商,应用场景、所有功能、软件操作、增值服务完全一致; 

2、商米团餐机在硬件配置、3D结构光人脸识别摄像头、屏幕尺寸等符合团餐市场需求; 

3、商米团餐机在灯光提醒做了增强设计,店员及顾客可以简单直接查看交易成功与否状态。

5、4G设备网络支持哪些卡?

–商米团餐机支持国内全网通,包括移动、联通、电信4G卡,但是要选择同类型大小的卡。

6、我们如何绑定SN码?

–SN码是机器默认的。

7、标配支架目前不能在超市等场景使用,如何解决?

–会同步提供立式支架方案给到ISV,由ISV商户自行按照设计方案制作以及确认是否使用。

8、退货的时候注意什么?

–保持包装完整,配件完整。

9、团餐设备使用的温度是多少?零下可不可以使用?

–零下10度低温压力测试,测试结果正常,可以使用。 

-10~50度基本上可以正常使用。

10、刷脸的时间是多少?

–刷脸反应时间测试正常是1秒左右。

11、接下来是否有扫脸模块接口接输出给商户的计划?

–目前扫脸软件模块是提供标准的接口,外部商户可调用。 

–刷脸+支付需要使用指定摄像头方可; 

–其他:团餐设备目前没有直接的接口输出,如量大,需合作需要单独确定量。

12、如果更换地点使用团餐设备,有什么影响?

–由ISV根据业务情况先进行设备关系解绑,再重新绑定。加载相应新的配置文件使用。

            –

商米蜻蜓T3B00 使用帮助

一、   产品规格

  • 支持活体检测:是
  • 摄像头类型:   金融级别的3D结构光摄像头,蚂里奥S1
  • 处理器:          高通骁龙8核处理器
  • 操作系统:     安卓8.1
  • 内存:            2GB RAM + 16GB ROM
  • 主机尺寸:     213X129X19mm,带支架高度464mm
  • 防护等级:     IP54
  • 认证信息:     3C、SRRC(无委)、入网认证

二、安装和配置指南

  • 安装位置:建议将机具平稳放置到收银台桌面上。
  • 安装高度:建议摄像头距离地面1.3米左右。根据安装高度可以调整机器俯仰角以适配不同身高的用户。
  • 环境光线:尽量放置于灯光均匀的环境中,切忌灯光太过强烈或太过昏暗。
  • 启动设备:插入电源,点按设备背部开关按钮启动设备。
  • 网络设置:本机标配4G网络功能,若4G网络异常,建议根据屏幕引导配置WiFi网络。
  • 收银模式配置:点击键盘【设置】按钮,在屏幕上选择【收银模式】,可以查看并切换收银模式。

            -连接收银机模式:本机支持搭配收银机使用,请使用标配的USB数据线中间的USB A插头连接收银机。

            -独立收银模式:如果没有收银机,请扫码绑定支付宝账号进行独立收款

  • 音量调节:点按设备背部音量键调节音量;点击键盘【设置】键,在屏幕上选择【系统设置】,调节音量。
  • 屏幕亮度调节:点击键盘【设置】键,在屏幕上选择【系统设置】,调节屏幕亮度。

三、连接收银机模式使用指南

  • 收银员在收银机上确认订单金额,并选择使用支付宝收款。
  • 刷脸支付:收银员点击键盘【收款】启动刷脸 / 收银员点击底座上专用收款按键启动刷脸 / 用户点击屏幕开始刷脸。
  • 扫码支付:用户出示支付宝付款码,并对准摄像,距离10-30cm更容易成功。
  • 收银员在收银机上确认支付成功。

四、独立收银模式使用指南

  • 收银员点击键盘输入金额,点击【收款】发起支付。
  • 刷脸支付:用户点击屏幕开始刷脸。
  • 扫码支付:用户出示支付宝付款码,并对准摄像,距离10-30cm更容易成功。
  • 支付成功后,支付宝盒屏幕显示支付金额并播报语音,订单金额将自动转入已绑定的支付宝账户中。

五、常见问题

  • 为什么用户刷脸或扫码完成后收银机未收到付款?

            -连接收银机模式刷脸或扫码后,请在收银机端确认最终的支付结果。 

            -请确认商米蜻蜓机具设备已连接收银机,重新插拔USB线或重启机具后再试。

            -请点击键盘【设置】按钮,在屏幕上选择【收银模式】,确认设备处于连接收银机模式。

  • 为什么使用支付宝付款码没有反应?

            -请提醒用户将付款码对准设备顶部摄像头,建议手机与摄像头保持10-30厘米的距离,扫码成功后会有语音提示。 

            -支付成功后如何退款? 

            -连接收银机模式:请按收银机的退款流程操作。 

            -独立收银模式:请在支付宝中搜索【商家服务】,点击【收款记录】,选中对应的订单后发起退款。

  • 如何更换支付宝收款账号?

            -独立收银模式下,一个商米蜻蜓机具设备可以绑定一个支付宝收款账号。如需更换,请先进行解绑操作。点击键盘【设置】 键,在屏幕上选择【绑定账号】,打开支付宝,扫描屏幕二维码完成解绑。

            -如遇异常情况,设备无法正常工作,应该如何操作?

            -建议重启设备或恢复出厂设置后再试。 

            -定期检查插线是否松动,网络环境是否稳定,有利于保障设备良好运行。    

  • 如何恢复出厂设置?

            -开机状态下,点击键盘【设置】按钮,在屏幕上选择【系统设置】-【系统更新】-【恢复出厂设置】。 

            -设备通电但无法开机时,先按音量+键,同时按住电源键3秒左右,屏幕点亮后松开按键。 

            -如果按照上述操作后设备仍然无法启动,请扫描机具背部二维码,提交维保任务单。

六、刷脸支付相关问题

  • 哪些用户可以使用刷脸支付?

            -暂仅支持中国大陆实名认证账户,且账户需要绑定中国大陆的手机号。

  • 如何开通或关闭刷脸支付?

            -可以在支付宝APP搜索“刷脸设置”,设置“到店刷脸支付”开关状态。

  • 刷脸支付额度是多少?

            -单个支付宝账户单日金额上限5000元。

  • 刷脸支付的扣款顺序是什么?

            -按照用户设置的付款顺序进行轮询支付,如果用户没有设置则按照系统默认的付款顺序进行轮询。具体扣款顺序请参照实际扣款为准。系统默认的付款顺序:信用卡快捷(如支持)、余额、借记卡快捷、余额宝、花呗、亲密付、信用卡快捷(未存卡)(如支持)、借记卡快捷(未存卡)。

  • 为什么刷脸支付有时候需要输入手机号,有时候不需要?

            -为了给用户更极致的刷脸付款体验,系统会综合评估当次付款是否需要校验手机号。

  • 刷脸支付需要输入的手机号是什么手机号?

            -请输入支付宝账号绑定的手机号。可以打开支付宝APP,点击“我的”-“设置”-“手机号”查看。

  • 手机号绑定了多个支付宝账号,刷脸成功后会扣哪个账户的钱?

            -最近一次登录支付宝APP的账号。

  • 刷脸为什么一直刷不过?

            -可能由以下原因导致用户刷不过,可以引导用户做相应调整后再做尝试:(1)确认本人操作:输入手机号对应的支付宝账户,确实为用户本人。用户可通过打开支付宝APP,点击“我的”-点击“支付宝账号栏”-“身份认证”查看,账户实人身份是否为本人。(2)确认操作正常:尽量保持正面,抬头看摄像头,并且脸部无帽子、墨镜等遮挡。

  • 新设备POS机如何和蜻蜓链接

            -蓝牙小键盘插在POS机上(确保蓝牙开启); 

            -蜻蜓设备通电开机后,配网络-配蓝牙键盘-选择POS收银-配置完成; 

            -收银员在POS机上选择商品-支付宝支付;消费者点击屏幕-刷脸支付-收银完成。 

  • 费用收取逻辑是怎么样的?

            1.刷脸支付: 

                 -只要商户使用了支付宝的收单接口如当面付等(直连/间联均可),都能使用刷脸支付,不需要额外签约其他刷脸的销售方案; 

                -如果商户没有签约,在机器启动时,选择“独立收银”(即收钱码开通)模式,用商户支付宝扫一扫绑定,收款即可到自己的绑定支付宝上。 

             2.扫码支付(支付宝): 

                 -只要商户使用了支付宝的收单接口如当面付、开通收钱码等(直连/间联均可),都能使用扫码支付,插在pos机上,但是机具只作为扫码的能力,承担类似“扫码枪”的工作; 

                 -扫码支付(非支付宝):非支付宝的收单接口,也可以使用蜻蜓,但是机具只作为扫码的能力,承担类似“扫码枪”的工作。

  • 商米蜻蜓的新亮点

            硬件方面,做了全面优化 

                -外观轻巧时尚,蜻蜓眼设计更加突出,而且VESA接口设计支持安装不同场景; 

                -出厂内置联通4G SIM卡,尽可能适应弱网环境; 

                -摄像头对强光、逆光做了优化,体验更优; 

                -主机预留收款按键,更方便使用; 

            软件方面:商家轻松自定义 

                -如会员功能,用户在支付成功页一键注册会员; 

                -如付款成功页,用户可以选择服务评价; 

                -如实现核验身份功能。

  • 商米蜻蜓与支付宝F4操作上的差别?

            -商米蜻蜓是支付宝授权和认证的蜻蜓机具设备供应商,应用场景、所有功能、软件操作、增值服务完全一致; 

            -商米蜻蜓在硬件配置、3D结构光人脸识别摄像头、屏幕尺寸完全一致; 

            -除外观设计存在差异外,商米蜻蜓在灯光提醒做了增强设计,店员及顾客可以简单直接查看交易成功与否状态。

  • 已经接过收单,蜻蜓是否需要单独对接?

            -其他非支付宝的收单接口,也可以使用支付,但是机具只作为扫码的能力; 

            -如果是第三方收单机构,已经接了支付宝的收单接口,蜻蜓设备不受任何影响,我们只是做了“扫码枪”的工作。 

  • 为何用蜻蜓刷脸支付花呗没扣款,扣的是银行部分的,自己设置了扣款顺序的?

            -原因是:要看商户是否开通花呗的收款支持。商户使用蜻蜓绑定的收钱码,然后自己没有开通花呗收款,可能会导致上述消费者看到没有使用花呗扣款。

  • 设备的4G网络支持哪些卡?

            -商米蜻蜓支持国内全网通,包括移动、联通、电信SIM卡,但是要选择同类型大小的卡。

  • 蜻蜓附带的SIM卡免流量时间是多久?

            -免费使用1年;

  • 该SIM卡是否在其他设备如手机、pad上使用?

            -不可以,专机专用。

  • 如选择了pos收银,换收银机有无影响?

            -售卖:无影响,即插即用,收银机发支付需求给蜻蜓,蜻蜓收款后网络通知收银机; 

            -租赁:商户选择了pos收银,不受影响,因为租金是和申请的商户id相关联的,所以移机到同一个商户的不同门店没有影响。

  • 我们如何绑定SN码?

            -SN码是机器默认的。 如果是没有pos系统的,在系统启动时选择独立收银版,扫码绑定机器。 如果有pos系统的,在系统启动时选择后,即插即用。

  • 标配支架目前不能在超市等场景使用,如何解决?

            -目前在做夹子形状支架,预计年后可以提供小批量的给商户使用。

  • 同一个门店申请的机具,可以实现一个机具刷脸支付后,其他设备不需要再输入手机号了吗?

            -大部分情况是这样,但也有部分命中的用户需要输入4位手机尾号。

  • 退货的时候注意什么?

            -保持包装完整,配件完整。心怡仓库收到退货的设备后,需要关注一个点是机器后面里面插了4G的卡,如果遗失了不能支持退款。

  • 商户如果使用了自行的wifi,4G卡是不是就不会被使用激活?

            -这个卡在次月会自动激活使用的。

  • 如何发起退款?

            -pos版时,在商户的收银机上发起退款即可; 

            -个人版时,可以在商家手机app里发起退款。

  • 蜻蜓设备使用的温度是多少?零下可不可以使用?

            1、零下10度低温压力测试,测试结果正常,可以使用。 

            2、-10~50度基本上可以正常使用。

  • 刷脸的时间是多少?

            -刷脸反应时间也更网络状态有关,我们测试情况在网络状态好的情况下正常是1-2秒。

  • 接下来是否有扫脸模块接口接输出给商户的计划?

            -目前扫脸软件模块是提供原子化的接口,外部商户可调用。 

            -刷脸+支付需要使用指定摄像头方可; 

            -其他:蜻蜓设备目前没有直接的接口输出,如量大,需合作需要单独确定量。

  • 独立收银模式下,商户如何退款?

            1、商户登录到手机支付宝上,进行。 

            2、个人收银模式退款。 

                -具体位置:商家服务-收款记录-详情-发起退款

  • 如果更换地点使用蜻蜓,有什么影响?

            -如果,之前选择了独立收银模式的,需要先解绑。 支付宝搜索:收银设备–(绑定的信息)蜻蜓管理–解除绑定。 

            -如果,商户选择了pos收银,不受影响,因为租金是和申请的商户id相关联的,所以移机到同一个商户的不同门店没有影响。

  • 蜻蜓现在能不能识别店铺的会员二维码?

            – 扫码支付可以成功,识别会员二维码需要收银机来识别

  • 蜻蜓对当面付的版本是否有要求?

            -目前没有对当面付,这个是收银台对接的。我们蜻蜓没有要求,我们只是相当于扫码枪。

  • 通过蜻蜓只签约收钱码想要刷脸支付是否可以?

            -在机器初始化使用时,机器上选择“独立收银”即是收钱码。目前两个版本都是现成的,在初始化设置界面,会让你选择:“收银机模式”/“独立收银模式”

打印服务开发文档

商米收银管家FAQ

问:商米收银管家能为软件商做什么?

答:商米收银管家封装了一个标准的支付SDK接口,方便软件商与支付通道做对接。一次对接后,即可适配商米全系列安卓收银设备。

 

问:商米收银管家目前能提供哪些支付方式?

答:目前可提供聚合扫码B扫C(微信扫码和支付宝扫码)、支付宝人脸支付、银联卡刷卡。将陆续开放更多支付方式。

 

问:商米收银管家目前有哪些支付通道?

答:目前商米收银管家已经接入盛付通通道,以及支付宝刷脸付官方通道。未来将接入更多其他支付通道。

 

问:对上述支付通道,商米收银管家目前能提供什么费率?

答:根据软件商选择不同的支付通道,商米收银管家提供的费率也有所不同。具体费率详情请与商米收银管家BD联系。

 

问:商户资金如何结算,由商米公司打款给商户吗?

答:商米公司不会触碰商户资金。所有款项均由持有第三方支付牌照的机构或银行直接结算给商户。

 

问:商米收银管家是否支持公众号支付,小程序支付等线上支付方式?

答:目前尚不支持。公众号、小程序支付、C扫B(码牌),H5支付,web支付,app支付等将在后续陆续上线。

 

问:商米收银管家是否支持即时到账,如何收费?默认到账时效如何?

答:即时到账服务由支付公司提供。不同的支付公司提供即时到账的方式、收费标准不同。目前已经对接的盛付通尚不支持即时到账。后续将开通此项业务。盛付通默认到账时效为T+1。

 

问:商户进件时,商户跟谁签约?软件商(服务商)跟谁签约?

答:商户与持有第三方支付牌照的支付机构签署入网协议(不同通道的协议方式不同);软件商(服务商)与商米公司签约成为商米收银管家服务商。商户与软件商(服务商)的协议由双方自行约定。

 

问:软件商对商米收银管家有合作意愿,业务如何对接?

答:完整的业务合作包括两部分:技术对接与商务协议签署,这两部分可以并行操作。软件商表达合作意愿后,商米收银管家运营将协调商米开发团队与软件商开发团队进行对接(拉微信群)。另外,软件商可以与商米收银管家BD签署“商米收银管家服务商协议“,软件商成为商米收银管家服务商后,可以拓展商户并从交易流水中获得支付分润。

 

问:商户如何进件?是否有自动进件接口?进件时效?

答:目前:软件商(商米收银管家服务商)收集商户进件资料,线下给商米收银管家运营,由商米收银管家运营在支付通道后台进件。如果软件商需要,商米收银管家可提供进件接口给软件商。2月中旬以后,商米收银管家将提供进件资料收集工具(小程序),供商户使用。进件时效依据具体支付通道而定。一般在T+1到T+3之间。

 

问:商户如何对账,软件商是否有后台查看商户交易信息,分润信息?

答:商户进件成功后,支付机构会将后台账户密码发送给商户。商户可以登陆支付机构后台进行交易查询。软件商可登陆商米提供的合作伙伴平台,管理名下商户,查看商户交易,查看服务商分润信息。

 

问:软件商是否能拓展非自身渠道设备的商户?

答:目前,软件商只能拓展本渠道下的商户。商户使用的设备必须隶属于该软件商渠道下,方可开展支付业务。

 

问:软件商与商米收银管家对接后,能否在非商米设备上使用?

答:软件商与商米收银管家对接,商米收银管家为一个独立APK,该APK目前只能在商米设备上运行。

 

问:刷脸付是否可以走自己的支付通道?

答:软件商在商米自助收银设备上使用刷脸付,需要通过商米收银台调用支付宝官方刷脸付通道。

 

问:给商户开通刷脸支付需要提交给商米什么资料?刷脸付支付成功,收到的款项如何流转?

答:商户需提前开通支付宝当面付。开通后,请将该当面付的支付宝账户、联系人姓名、联系人电子邮箱、联系人电话递交给商米公司。刷脸付支付成功后,款项入商户绑定的支付宝账户中。

扫码头返回类型


Number Code Type CodeID Zebra CodeID Newland CodeID Fp/NL Notice   Example  
1 Code128 D j j Newland,Fp/NL:
AIM-128 — f
SETTING 128 — t
     
2 UCC·EAN128(GS1-128)   j u        
3 ISBT
128
D j  j  Zebra:
ISBT 128 Concatenated — D
     
4 EAN8 A d g        
5 EAN13 A d d        
6 UPC-E A c h        
7 UPC-E1 A            
8 UPC-A A c c   Instruction
9 Interleaved
2 of 5(ITF)
F e e Newland,:
ITF-6 —  e
ITF-14 — e 
Fp/NL:
ITF-6 —  r
ITF-14 — q
Head noun Paraphrase Scanner ID
10 Matrix
2 of 5
S v v   Nls NewLand (EM2096) ]N
11 Code39 B b b Zebra:
Trioptic Code 39 — M 
Zebra Zebra (4710) ]Z
12 Codabar C a a   Fp(Falcon) Falcon(BSM1825) ]FN
13 Code93 E i y   NL NewLand(EM1365) ]FN
14 GS1
DataBar(RSS)
R R R        
15 Composite-UCC T     Zebra:
MiroQRTCIF Linked Code 39(TLC 39) — T 
     
16 Composite-UPC              
17 Code11 H H z        
18 ISBN(Bookland
EAN)
L B B   Return: Scanner ID+Code ID  
19 Industrial
2 of 5
  D i        
20 Standard
2 of 5
  s s   Example:
scanner:Zebra
code content:123456
code type:code 128

return:]ZD123456

21 Discrete
2 of 5(DTF)
G            
22 Chinese
2 of 5
U            
23 Korea
3 of 5
V            
24 Plessey   p p Newland:
UK Plessey — p
     
25 MIS-Plessey J m m        
26 Composite
A/B
             
27 Composite
C
             
28 ISSN
EAN
X n n        
29 PDF417 X r          
30 QR
Code
P01 Q          
31 Aztec z            
32 DataMatrix P00 u          
33 HanXin P0H h          
34 MaxiCode P02            
35 AustralinPostal P08            
36 US
Postnet
P03            
37 US
Planet
P04            
38 Uk
Postal
P06            
39 Japan
Postal
P05            
40 Deutsche
12
  l l        
41 Deutsche
14
  w w        
42 Code32 B b b         
43 Netherlands
KIX Code
P08            
44 USPS
4CB/One Code/Intelligent Mail
P0A            
45 UPU
FICS Postal
P0B            
46 Signature
Capture
P0X            
47 Coupon
Code
N            

磁条卡数据格式

磁条卡数据格式符合ISO7810格式


第1磁道数据格式

数据编码最大记录长度为79个字符,格式如下所示。

字段 长度 内容 说明
起始字符 STX 1 % 第一磁道起始标识
格式代码 FC 1 B 表明格式是B
主账号 PAN <=19   标明可以处理交易的发卡机构(issuer identification)
和持卡者(individual account identification)
字段分隔符 FS 1 分隔符
姓名 NM 2~26   持卡人的姓名
字段分隔符 FS 1 分隔符
失效日期 ED 4 格式YYMM 如不定义失效日期该字段应为一分隔符
服务代码 SC 3   标明银行卡可使用的服务类型,
如不存在或不指定该字段以一个分隔符代替
附加数据 DD 11   存放卡片验证码(CVN)及对发卡机构
有意义的任意数据,应使整个磁道数据
不超过79个字符
结束标识 ETX 1 ? 第一磁道结束标记
纵向冗余校验字符 LRC 1 ‘ ‘  
备用数据 13 空格填充  

第2磁道数据格式

数据编码最大记录长度为40个字符,格式如下表所示。

字段 长度 内容 说明
起始字符 STX 1 第二磁道起始标识
主账号 PAN <=19   标明可以处理交易的发卡机构和持卡者
字段分隔符 FS 1 = 分隔符
失效日期 ED 4 格式YYMM 如不定义失效日期该字段应为一分隔符
服务代码 SC 3   标明银行卡可使用的服务类型,
如不存在或不指定该字段以一个分隔符代替
附加数据 DD 13   存放卡片验证码(CVN)及对发卡机构
有意义的任意数据,应使整个磁道数据
不超过40个字符
结束标识 ETX 1 ? 第二磁道结束标记
纵向冗余校验字符 LRC 1 _  

第3磁道数据格式

共113位,其中107位是银联中三磁道数据最大长度,格式如下表所示。

字段 长度 内容 说明
起始字符 STX 1 第三磁道起始标识
格式代码 FC 2 99  
主账号 PAN 16   16位卡号,
标明可以处理交易的发卡机构和持卡者
字段分隔符 FS 1 = 分隔符
国家代码 CC 3 156 如存在应为CCC格式的3个数字,
标明可以处理由银行卡产生交易的国家
货币代码 3   表明结算时使用的货币类型:3位数字
金额指数 1   决定周期授权量与本周期余额两字段的基值
周期授权量 4   由发卡机构自定授权量,
表示在一个周期内累积交易不能超过的金额
本周期余额 4   当前周期内的可用余额
周期开始日期 4 格式YDDD 表示一个新周期开始的日期
周期长度 2   2位数字,表示所有交易的累积值不能超过授
权量的时间期限
密码重输次数 1   记录允许未成功输入密码的次数
个人授权控制参数 6   提供一种可选择的安全性能
交换控制符 1   标明银行卡适用于交换的范围
PAN的TA和SR 2   定义PAN的账户类型和可提供的服务
SAN-1的TA和SR 2    
SAN-2的TA和SR 2    
失效日期 ED 4 格式YYMM  
卡序列号 1   区别具有相同PAN的卡,由发卡机构定义,
在最初发卡或卡失效后换卡时赋值
卡保密号 1   用于建立磁条所含数据与物理卡的联系
SAN-1 8   标明第一个可选用的辅助账号
(first subsidiary account number)
字段分隔符 FS 1 =  
SAN-2 0   标明第二个可选用的辅助账号
(second subsidiary account number)
字段分隔符 FS 1 =  
传递标志 1   提供可减少传送交换信息长度的功能,
它表明交换信息是否包含附加数据的内容
加密校验数 CCD 6   通过使用加密公式提供一种校验该磁道上
数据完整性的方法
附加数据 DD 8   存放卡片验证码(CVN)及对发卡机构
有意义的任意数据,应使整个磁道数据
不超过113个字符
结束标志 ETX 1 ?  
纵向冗余校验码 LRC 1 ‘ ‘  
备用数据 19 空格填充  
填充数据 6 空格填充至8的倍数位  

自定义客显程序开发说明

更新内容

2018-01-15
  • 去掉常用方法、关键类说明;
  • 更新Demo源码;
  • 更新双屏应用开发调试的方法;

一、简介

T1双屏机器有三种组合:主机、主机+7寸副屏、主机+14寸副屏。主副屏都是运行SUNMI OS定制系统,通过商米已封装好的接口实现通信。主屏主要用来运行业务APP,例如:收银系统。副屏主要面向顾客显示结算、广告内容。

双屏通信原理:

image

从下到上依次为:

  • Driver:该层是最底层的通信协议,开发者无需关注。
  • Service:该层是商米封装的一个通信服务,开发者也无需关注。
  • SDK:该层是T1自带的副显程序使用的通信接口,自定义的客显程序调用的是该层的接口。
  •  APP:指的是开发者自己的业务app和内置的副显程序。

开发者有两种方式实现副屏显示:

  • T1副屏系统内置了默认副屏显示APP,内置多个常用模板。开发者仅需通过商米的SDK向副屏发送正确格式的数据,即可实现副屏显示内容。
  • 开发自己副屏显示APP,需要自行处理数据的收发、内容显示等动作;

虽然商米封装的内置客显程序能满足绝大部分开发者的使用需求,但是考虑业务的多样性,商米秉持开放的原则,支持开发者自己定义副屏显示。

下文将对开发自定义双屏应用进行说明。

二、如何调试应用

由于主副屏是通过USB通信的,当主/副屏插入USB线时,主副屏的连接会断开,导致无法调试设备。商米提供的解决方案是:将开发电脑与将要调试的T1主机处于同一个局域网络环境下,通过网络对设备进行调试。

如何调试:

1、开启USB调试,及调试权限;

    操作说明

2、通过网络对设备进行ADB调试;

    操作说明

三、如何开发自定义双屏应用

(强调:Sunmi OS是基于Android6.0定制,Android6.0+ 要求部分敏感权限需要动态申请)

1、初始化配置

以下将基于Demo讲解自定义双屏应用如何实现。

步骤1:

    下载DoubleAPP资源文件。(源码使用AndroidStudio编写)

步骤2:

    参照Demo源码,直接在Android Studio的app module下的build.gradle文件中声明以下代码。

compile 'com.sunmi:DS_Lib:1.0.9'  //商米提供的lib库,包含已封装好的接口
compile 'com.google.code.gson:gson:2.6.2'  //gson任意版本

步骤3:

    在清单文件AndroidMainfest.xml的节点下注册广播(开发者可参考Demo源码,自行实现广播类)。

"...广播类...">  //接收数据的广播
"com.sunmi.hcservice"/>
"com.sunmi.hcservice.status"/>

步骤4:

    在适当的位置初始化SDK代码,可以参考Demo源码。

private void initSdk() {
mDSKernel = DSKernel.newInstance();  
mDSKernel.init(this, mIConnectionCallback);  //绑定服务的回调
mDSKernel.addReceiveCallback(mIReceiveCallback);  //双屏通信接收数据回调
}

2、开发双屏应用

参考Demo源码,实现双屏数据交互。具体方法可以自行定义,此处不做示例。

当主屏与副屏的业务逻辑都已经实现了,需要将主屏与副屏的业务代码合在一个apk里(因为应用市场的安装逻辑是将一个应用分别安装到主副屏,故双屏应用只需提交一个APK)。

四、发布应用前的准备

自定义双屏应用已经开发好了,那接下来就要将应用发布至商米应用市场,分发出去。在此之前,需要再做一件重要的步骤,就是让应用市场能够识别该应用是双屏应用。

在应用的AndroidManifest.xml中添加一行标识代码,这样,该应用在应用市场上将显示为双屏应用,安装时,应用市场会将该应用分别安装在主屏和副屏。 "sunmi_dual" android:value="open"/>

调试说明

背景

  • 为什么需要通过网络调试?

    目前T1主屏与副屏通过USB连接通信,主屏作为主设备,副屏作为从设备,USB外设也是从设备。当PC通过USB线连接主屏(或副屏)进行调试时,PC作为主设备,主屏(或副屏)会作为从设备,此时主屏与副屏的通信会断开,外接USB设备的连接也会断开。因此,PC通过连USB线只能单独调试主屏或是副屏,并且会导致USB外设连接断开,也就是无法调试同时用到主副屏的应用,也无法调试使用到USB外设的应用。

  • 商米提供了解决以上问题的解决方案:

    PC通过有线或无线局域网连接T1设备,可以在不影响T1双屏通信及外设使用的情况下,对使用T1双屏或是使用USB外设的应用进行调试。

调试原理

å--å±-ADBè°-è¯-

说明:

  • T1的主副屏已经通过内置USB线连接,无需另外再通过USB线连接;
  • PC需要通过网络连接T1双屏机器(主屏);
  • 调试主屏:PC直接通过WiFi/有线网络调试主屏;
  • 调试副屏:PC先通过网路连接主屏,通过主屏桥接来调试副屏;

前置条件:

  1. WiFi/有线局域网,网络连接正常;
  2. PC与T1主屏在同一个局域网内;
  3. T1双屏系统版本均支持双屏ADB调试;(14主屏:V1.11.4及以上,14寸副屏:V1.8.3及以上)
  4. T1主屏开启USB调试;(T1主屏系统设置-开发者设置-USB调试 开启)
  5. T1双屏机器上不要外接USB调试线;(主屏/副屏外接USB调试线会导致双屏通讯断开,将只能调试其中一块屏幕)
  6. PC支持ADB调试环境;
  7. T1主副屏通讯正常;(打开主屏“副屏设置”,可查看副屏的系统版本信息)

操作步骤:

1.获取主屏IP地址

    在T1主屏系统设置-关于-状态信息查看主屏IP,记录IP地址。

    例如:

192.168.1.12

2.添加终端-主屏

    在PC上打开终端命令行工具,输入以下命令:

adb connect 192.168.1.12:5555

    说明:“192.168.1.12”要替换为记录的主屏IP地址,主屏对应的端口号是“5555”,不可修改。此时应该显示:Connected to 192.168.1.12:5555,表示已连接上主屏。

3.添加终端-副屏接步骤2,输入以下命令:

adb connect 192.168.1.12:5554

    说明:“192.168.1.12”要替换为记录的主屏IP地址,副屏对应的端口号是“5554”,不可修改。此时,应该会显示:Connected to 192.168.1.12:5554,表示已连接上副屏。
强调:必须先连接上主屏,才能连接副屏。

4.查询已添加的终端

    接步骤2或者步骤3,输入以下命令:

adb devices

    说明:此时,应该会显示1~2个终端设备。

5.调试指定终端

    接步骤3,调试主屏需输入以下命令:

adb -s 192.168.1.12:5555 shell ls

    说明:“192.168.1.12”要替换为主屏的IP地址,主屏对应的端口号是“5555”,不可修改。此时,应当显示主屏存储的目录。“shell ls”可以替换为其它的ADB命令。

    接步骤3,调试副屏需输入以下命令:

adb -s 192.168.1.12:5554 shell ls

    说明:“192.168.1.12”要替换为主屏的IP地址,副屏对应的端口号是“5554”,不可修改。此时,应当显示副屏存储的目录。“shell ls”可以替换为其它的ADB命令。

6.断开终端连接

    接步骤3,断开主屏副屏需输入以下命令:

adb disconnect 192.168.1.12:5555

    说明:“192.168.1.12”要替换为主屏的IP地址,主屏对应的端口号是“5555”,不可修改。此时,应当同时断开主屏和副屏的连接。
    强调:断开主屏连接时,会同时断开副屏连接。

示意图

添加终端:

WechatIMG53

调试指定终端-主屏:

WechatIMG39

调试指定终端-副屏:

WechatIMG40

断开终端连接-主屏和副屏:

截图 2017-07-13 12时15分48秒

USB、串口设备使用说明文档

1. 简介:

外设接口 LAN 口,钱箱口, usb2.0 口,串口,耳机孔等通用通信接口。
本文主要介绍钱箱口,usb 口和串口的使用方式。
图片 2

2.接口说明

1)钱箱口: 钱箱口使用RJ12接口。
开发者可以通过向钱箱口发送数据来控制钱箱。 钱箱开发者文档及资源文件 2)串口:  串口使用 RJ11 接口。
开发者可以通过串口的数据发送来控制外设。 由于安全考虑,不支持串口节点遍历,但可以直接打开端口进行通信
(机器底座串口的节点路径/dev/ttyHSL1)  串口参考demo ,JNI参考 通信文档事例:Jaynes 串口电子秤通信文档(不同电子秤通信协议需参考每家厂商提供的
文档)   3) USB 口:  支持 USB2.0 协议的 USB 设备。 USB 通信开发者文档 3.1 获取 USB 设备的 PID/VID 方法1:java代码

try {
//获得外接USB输入设备的信息
Process p=Runtime.getRuntime().exec("cat /proc/bus/input/devices");
BufferedReader in = new BufferedReader(new
InputStreamReader(p.getInputStream()));
String line = null;
while((line = in.readLine())!= null){
}
String deviceInfo = line.trim();
//对获取的每行的设备信息进行过滤,获得自己想要的。
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
*deviceinfo中包含每个设备的pid和vid* 

方法2:adb命令 

adb shell cat /proc/bus/input/devices
图片 1

  3.2 通用 USB 外设

  • HID设备

默认支持 HID 协议设备(鼠标键盘扫码枪等),可即插即用。  HID 扫码枪 HID扫码枪可即插即用:连接商米设备,在商米设备上打开一个可编辑框并获取焦点,扫码。此时编辑框应该被输入条码或者二维码内容。从代码获取扫码内容可参考USB 外设通信谷歌开发者文档

  • U盘

支持的U盘格式:  FAT32:可读可写;NTFS:可读不可写 ;exFAT:不支持

  • 摄像头

商米支持 USB UVC 摄像头 (如LogitechC170) 开发包 Demo源码Github源码地址

  • 商米读写器

侧边栏可接入商米读卡器(刷卡槽接口)

66D031F8-2666-49ED-8E7A-A6C88572BEE7

商米读卡器包含两部分,一部分为磁条卡刷卡,磁条卡刷卡可参考商米读卡器开发包和读卡器demo。另一部分为nfc,nfc为android原生接口,可参考android nfc开发文档

商米读卡器开发包
商米读卡器demo
商米读卡器demo源码
  • 第三方通用读写器

商米目前已经支持四款第三方usb通用读写器,开发者可参考商米提供的demo做读卡写卡操作。

  1. 上海亿矽智能科技有限公司UM002读卡器
  2. 深圳市德卡科技有限公司T10读写器(需支持android版本,电源充电版)
  3. 香港龙杰智能卡有限公司ACR1281U-C1读写器
  4. 香港龙杰智能卡有限公司ACR1281U-K1读写器

开发文档2.0

通用读写器demo

通用读写器demo源码

T1双屏通信接口文档

关键类说明

包 sunmi.ds
DSKernel类:SDK核心类,该类暴露了向副屏发送数据、初始化SDK的函数* newInstance(): DSKernel

说明:实例化DSKernel类的静态函数。

getDSDPackageName(): String

说明:获取副屏接收数据的app包名的静态函数。
返回值:packageName,副屏负责接收数据的App包名

init(Context contetx, IConnectionCallback stateCallback, String vicePackageName): void

说明:初始化SDK。
参数:
contetx:android上下文对象。
stateCallback:与副屏的连接状态回调。
vicePackageName:副屏接收数据的app包名,传null或空字符串则默认接收数据的app为Sunmi的副屏默认App。

init(Context contetx, IConnectionCallback stateCallback): void

说明:初始化SDK。
参数:
contetx:android上下文对象。
stateCallback:与副屏的连接状态回调。

isConnected(): boolean

说明:判断双屏通讯连接是否畅通
返回值:isConn true为畅通,false为断开。

sendData(DataPacket pack): void

说明:发送数据。
参数:
pack:DataPacket类型的对象,封装了要发送的数据。

sendCMD(String recePackageName, String cmd, long fileId, ISendCallback callback): void

说明:发送CMD命令包,可指定要使用的缓存文件id。
参数:
recePackName:接收端包名。
cmd:命令。
fileId:要使用的缓存文件id,如果没有则传0。
callback:发送结果回调。

sendCMD(DataPacket dataPacket): void

说明:发送CMD命令包,可指定要使用的缓存文件id。
参数:
dataPacket:CMD类型数据包。

sendQuery(DataPacket mPack, QueryCallback callback): void

说明:发送数据,向副屏发送查询数据包时使用。
举例:在用户协议层,主屏向副屏发送一个表示查询副屏亮度的Query数据包,副屏App收到后获取亮度再调用
sendResult(long queryId)函数向主屏发回一个携带亮度的结果数据包,此Result数据包的queryId必须与Query
数据包的taskId一致,主屏才能识别到是之前的查询结果。
注意:使用QueryCallback接收结果数据包时,通过addReceiveCallback()注册的回调实例将不会被调用。
参数:
pack:DataPacket类型的对象,封装了要发送的数据。
callback 查询结果回调

sendQuery(String recePackageName, String queryStr, ISendCallback sendCallback, QueryCallback callback): void
说明:发送数据,向副屏发送查询数据包时使用。
举例:在用户协议层,主屏向副屏发送一个表示查询副屏亮度的Query数据包,副屏App收到后获取亮度再调用
sendResult(long queryId)函数向主屏发回一个携带亮度的结果数据包,此Result数据包的queryId必须与Query
数据包的taskId一致,主屏才能识别到是之前的查询结果。
注意:使用QueryCallback接收结果数据包时,通过addReceiveCallback()注册的回调实例将不会被调用。
参数:
recePackageName:接收端包名。
queryStr:要携带的字符串数据
sendCallback:发送结果回调
callback:查询结果回调

sendResult(String recePackageName, String resultStr, long queryId, ISendCallback sendCallback): void

说明:发送Result数据包。
参数:
recePackName:接收端包名。
resultStr:查询结果。
queryId:Query数据包的taskId。
sendCallback:发送结果回调。

sendFile(String recePackName, String filePath, ISendCallback callback): long

说明:发送文件。
参数:
recePackName:副屏接收的app package name。
filePath:文件路径。
callback:发送结果回调。
返回值:taskId,维护此任务Id直至收到发送成功的回调时可以向副屏发送指令对文件做自定义操作,比如:显示图片、打开文件等操作。
注意:文件传输到副屏以后会被缓存起来并且与返回的taskId形成映射关系,若想长期复用该文件则应将taskId持久化维护起来。

sendFile(String recePackName, String msg, String filePath, ISendCallback callback): long

说明:发送一个文件+String类型的数据
参数:
recePackName:副屏接收的app package name。
msg:String类型的数据,例如:一个json格式的字符串、一段文字信息等…
filePath:文件路径。
callback:发送结果回调。
返回值:taskId,维护此任务Id直至收到发送成功的回调时可以向副屏发送指令对文件做自定义操作,比如:显示图片、打开文件等操作。
注意:文件传输到副屏以后会被缓存起来并且与返回的taskId形成映射关系,若想长期复用该文件则应将taskId持久化维护起来。

sendFiles(String recePackName, String msg, List files, ISendFilesCallback callback): long

说明:发送多个文件+String类型的数据
参数:
recePackName:副屏接收的app package name。
msg:String类型的数据,例如:一个json格式的字符串、一段文字信息等…
files:文件路径集合。
callback:多文件发送结果回调。
返回值:taskId,维护此任务Id直至收到发送成功的回调时可以向副屏发送指令对文件做自定义操作,比如:显示图片、打开文件等操作。
注意:文件传输到副屏以后会被缓存起来并且与返回的taskId形成映射关系,若想长期复用该文件则应将taskId持久化维护起来。

checkFileExist(long fileId, final ICheckFileCallback callback): void

说明:检查fileId对应的文件在副屏是否存在
参数:
fileId:文件Id。
callback:检查结果回调

addConnCallback(IConnectionCallback callback): void
说明:注册一个监听连接的回调,可注册多个。
参数:
stateCallback:与副屏的连接状态回调。

removeConnCallback(IConnectionCallback callback): void
说明:移除监听连接的回调。
参数:
stateCallback:与副屏的连接状态回调。

checkConnection(): void
说明:检测与副屏的连接状态,有结果会回调注册的IConnectionCallback。

addReceiveCallback(IReceiveCallback receiveCallback): void
说明:注册数据接收回调,可注册多个。
参数:
receiveCallback:接收端用于接收发送端数据的回调接口。

removeReceiveCallback(IReceiveCallback receiveCallback): void
说明:移除数据接收回调。
参数:
receiveCallback:要注销的回调实例。
FilesManager类:持久化维护缓存接收到的文件,以发送文件任务的taskId为key缓存DSFile、DSFiles。* getFile(Long taskId): DSFile说明:根据任务ID获取文件。
参数:
taskId:文件对应的任务ID。

getFiles(Long taskId): DSFiles说明:根据任务ID获取多个文件。
参数:
taskId:文件对应的任务ID。
—>

包 sunmi.ds.callback
IReceiveCallback类:接收数据时的回调接口。* onReceiveData(DSData data): void说明:接收到数据时的回调。
参数:
data:接收到的数据

onReceiveFile(DSFile file): void说明:接收到单个文件时的回调。
参数:
file:接收到的文件

onReceiveFiles(DSFiles files): void说明:接收到>=1个文件+一段String类型数据时的回调。
参数:
files:接收到的文件+String数据

onReceiveCMD(DSData cmd): void说明:接收到CMD类型数据时的回调。
参数:
cmd:接收到的CMD类型的数据

QueryCallback类:接收到查询结果数据包时的回调。* onReceiveData(DSData data): void说明:接收到结果数据包时的回调。
参数:
data:接收到的数据

IConnectionCallback类:双屏通讯连接状态的回调接口,所有回调函数都运行在子线程。* onDisConnect(): void说明:连接断开时的回调。

onConnected(ConnState state): void说明:连接状态更新时回调。连接状态分为3种:1.与本地service链接正常、2.与副屏service连接正常(处于这种状态下就可以向副屏发送数据了)、3.与副屏APP连接正常。
参数:
state:连接状态

ICheckFileCallback类:检查文件结果回调接口。* onCheckFail(): void说明:检查失败(通讯失败)。

onResult(boolean exist): boolean说明:检查失败(通讯失败)。
参数:
exist:true表示存在,false表示不存在。

IConnectionCallback类:双屏通讯连接状态的回调接口,所有回调函数都运行在子线程。* onDisConnect(): void说明:连接断开时的回调。

onConnected(ConnState state): void说明:连接状态更新时回调。连接状态分为3种:1.与本地service链接正常、2.与副屏service连接正常(处于这种状态下就可以向副屏发送数据了)、3.与副屏APP连接正常。
参数:
state:连接状态

ISendCallback类:发送String数据或单个文件的回调接口,所有回调函数都运行在子线程。* onSendSuccess(long taskId): void说明:发送成功时的回调。
taskId:任务Id,对应发送的数据或文件

onSendFail(int errorId, String errorInfo): void说明:发送失败时的回调。
参数:
errorId:错误识别码。
errorInfo:错误描述。

onSendProcess(long totle, long sended): void说明:发送进度的回调。
参数:
totle:数据的总大小,单位:byte。
sended:已发送的数据大小,单位:byte

ISendFilesCallback类:发送>=1个文件+String数据的回调接口,所有回调函数都运行在子线程。* onAllSendSuccess(long fileId): void说明:多个文件都发送成功时的回调。
fileId:任务Id也是缓存在副屏文件对应的fileId。

onSendSuccess(String path, long taskId): void说明:某一个文件发送成功时的回调。
taskId:任务Id,发送多个文件都属于同一任务所以taskId都相同。

onSendFail(int errorId, String errorInfo): void说明:发送String数据失败时的回调,String数据发送失败后不会继续发送文件。
参数:
errorId:错误识别码。
errorInfo:错误描述。

onSendFileFaile(String path, int errorId, String errorInfo): void说明:发送某一个文件失败时的回调。
参数:
path:发送失败对应的文件路径。
errorId:错误识别码。
errorInfo:错误描述。

onSendProcess(String path, long totle, long sended): void说明:发送某个文件的进度回调。
参数:
path:对应的文件路径。
totle:数据的总大小,单位:byte。
sended:已发送的数据大小,单位:byte
—>
<— 包 sunmi.ds.data *DataPacket类:封装了发送数据和发送回调,调用DSKernel类的sendData(DataPacket pack)函数时需要的参数实体类。DataPacket.Builder类:DataPacket的builder类。 Builder(DSData.DataType dataType)说明:构造函数。
参数:
dataType:要build的数据类型。

recPackName(String recPackName): Builder说明:指定接收数据的app包名。
参数:
recPackName:接收数据的app包名。
返回值:Builder实例

data(String data): Builder说明:指定要发送的数据。
参数:
data:要发送的String数据。
返回值:Builder实例

taskId(long taskId): Builder说明:指定任务Id,不指定则自动生成。
参数:
taskId:任务Id。
返回值:Builder实例

fileId(long fileId): Builder说明:指定缓存文件Id。
参数:
fileId:缓存文件Id。
返回值:Builder实例

queryId(long queryId): Builder说明:指定Query数据包的Id。
参数:
fileId:Query数据包的Id。
返回值:Builder实例

isReport(boolean isReport): Builder说明:指定是否需要结果回调。
参数:
isReport:是否需要结果回调。
返回值:Builder实例

addCallback(ISendCallback callback): Builder说明:设置发送结果的回调实例。
参数:
callback:发送结果的回调实例。
返回值:Builder实例

build(): DataPacket说明:build一个DataPacket实例。
返回值:DataPacket实例

DSData类:双屏通讯的数据封装。* sender: String说明:发送端app包名。

taskId: long说明:任务Id。

fileId: long说明:缓存文件Id。

queryId: long说明:Query数据包的任务Id。

dataType: DataType说明:数据类型。

data: String说明:要发送的数据。

DSData.DataType枚举类:数据类型描述封装。* DATA: DataType说明:表示数据。

FILE: DataType说明:表示文件。

CMD: DataType说明:表示命令。

typeCode: int说明:类型code。

DSFile类:接收端接收的文件类。* sender: String说明:发送端app包名。

path: String说明:接收到的文件路径。

taskId: long说明:任务Id。

DSFiles类:接收端接收的多文件类。* filesDescribe: FilesDescribe说明:封装了接收到的String数据与文件数量。

sender: String说明:发送端app包名。

files: List说明:接收到的文件路径集合。

taskId: long说明:任务Id。

FilesDescribe类:封装了接收到的String数据与文件数量。* msg: String说明:接收到的String数据。

fileCount: int说明:文件数量。