如何使用Appcelerator Titanium将Stripe Terminal蓝牙读卡器连接至Android应用
在Titanium应用中集成Stripe Terminal蓝牙读卡器的实操步骤
因为Titanium官方没有提供Stripe Terminal的现成模块,所以得靠自定义原生模块+前端调用的方式实现,下面是针对新手的具体步骤:
一、前期准备
- 注册并激活Stripe账号的Terminal功能,获取你的API密钥(注意:秘钥绝对不能放在前端代码里,所有需要秘钥的操作都要通过后端接口完成)
- 准备兼容的蓝牙读卡器(比如Stripe Reader M2),先在Stripe Dashboard里完成设备激活,并用官方APP测试配对,确保硬件正常
二、封装原生模块(核心步骤)
Titanium需要借助原生iOS/Android的Stripe Terminal SDK来实现蓝牙读卡器功能,所以得自己封装模块:
iOS端模块封装
- 新建Titanium iOS模块项目,通过CocoaPods导入Stripe Terminal iOS SDK
- 封装核心方法:初始化Terminal、发现蓝牙读卡器、连接读卡器、处理支付
- 在模块的info.plist中添加必要权限:
NSBluetoothAlwaysUsageDescription:说明蓝牙使用用途NSLocationWhenInUseUsageDescription:Stripe Terminal需要位置信息用于合规验证
- 编译模块,得到
.zip格式的模块包
Android端模块封装
- 新建Titanium Android模块项目,在gradle中添加Stripe Terminal Android SDK的依赖
- 封装和iOS端一致的API方法(方便前端统一调用)
- 在AndroidManifest.xml中添加权限:
BLUETOOTH、BLUETOOTH_ADMIN:蓝牙操作权限ACCESS_FINE_LOCATION:位置权限
- 编译模块,得到对应的Android模块文件
三、集成模块到Titanium项目
- 将编译好的iOS/Android模块放到项目的
modules目录下 - 在
tiapp.xml中添加模块引用,比如:<modules> <module platform="ios">com.yourcompany.stripeterminal</module> <module platform="android">com.yourcompany.stripeterminal</module> </modules>
四、前端代码调用示例
1. 初始化Terminal
首先从后端获取连接令牌(由后端用Stripe秘钥生成),再初始化:
const stripeTerminal = require('com.yourcompany.stripeterminal'); // 调用后端接口获取连接令牌 // 这里示例直接写死,实际要替换成你的后端请求 const connectionToken = '从后端获取的有效连接令牌'; stripeTerminal.initialize({ connectionToken: connectionToken }, function(e) { if (e.success) { console.log('Terminal初始化完成'); } else { alert('初始化失败:' + e.error); } });
2. 发现并连接蓝牙读卡器
// 开始扫描蓝牙读卡器 stripeTerminal.discoverReaders({ discoveryMethod: 'bluetooth' }, function(e) { if (e.readers && e.readers.length > 0) { // 选择第一个扫描到的读卡器进行连接 stripeTerminal.connectReader(e.readers[0].id, function(connectRes) { if (connectRes.success) { console.log('读卡器连接成功'); // 连接成功后可以进行支付操作 } else { alert('读卡器连接失败:' + connectRes.error); } }); } else { alert('未发现蓝牙读卡器,请检查设备是否开机并处于配对状态'); } });
3. 处理支付流程
支付意向需要后端创建,拿到client_secret后调用支付方法:
// 从后端获取支付意向的client_secret const paymentIntentClientSecret = '从后端获取的client_secret'; stripeTerminal.processPayment(paymentIntentClientSecret, function(paymentRes) { if (paymentRes.success) { alert('支付成功!'); console.log('支付详情:', paymentRes.paymentIntent); } else { alert('支付失败:' + paymentRes.error); } });
五、测试注意事项
- 必须用真机测试,模拟器/模拟器不支持蓝牙功能
- 第一次启动APP时,要确保用户授权蓝牙和位置权限
- 测试支付可以用Stripe提供的测试卡号,比如
4242 4242 4242 4242,任意过期日期和CVC
内容的提问来源于stack exchange,提问作者swati jagtap
相关产品推荐
相关产品推荐

