alipay使用指南

alipay介绍

alipay成人手表手环版本提供付款码和乘车码功能。因我们的52X芯片中内置了security,可以使用芯片内部的security(后面简称TEE版本),
而56X芯片没有内置security需要外挂SE芯片(后面简称为SE版本)。
因TEE版本和SE版本有少许差异,因此两个版本单独说明。

TEE版本alipay

tee版本目前只适用于52X系列的主控,需要在bootloader、LCPU及HCPU打开相关配置.
tee版本是使用的ble获取乘车码数据,手机需要一个APP与手表端进行通信去获取乘车码数据。
此APP我们可提供SDK及源码,此APP的SDK与我们的代码是适配了的可正常获取乘车码。
如果使用付宝原生SDK需要用户自行对接。

bootloader配置

在bootloader中需要打开宏“PKG_SIFLI_MBEDTLS_BOOT”相关配置如下。

lcpu配置

lcpu需要依次打开如下配置;“BSP_USING_DMA”、“PM_DEEP_ENABLE”和“USING_SEC_ENV”



其中MDA是使用的DMA1的channel8,需要注意此channel不能被其他外设使用,否则会导致使用异常,还不好查原因。

    hdma.Instance                 = DMA1_Channel8;
    hdma.Init.Request             = 0;                     //Request id is useless while memory to memory, just set to 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;

hcpu配置

hcpu需要依次打开如下配置;“USING_SEC_ENV”和“PKG_ALIPAY_TRANSPORT_CODE”。



乘车码依赖于付款码,TEE版本目前暂不支持付款码单独使用。
其上图中“company name”为公司名简称(不要超过16个字符),“product 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

分区及文件夹要求

1)在工程中需要有一个名为“secure_data”的分区用于保存支付宝绑定信息,有一个名为"upay_safety"的分区用于保存支付宝的ID2数据(放置于sys分区,要求恢复出厂及OTA后,数据还在)。
2)需要在根目录下有一个名为“alipay_transport”的文件夹,用于存储从服务器获取到的乘车码脚本文件。
注:以上三个名称不能修改,修改后需要修改代码。

接口说明

支付宝的接口分为两种方式调用,耗时较久以及占用栈空间大的采用创建临时线程的方式调用。
临时线程运行完成后,通过消息队列的方式将结果发送到UI线程,UI线程收到数据后进行处理,中间播放等待动画。
线程调用函数为“transport_processing_thread”参数为调用类型和对应函数参数。
其他函数采用直接调用的方式。

直接调用接口

/**
 * 获取是否已经绑定
 * 此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);

临时线程调用接口说明

/**
 * 创建获取乘车码临时线程
 * @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”获取信号量,当获取失败时,表示临时线程还在执行上一次的操作,需要等待。
参考支付宝线程类型与对应函数说明

绑定流程图

乘车码流程图

SE版本alipay

se版本需要外挂一个SE芯片,目前仅提供宏思电子的HSC32I1芯片的对接,其他厂商请自行对接。
需要连接芯片的IIC、电源、地及RST引脚。代码在“sdk\external\alipay-se”目录下
HSC32I1产品规格书
se版本我们提供的版本是使用的PAN连接网络获取数据,如果要使用其他方式连接网络(如ble代理),请用户自行对接“solution\components\alipay\hal\network\sample\alipay_net_kal.c"文件即可

hcpu配置

se版本只需要打开hpcu的“PKG_ALIPAY_TRANSPORT_CODE”配置即可,其他依赖会自动打开

PAN长连接控制,如果打开PAN的长连接功能,则PAN和BT的其他profile一起自动连接,如果不启用则需要用户自行进行连接和断开处理。

其se芯片需要配置其使用的IIC以及IIC是否和其他IIC共用和RST连接引脚。

其中“company name”为公司名简称(不要超过16个字符),“product model”为产品型号(不要超过16个字符)。和tee一样需要找支付宝申请。 调用流程和tee方案大致相同,不同之处在函数说明中有标注。

支付宝提供的文档

支付宝智能穿戴_乘车码系统和硬件适配
支付宝智能穿戴_乘车码接口调用说明
支付宝智能穿戴_设备激活流程
成人_手表手环_视觉稿_总
智能设备付款码测试用例