Alipay 配置与使用说明¶
本文说明该组件的功能、关键源码和应用接入方式。
1. 参考代码¶
文件 |
作用 |
|---|---|
|
适配支付宝 SDK 需要的系统能力接口 |
|
适配支付宝 SDK 的数据传输通道 |
2. 应用例程¶
场景 |
文件 |
调用接口 |
|---|---|---|
支付宝入口页面 |
|
|
支付宝付款码页面 |
|
|
支付宝公交码页面 |
|
|
支付宝绑定二维码页面 |
|
|
3. 介绍¶
支付宝手表版本提供付款码和乘车码功能,其中乘车码功能需要连接网络,目前代码中是使用的蓝牙PAN上网(55X系列不支持)。
4. 快速配置¶
4.1 开启功能开关¶
在工程配置中,先看下面两个开关:
PKG_ALIPAY_PAY_CODE:开启付款码能力。PKG_ALIPAY_TRANSPORT_CODE:开启乘车码能力。
使用建议:
只需要付款码:打开
PKG_ALIPAY_PAY_CODE即可。需要乘车码:打开
PKG_ALIPAY_TRANSPORT_CODE,它会自动拉起付款码相关依赖,无需再单独开启一遍。
4.2 配置设备信息¶
需要填写以下信息:
PKG_ALIPAY_COMPANY_NAME:公司名,需向支付宝申请。PKG_ALIPAY_PRODUCT_MODEL:产品型号,需向支付宝申请。PKG_ALIPAY_SE_HSC32I1/PKG_ALIPAY_SE_CIU98_D:选择外挂 SE 芯片型号。
company name和product model一定要和支付宝侧申请的信息一致,否则可能出现绑定或码生成失败。
4.3 硬件要求¶
需要外挂 SE 芯片。
需要连接 IIC、电源、地、RST 引脚。
宏思芯片样例代码文档路径:
solution/components/alipay/hal/se_v1/sample/HSEC-2.0-240510华大芯片样例代码文档路径:
solution/components/alipay/hal/se_v2/sample/HED其他SE芯片请客户参照上面两个样例代码自行适配。

4.4 网络要求¶
默认使用 PAN 连接获取数据。
如果需要改成 BLE 代理等其他方式,请自行适配:
solution/components/alipay/hal/network/sample/alipay_net_kal.c
5. 怎么使用¶
5.1 进入 Alipay 页面¶
固件烧录完成后,进入手表 UI,打开 Alipay 应用。
如果开启了
PKG_ALIPAY_TRANSPORT_CODE,界面会同时显示“Payment code”“Transport code”“Setting”。如果只开启了
PKG_ALIPAY_PAY_CODE,界面只显示付款码和设置项。
5.2 支付码使用流程¶
进入
Payment code。按提示完成绑定流程。
绑定成功后即可展示付款码相关结果。
5.3 乘车码使用流程¶
进入
Transport code。先完成绑定和初始化流程。
系统会根据当前状态拉取乘车码结果并显示。
如果长时间没有结果,优先检查以下项:
SE 芯片是否正确接线并上电。
网络是否可达。
PKG_ALIPAY_COMPANY_NAME和PKG_ALIPAY_PRODUCT_MODEL是否正确。配置项是否已经编译进固件。
6. 关键接口说明(二次开发/移植时参考)¶
6.1 直接调用接口(非耗时操作)¶
适合非耗时、栈占用较小的操作:
/**
* 获取是否已经绑定
* 此API在进入支付宝界面时调用,判断支付宝是否已经绑定
* @param [in] void
* @return 返回绑定状态 true:已绑定 false:未绑定
*/
bool ali_pay_get_binding_result(void);
/**
* 获取绑定码
* @param [out] binding_str 存放绑定码的指针
* @param [out] len_binding_str 绑定码数据大小,传入时为binding_str buff大小
* @return UPAY_RV_OK: 获取成功
* UPAY_RV_BINDING_STR_TOO_LONG:数据size超过限制,请减少upay_product_model的长度
*/
upay_rc_t ali_pay_get_binding_string(uint8_t *binding_str, uint32_t *len_binding_str);
/**
* 注册ble接收函数,允许接收绑定数据,在展示绑定码之前调用
*/
void alipay_data_subscribe(void);
/**
* 取消注册ble接收函数,不允许接收绑定数据,绑定成功后调用
*/
void alipay_data_unsubscribe(void);
/**
* 轮询绑定结果
* 此API必须在获取绑定码后并且在绑定过程中才能调用
* @param [in] void
* @return 返回绑定状态 @upay_binding_status_e
*/
upay_binding_status_e ali_pay_get_binding_status(void);
/**
* 从Flash读取存储的logon_ID
* @param [out] id 存放数据的指针
* @param [out] len_id数据大小,最大读取不超过传入这个值的数据大小
* @return UPAY_RV_OK:读取成功
* UPAY_RV_NOT_FOUND:未发现该存储项
*/
upay_rc_t ali_pay_get_logon_ID(uint8_t *id, uint32_t *len_id);
/**
* 从Flash读取存储的nick_name
* @param [out] nick_name 存放数据的指针
* @param [out] len_nick_name数据大小,最大读取不超过传入这个值的数据大小
* @return UPAY_RV_OK:读取成功
* UPAY_RV_NOT_FOUND:未发现该存储项
*/
upay_rc_t ali_pay_get_nick_name(uint8_t *nick_name, uint32_t *len_nick_name);
/**
* 获取帮助码
* @param [out] aidCode 存放码串的缓存
* @param [inout] len_aidCode 输入时为允许存放的最大长度;输出时为实际的长度, 建议长度为256
* @return UPAY_RV_OK: 获取成功
* UPAY_RV_BUF_TOO_SHORT:缓存太小,此时输出的len_aidCode,为所需要的大小
* UPAY_RV_JS_ERROR:json错误,可能是堆空间不够
*/
upay_rc_t ali_pay_get_aid_code(char *paycode, uint32_t *len_paycode);
6.2 耗时操作接口¶
适合耗时较长、栈占用较大的操作:
/**
* 创建获取乘车码临时线程
* @param [in] parameter->type 根据type调用不同函数
* parameter->data 对应函数需要的参数
* @return true : On success
flase : error
*/
bool transport_processing_thread(lv_transport_data_t *parameter);
其中 parameter->type 可选值如下:
ALIPAY_GET_CARD_LIST // 获取城市列表
ALIPAY_DEFAULT_CARD_INFO // 获取默认卡信息
ALIPAY_GET_TRANSIT_CODE // 获取乘车码
使用时需要注意:在调用该接口前,需先根据实际情况处理信号量,避免上一次线程操作还未结束时重复触发。
其UI可参照\solution\examples\watch\application\alipay目录下的代码,发布版本可直接配置后编译烧录查看应用。
7. 流程图¶
7.1 支付宝绑定流程¶

7.2 乘车码流程¶
