yunnex

来自于:开发者立即使用

概述

使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

调用收银台

APP打开收银台 APP打开收银台 APP打开收银台

调用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:

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

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

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

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

示例代码

var yunnex = api.require('yunnex');

var params = {
  appId: '68a58a5ae4f032be7ae93c3a0ae8XXXX', // 掌贝申请
  orderNo: '2017020712345',
  amount: 0.01 * 100,
  remark: '优惠¥100',
  ticket: 'kljfdlajfln22222dd' // 掌贝接口生成
};

yunnex.openCashier(params, function(ret) {
  alert(JSON.stringify(ret));
});

可用性

Android系统

可提供的1.0.0及更高版本

openPrinter

调用打印

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

openPrinter({params}, callback(ret))

params

content:

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

callback(ret)

ret:

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

示例代码

var yunnex = api.require("yunnex");

var params = {content: [
  {type: 'str', align: 'center', content: '掌贝POS', line: 32, size: 2},
  {type: 'line', content: 'dotted', line: 32},
  {type: 'str', align: 'left', content: '编号:2017020812345', line: 32, size: 1},
  {type: 'str', align: 'left', content: '客户:黎某', line: 32, size: 1},
  {type: 'str', align: 'left', content: '类别:快餐', line: 32, size: 1},
  {type: 'str', align: 'left', content: '时间:2017-02-08 10:26', line: 32, size: 1},
  {type: 'str', align: 'left', content: '地址:广东佛山顺德某大街', line: 32, size: 1},
  {type: 'str', align: 'left', content: '操作员:店长', line: 32, size: 1},
  {type: 'line', content: 'dotted', line: 32},
  {type: 'side', contentL: '饭盒打包', contentR: 'X 1', line: 32}
]};

for(var i = 0; i < 3; i++) {
  params.content.push({type: 'side', contentL: '商品项' + i, contentR: '¥10 X 1', line: 32});
}
params.content.push({type: 'side', contentL: '优惠券', contentR: '-¥10', line: 32});
params.content.push({type: 'line', content: 'dotted', line: 32});
params.content.push({type: 'side', contentL: '', contentR: '合计:¥100' , line: 32});
params.content.push({type: 'str', align: 'left', content: '客户签名:', line: 48, size: 1});
params.content.push({type: 'qrcode', align: 'center', content: 'http://www.ljzy.cn', line: 32});

yunnex.openPrinter(params, function(ret) {
  // alert(ret);
});

APP打印

可用性

Android系统

可提供的1.0.0及更高版本