yunnex

来自于:开发者

openCashier openPrinter

概述

使APP可调用掌贝POS机的 融合支付 和 定制打印 功能!
首先您必须购买掌贝POS的服务并配置一台掌贝POS测试机,申请成为开发者,获取APP_ID 和 APP_SECRET才能调用POS机的硬件功能!
成为开发者后,掌贝会让您设定授权回调地址和支付回调地址,根据掌贝开发者文档就可以获取以下SDK接口所需的参数

注意:请不要与具有二维码解析功能的模块一起使用,有可能会导致编译失败!例如posScanner模块

掌贝官网:http://www.yunnex.com
开发者申请: http://www.yunnex.com/developer
开发者文档: http://web.open.saofu.cn/doc

openCashier

调用收银台

调用POS机的收银台功能,掌贝POS的收银台集成了多种(如支付宝、微信、银联卡、ApplePay、会员卡、现金、卡卷核销等)融合支付方式,APP调用收银台的机制是首先通过APP_ID和APP_SECRET获取临时的ticket后,通过ticket调用并每次仅能调用一个收银台的支付方式进行支付,支付成功后掌贝云服务将会进行异步通知支付回调地址,同时支付结果收银台也会同步通知APP。

注意:需要使用APP_ID和APP_SECRET获取的AccessToken来生成临时ticket,一个ticket只能调用一个支付方式,例如用微信支付时如果取消交易,那么也算调用一次,再次调用会提示ticket无效

openCashier({params}, callback(ret))

params

appId:

  • 类型:字符串
  • 默认值:无
  • 必选:是
  • 描述:掌贝APP_ID

orderNo:

  • 类型:字符串
  • 默认值:无
  • 必选:是
  • 描述:订单编号

amount:

  • 类型:正整数
  • 默认值:无
  • 必选:是
  • 描述:订单总价(分为单位,必须100,例如0.01元,传入 0.01100)

undiscountableAmount:

  • 类型:正整数
  • 默认值:无
  • 必选:否
  • 描述:不可优惠金额(小于或等于订单总价,分为单位,必须100,例如0.01元,传入 0.01100)

remark:

  • 类型:字符串
  • 默认值:无
  • 必选:否
  • 描述:订单备注

ticket:

  • 类型:字符串
  • 默认值:无
  • 必选:是
  • 描述:掌贝生成的调用凭证

callback(ret)

ret:

唤起收银台失败返回错误码:

  • 类型:字符串
  • 内部字段:
  1. E001 // 未安装掌贝收银台,检查是否安装掌贝收银台
  2. E002 // 请求参数为null,请求参数不完整(参见调起支付时传入参数)
  3. E003 // 获取收银台版本信息失败,重新安装
  4. E004 // 掌贝版本低,版本不支持,升级掌贝系统和应用
  5. E005 // context或者APPID为空
  6. E006 // 传进来的context不是Activity实例
  7. E007 // 打开收银台异常,联系掌贝技术人员
  8. E100 // 订单金额不正确,订单金额须为大于0 的数值
  9. E101 // 不可优惠金额不正确,不可优惠金额大于订单金额
  10. E102 // 订单类型不正确
  11. E103 // 第三方订单号不合法,订单号格式错误
  12. E105 // ticket不合法,为空或太长
  13. E106 // 备注不合法,字符长度不超过20

唤起收银台成功返回结果:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. /*
  3. 支付状态,返回状态:交易成功;
  4. 为fail时,失败,AppId校验失败,token校验失败,支付异常;
  5. 为timeout时,超时,交易过程网络环境弱,人为支付过程较慢;
  6. 为error时,支付失败,返回reason
  7. */
  8. state: 'success',
  9. orderId: 'XXXXXXX', // 交易单号, 选择支付方式后生成的掌贝交易单号
  10. tradeId: 'XXXXXXXX', // 支付单号,发起支付后掌贝生成的支付交易单号
  11. orderAmount: 100, // 订单总价,商户传入的使用优惠前的订单金额
  12. realReceiveAmount: 99, // 实收金额,使用优惠后收到的订单金额
  13. undiscountableAmount: 0, // 不可优惠金额, 商户传入的不可优惠金额值
  14. platformCoupon: 0, // 平台优惠,支付宝支付才有:表示支付宝平台优惠活动中,支付宝平台承担的那部分金额;
  15. thirdOrderId: '2017020712345', // 第三方单号, 第三方调起支付前生成的交易订单
  16. storeID: '0001', // 门店id, 设备当前支付所属门店ID
  17. operator: '店长', // 操作员名, 当前设备登录的操作员名
  18. moling: 0, // 抹零,正数表示增加的金额,负数表示减免的金额
  19. integralDeduct: 0, // 积分抵现,用户使用积分抵消的现金金额
  20. cardDiscountAmount: 0, // 卡券优惠金额,会员卡、优惠券所优惠的金额
  21. platformOrderId: 'xxxxxx', // 平台交易单号,支付交易所依附的平台单号(如支付宝交易单号,微信交易单号)
  22. payTime: '1449992832', // 支付时间
  23. /*
  24. 支付方式,发起支付时所选择的支付方式,
  25. WXPAY:微信支付;
  26. ALIPAY:支付宝支付;
  27. CASH:现金支付;
  28. CARDPAY:储值卡支付;
  29. UNIONPAY: 银联刷卡支付
  30. */
  31. payType: 'WXPAY',
  32. reason: 'XXXX' // state为error时才返回
  33. }

