yunnex

openCashier

概述

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

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

掌贝官网:http://www.yunnex.com
开发者申请:
开发者文档: 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))

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

orderNo:

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

amount:

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

undiscountableAmount:

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

remark:

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

ticket:

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

callback(ret)

ret:

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

  • 类型:字符串

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

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

可用性

可提供的1.0.0及更高版本

openPrinter

调用打印

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

openPrinter({params}, callback(ret))

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

可用性

Android系统

可提供的1.0.0及更高版本