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
调用收银台
调用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);
});
可用性
Android系统
可提供的1.0.0及更高版本