示例代码

  1. var yunnex = api.require('yunnex');
  2. var params = {
  3. appId: '68a58a5ae4f032be7ae93c3a0ae8XXXX', // 掌贝申请
  4. orderNo: '2017020712345',
  5. amount: 0.01 * 100,
  6. remark: '优惠¥100',
  7. ticket: 'kljfdlajfln22222dd' // 掌贝接口生成
  8. };
  9. yunnex.openCashier(params, function(ret) {
  10. alert(JSON.stringify(ret));
  11. });

可用性

Android系统

可提供的1.0.0及更高版本

openPrinter

调用打印

自定义小票样式,并调用掌贝POS上的打印机打印
技巧:收银台支付成功后会默认打印掌贝规定格式的小票,可在掌贝商户后台设置不自动打印小票,通过代码调用打印自己定制的小票样式

openPrinter({params}, callback(ret))

params

content:

  • 类型:JSON对象数组
  • 描述:(必选项)按照从上到下打印次序,逐行插入打印数组
  • 可打印JSON对象:
  1. // 最常用打印样式,未来根据掌贝同步更新样式
  2. [
  3. {type: 'str', align: 'center', content: '邻家左右', line: 32, size: 2}, // 高宽加倍字居中,line为行位32,可配置16、18、32、48
  4. {type: 'str', align: 'left', content: '编号:XXXX', line: 32, size: 1}, // 普通字体左对齐,line为行位32,可配置16、18、32、48
  5. {type: 'line', content: 'dotted', line: 32}, // 分割虚线, line为行位32,可配置16、18、32、48
  6. {type: 'side', contentL: '上门检测费', contentR: '¥0', line: 32} // 两边对齐打印,line为行位32,可配置16、18、32、48
  7. {type: 'qrcode', align: 'center', content: 'http://www.ljzy.cn', line: 32} // 二维码居中打印,line为行位32,可配置16、18、32、48
  8. ]

callback(ret)

ret:

  • 类型:字符串
  • 内部字段:
  1. 'success' //success or fail

示例代码

  1. var yunnex = api.require("yunnex");
  2. var params = {content: [
  3. {type: 'str', align: 'center', content: '掌贝POS', line: 32, size: 2},
  4. {type: 'line', content: 'dotted', line: 32},
  5. {type: 'str', align: 'left', content: '编号:2017020812345', line: 32, size: 1},
  6. {type: 'str', align: 'left', content: '客户:黎某', line: 32, size: 1},
  7. {type: 'str', align: 'left', content: '类别:快餐', line: 32, size: 1},
  8. {type: 'str', align: 'left', content: '时间:2017-02-08 10:26', line: 32, size: 1},
  9. {type: 'str', align: 'left', content: '地址:广东佛山顺德某大街', line: 32, size: 1},
  10. {type: 'str', align: 'left', content: '操作员:店长', line: 32, size: 1},
  11. {type: 'line', content: 'dotted', line: 32},
  12. {type: 'side', contentL: '饭盒打包', contentR: 'X 1', line: 32}
  13. ]};
  14. for(var i = 0; i < 3; i++) {
  15. params.content.push({type: 'side', contentL: '商品项' + i, contentR: '¥10 X 1', line: 32});
  16. }
  17. params.content.push({type: 'side', contentL: '优惠券', contentR: '-¥10', line: 32});
  18. params.content.push({type: 'line', content: 'dotted', line: 32});
  19. params.content.push({type: 'side', contentL: '', contentR: '合计:¥100' , line: 32});
  20. params.content.push({type: 'str', align: 'left', content: '客户签名:', line: 48, size: 1});
  21. params.content.push({type: 'qrcode', align: 'center', content: 'http://www.ljzy.cn', line: 32});
  22. yunnex.openPrinter(params, function(ret) {
  23. // alert(ret);
  24. });

可用性

Android系统

可提供的1.0.0及更高版本

yunnex - 图1