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方案大致相同,不同之处在函数说明中有标注。
支付宝提供的文档
支付宝智能穿戴_乘车码系统和硬件适配
支付宝智能穿戴_乘车码接口调用说明
支付宝智能穿戴_设备激活流程
成人_手表手环_视觉稿_总
智能设备付款码测试用例