鸿蒙Next-支付宝SDK接入教程

App适配鸿蒙Next,开始做支付功能了,目前来说只有支付宝支持鸿蒙Next,微信还没上架,但是支付宝官方的文档跟Demo都很老,下载官方的Demo用最新版的DevEco-Studio导入都不成功。

后面在OpenHarmony三方库中心仓找到了最新的代码:

https://ohpm.openharmony.cn/#/cn/detail/@cashier_alipay%2Fcashiersdk

官方Demo地址:

https://alidocs.dingtalk.com/i/nodes/qnYMoO1rWxrkmoj2IOpZR6yaJ47Z3je9?iframeQuery=utm_source%3Dportal%26utm_medium%3Dportal_recent&rnd=0.2928087218087806

代码实现

首先依赖支付宝SDK,打开终端,cd到项目文件夹,输入命令,如果ohpm没有加入环境变量的话需要手动加一下:

ohpm i @cashier_alipay/cashiersdk

把OrderInfoUtil跟SignUtils文件复制到你的项目中来,当点击界面上的支付按钮时,先请求服务器,获取支付信息,然后调用new Pay().pay(orderInfo, true)进行支付。PayInfo对象所有信息都应该服务器返回。

///这个支付信息对象的所有值都应该服务器返回
let obj = new PayInfo();//支付信息
obj.appId = "1111111111111";
obj.orderId = "1111111111"
obj.productName = "1年VIP"
obj.amount = 10
obj.notifyUrl = 'https://www.huawei.com'
obj.rsaPrivate = "MIICXQIBAA"

OrderInfoUtil.getOrderInfo(obj).then(orderInfo=>{
    // orderInfo 由服务端生成
    // 第二个参数 控制是否展示支付宝loading
    new Pay().pay(orderInfo, true).then((result) => {
        let message =
            `resultStatus: ${result.get('resultStatus')} memo: ${result.get('memo')} result: ${result.get('result')}`;
        console.log("支付结果:"+message);

        if (result.get('resultStatus') == '9000') { //支付成功
            console.log("支付成功");
        }else{
            console.log("支付失败");
        }
    }).catch((error: BusinessError) => {
        console.log(error.message);
    });
})

效果图
支付效果图

注意事项

官方的Demo是没有notify_url这个参数的,但是我发现不加上notify_url的话,支付成功不会回调我们的业务服务器,于是我对比安卓的代码给加上的,还有notify_url必须要加在method参数后面,因为计算签名的时候参数key是需要排序的。

如果复制我的OrderInfoUtil类是已经修改过的,如果复制官方Demo中的OrderInfoUtil类需要注意一下。

/**
 * 生成订单参数Map,这个Key一定要排序,例如b开头的key一定要写在c开头的key前面
 * @param payInfo
 * @returns
 */
static buildOrderParamMap(payInfo:PayInfo): Map<string, string> {
    const keyValues = new Map<string, string>()
    keyValues.set('app_id', payInfo.appId);

    // 商户网站唯一订单号
    let orderId =payInfo.orderId;
    if(orderId == undefined || orderId==''){
        orderId = util.generateRandomUUID(true);
    }

    // 不能包含中文,否则加密会有问题。。。。。。。。。。。。
    keyValues.set('biz_content', "{\"timeout_express\":\"30m\",\"product_code\":\"QUICK_MSECURITY_PAY\",\"total_amount\":\""+
    payInfo.amount+"\",\"subject\":\""+payInfo.productName+"\",\"body\":\""+
    payInfo.productName+"\",\"out_trade_no\":\"" + orderId +  "\"}");
    keyValues.set('charset', 'utf-8');
    keyValues.set('method', 'alipay.trade.app.pay');
    keyValues.set('notify_url',payInfo.notifyUrl);//支付成功后,支付宝会访问这个通知URL
    keyValues.set('sign_type', 'RSA2');
    keyValues.set('timestamp', '2016-07-29 16:55:53');
    keyValues.set('version', '1.0');
    return keyValues;
}

源码下载

https://github.com/ansen666/alipay_harmony_sdk

如果您想第一时间看我的后期文章,扫码关注公众号

      安辉编程笔记 - 开发技术分享
             扫描二维码加关注

安辉编程笔记

### 鸿蒙系统集成支付宝支付功能 #### 项目配置调整 为了使鸿蒙应用能够调用支付宝APP完成支付流程,在项目的`entry`中的`module.json5`文件内需加入特定的配置项来声明支持的URL Scheme。具体来说,应该添加如下所示的内容以便正确识别并跳转至支付宝环境: ```json "module": { ... "querySchemes": [ "alipays" ] } ``` 这一步骤确保了应用程序可以通过指定协议与外部服务建立联系[^1]。 #### 获取支付凭证并与SDK交互 当准备发起一笔交易时,开发者应先通过服务器端获取必要的支付信息——即所谓的`payInfo`字符串。该字符串包含了订单详情以及签名等安全要素,由业务逻辑层负责生成并向客户端传递。随后利用支付宝提供的API接口执行实际付款操作,并处理返回的结果状态码以判断最终是否成功。 ```javascript new Pay().pay(payInfo, true).then((result) => { const message = `resultStatus: ${result.get('resultStatus')} memo: ${result.get('memo')} result: ${result.get('result')}`; console.log("支付结果:" + message); if (result.get('resultStatus') === '9000') { // 处理成功的场景... } }).catch((error) => { console.error(error.message); }); ``` 上述代码片段展示了如何构建一次完整的支付请求及其回调机制[^2]。 #### 解决模拟器兼容性问题 对于希望在开发过程中借助仿真工具测试的情况,可能会遇到因CPU架构差异而导致的应用崩溃现象。针对这一情况,可以在`build-profile.json5`里补充相应的平台标识符(如`x86_64`, `x86`),同时手动复制适用于ARM处理器版本的`.so`库到对应路径下,从而绕过初始阶段的依赖检测。不过值得注意的是,尽管这种方法能暂时缓解安装难题,但由于底层硬件不匹配的缘故,依旧难以避免后续可能出现的功能异常;因此建议尽可能采用真实设备来进行全面验证工作。 另外一种可行方案是采取按需加载的方式引入第三方组件,这样即使是在不具备完全适配性的环境中也能有效减少潜在风险。例如: ```typescript dynamicImport('@cashier_alipay/cashiersdk') .then(module => {/* 正常使用 */}) .catch(err => {/* 错误处理 */}); ``` 这种方式允许程序仅在必要时刻才去实例化相关对象和服务,提高了灵活性的同时也增强了跨平台移植能力[^4]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安辉就是我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值