鸿蒙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

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

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

安辉编程笔记

### 实现鸿蒙应用接入微信分享功能 在 HarmonyOS NEXT 环境下实现鸿蒙应用接入微信分享功能涉及多个方面的工作,包括但不限于配置环境、申请 API Key 和集成 SDK。以下是具体的操作指南: #### 1. 准备工作 为了使应用程序能够调用微信的服务接口,开发者需先注册成为微信公众平台的开发者并创建相应的应用以获得 AppID。 #### 2. 添加依赖项 确保项目文件中的 `build.gradle` 文件已正确引入了最新版本的微信开放库作为依赖项[^3]: ```gradle dependencies { implementation 'com.tencent.mm.opensdk:wechat-sdk-harmonyos:+' } ``` #### 3. 初始化 WeChatApi 初始化 WeChatApi 对象以便后续操作可以顺利执行。通常情况下,在 Application 类里完成此步骤最为合适。 ```java public class MyApplication extends AbilityPackage { @Override public void onInitialize() { super.onInitialize(); IWXAPI api = WXAPIFactory.createWXAPI(this, "YOUR_APP_ID", true); api.registerApp("YOUR_APP_ID"); } } ``` #### 4. 创建 ShareReq 请求对象 当用户触发分享行为时,构建一个 `SendMessageToWX.Req` 或者 `SendAuth.Resp` 来封装要发送的信息内容以及目标场景(好友/朋友圈)。这里展示了一个简单的例子来说明如何构造一条消息给朋友。 ```java private void sendTextMessage(String textContent){ WXTextObject textObj = new WXTextObject(); textObj.text = textContent; WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = textObj; Bitmap thumbBmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon); if(thumbBmp != null){ msg.thumbData = Util.bmpToByteArray(thumbBmp,true); } SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("text"); // transaction 字段用于唯一标识一次请求 req.message = msg; req.scene = SendMessageToWX.Req.WXSceneSession; // 发送到聊天界面 api.sendReq(req); } // 辅助函数:生成事务 ID private String buildTransaction(final String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); } ``` #### 5. 处理回调响应 最后一步是在 Activity 中重写 onActivityResult 方法处理来自微信客户端返回的结果数据。这允许程序知道用户的最终选择结果是什么样的。 ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (!api.handleIntent(data, this)) { // 如果不是由微信SDK发起,则按照常规流程解析data参数即可 ... } else { // 否则交由Wechat SDK内部逻辑处理 Toast.makeText(getApplicationContext(),"分享成功!",Toast.LENGTH_SHORT).show(); } } ``` 通过上述五个部分的操作,可以在 HarmonyOS NEXT 上顺利完成鸿蒙应用对接微信分享的功能开发。值得注意的是,由于目前鸿蒙版微信仍处于测试阶段,因此具体的 API 接口可能会有所变动,请密切关注官方文档更新情况[^2]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安辉就是我

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

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

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

打赏作者

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

抵扣说明:

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

余额充值