alipay指南

1. 介绍

支付宝手表版本提供付款码和乘车码功能,根据芯片差异分为两个版本:

  • TEE 版本:适用于 52X 系列主控(内置 security)

  • SE 版本:适用于 56X 系列主控(需外挂 SE 芯片,目前支持宏思电子 HSC32I1 芯片)

2. TEE版本支付宝

2.1 适用范围

  • 仅支持 52X 系列主控

  • 需在 Bootloader、LCPU、HCPU 开启对应配置

  • 乘车码数据通过 BLE 从手机 APP 获取

    • 可提供配套 APP SDK 与源码

    • 若使用支付宝原生 SDK,需自行对接

2.2 配置说明

2.2.1 Bootloader配置

开启宏PKG_SIFLI_MBEDTLS_BOOT,配置如下:
bootloader配置

2.2.2 LCPU配置

依次开启以下配置:

  • BSP_USING_DMA

  • PM_DEEP_ENABLE

  • USING_SEC_ENV

配置截图:
启用DMA
启用深度模式
启用安全环境

注意:DMA 使用 DMA1_Channel8,不可被其他外设占用。
DMA 配置代码:

hdma.Instance                 = DMA1_Channel8;
hdma.Init.Request             = 0;
hdma.Init.Direction           = DMA_MEMORY_TO_MEMORY;
hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
hdma.Init.PeriphInc           = DMA_PINC_ENABLE;
hdma.Init.MemInc              = DMA_MINC_ENABLE;
hdma.Init.Mode                = DMA_NORMAL;
hdma.Init.Priority            = DMA_PRIORITY_MEDIUM;

2.2.3 HCPU

依次开启:

  • USING_SEC_ENV

  • PKG_ALIPAY_TRANSPORT_CODE

说明

  • 乘车码依赖付款码,暂不支持付款码单独使用。

  • company nameproduct model(均 ≤16 字符)需与支付宝申请的参数一致。

  • 需配置 alipay_adaptation.h 中的宏(示例):

    #if defined (PKG_ALIPAY_MODE_TEE)
        #define ALIPAY_DEVICE_NAME      "HAAS-2AX-SIF-55X-"
        #define ALIPAY_PARA_PK_STR      "hj5r4Qos6De"
        #define ALIPAY_PARA_PS_STR      "DxPlqtjTIc5xqlh5"
        #define ALIPAY_PARA_ID2_PK      "7KSJA9nSuuu"
    #endif
    

2.3 分区与文件夹

  1. 分区要求

    • 需存在名为secure_data的分区:用于保存支付宝绑定信息。

    • 需存在名为upay_safety的分区:用于保存支付宝的ID2数据(需放置于sys分区,确保恢复出厂设置及OTA升级后数据仍保留)。

  2. 文件夹要求

    • 根目录下需创建名为alipay_transport的文件夹:用于存储从服务器获取的乘车码脚本文件。

:以上三个名称(secure_data``upay_safety``alipay_transport)不可修改,若修改需同步调整对应代码。

配置截图:

2.4 接口说明

2.4.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);

2.4.2 临时线程调用接口(耗时操作)

适用于耗时长、栈空间占用大的操作(临时线程执行完成后,通过消息队列将结果发送至UI线程,期间播放等待动画)。

/**
 * 创建获取乘车码临时线程
 * @param [in]  parameter->type 根据type调用不同函数
 *              parameter->data 对应函数需要的参数
 * @return  true  : On success
            flase : error
 */
bool transport_processing_thread(lv_transport_data_t *parameter);

注意
在调用transport_processing_thread函数创建临时线程时,需要调用alipay_take_sema获取信号量,当获取失败时,表示临时线程还在执行上一次的操作,需要等待。
参考支付宝线程类型与对应函数说明

2.5 流程图

2.5.1 支付宝绑定流程

2.5.2 乘车码流程

3. SE 版本

3.1 硬件要求

  • 外挂 SE 芯片 HSC32I1(仅提供该芯片对接)

  • 连接 IIC、电源、地、RST 引脚

  • 代码路径:sdk\external\alipay-se

  • 参考文档:HSC32I1产品规格书

3.2 网络

  • 默认使用 PAN 连接获取数据

  • 若需其他方式(如 BLE 代理),请自行对接 solution\components\alipay\hal\network\sample\alipay_net_kal.c

3.3 HCPU 配置

只需开启 PKG_ALIPAY_TRANSPORT_CODE,依赖自动开启

3.3.1 PAN 长连接控制

  • 开启:PAN 和 BT 其他 profile 自动连接

  • 关闭:需用户自行处理连接/断开

3.3.2 SE 芯片配置

配置 IIC(是否共用)及 RST 引脚

company nameproduct model 需向支付宝申请,调用流程与 TEE 版本类似(差异见函数说明)。

4. 支付宝提供的文档