一、前言

随着 HarmonyOS NEXT 生态逐渐成熟,越来越多应用开始适配微信支付。

目前鸿蒙微信支付已经支持:

  • APP支付
  • 微信登录
  • 微信分享
  • 微信收藏
  • 小程序拉起
  • 微信支付结果回调

但是,相比 Android/iOS,HarmonyOS NEXT 接入微信支付仍然存在不少坑,例如:

  • BundleID 与 Identifier 配置
  • 微信开放平台审核
  • SDK 集成
  • Ability 生命周期
  • 支付回调
  • 沙箱限制
  • 签名问题
  • 调试方式

本文将带你完整实现 HarmonyOS 微信支付。整体流程与微信官方接入指南一致,同时结合 HarmonyOS NEXT 的实际开发经验进行了整理。


二、整体流程


用户点击支付

        │
        ▼

App请求自己服务器

        │
        ▼

服务器调用微信统一下单

        │
        ▼

服务器返回支付参数

        │
        ▼

HarmonyOS 调起微信

        │
        ▼

用户完成支付

        │
        ▼

微信返回支付结果

        │
        ▼

App通知服务器查询订单

        │
        ▼

服务器确认订单成功

注意:

微信支付真正可信的数据来自:

自己的服务器

而不是客户端。


三、准备工作

1、注册微信开放平台

首先注册:

  • 微信开放平台
  • 微信支付商户平台

然后创建:


移动应用

等待审核。


2、创建鸿蒙应用

微信开放平台新增:


HarmonyOS 应用

需要填写:

  • Bundle ID
  • Identifier(AppID)

HarmonyOS 中:


Bundle Name

例如:


com.demo.shop

Identifier:


AppGallery Connect

里面查看即可。


四、下载微信 OpenSDK

目前微信已经提供 HarmonyOS OpenSDK。

依赖:


{
    "dependencies": {
        "@tencent/wechat_open_sdk":"1.0.0"
    }
}

同步:


Sync Now

等待下载完成。


五、创建常量类

例如:


export class WxConfig {

  static APP_ID = "wx123456789"

}

六、注册微信

应用启动后:


import * as wx from '@tencent/wechat_open_sdk'

wx.registerApp({
    appId: WxConfig.APP_ID
})

返回:


true

说明注册成功。


七、判断微信是否安装


let installed = wx.isWXAppInstalled()

if(installed){

}

如果:


false

提示:


请先安装微信

八、检查微信版本


wx.getWXAppSupportAPI()

返回:


620000000

数字越大说明版本越新。


九、服务器统一下单

客户端不要直接请求微信。

正确流程:


HarmonyOS

↓

业务服务器

↓

微信统一下单

↓

返回支付参数

服务器返回:


{
    "partnerId":"xxxx",
    "prepayId":"xxxx",
    "nonceStr":"xxxx",
    "timeStamp":"1711111111",
    "packageValue":"Sign=WXPay",
    "sign":"xxxxxxxx"
}

十、封装支付对象

例如:


class WxPayInfo{

    partnerId:string=""

    prepayId:string=""

    nonceStr:string=""

    packageValue:string=""

    timeStamp:string=""

    sign:string=""
}

十一、发起微信支付


let req = {

    appId:WxConfig.APP_ID,

    partnerId:data.partnerId,

    prepayId:data.prepayId,

    packageValue:data.packageValue,

    nonceStr:data.nonceStr,

    timeStamp:data.timeStamp,

    sign:data.sign

}

wx.sendPayReq(req)

调用以后:

微信自动拉起。


十二、支付结果回调

微信支付结束以后:

会重新回到当前应用。

SDK 回调:


onResp(resp){

}

例如:


if(resp.errCode==0){

}

说明:

支付成功。


十三、错误码

常见:


0

成功


-1

失败


-2

取消


-3

发送失败


-4

授权失败


-5

微信不支持


十四、不要直接相信支付成功

很多新手都会这样:


if(code==0){

订单成功

}

这是错误的。

正确流程:


微信成功

↓

通知服务器

↓

服务器查询订单

↓

微信返回SUCCESS

↓

更新订单

真正可信的是:


服务器查询结果

十五、订单状态查询

支付完成以后:

客户端:


POST

/pay/query

服务器:

调用


微信订单查询接口

如果:


SUCCESS

再更新:


订单完成

十六、支付失败处理

失败原因很多:

  • 网络异常
  • 用户取消
  • 微信未登录
  • 微信版本过低
  • 商户号错误
  • 签名错误
  • APPID错误
  • prepayId失效

建议统一提示:


支付未完成

不要直接提示:


支付失败

十七、签名错误

最常见:


INVALID SIGNATURE

原因:

① 参数顺序错误

② sign错误

③ 商户KEY错误

④ 时间戳错误

⑤ package填写错误


十八、BundleID 不一致

很多开发者卡在这里。

例如:

微信:


com.demo.app

实际:


com.demo.test

那么:


微信无法拉起

必须一致。


十九、微信审核

HarmonyOS 应用需要:


审核

审核期间:

无法正常支付。

审核时间:

通常:


1~5个工作日

具体以微信开放平台审核结果为准。


二十、生产环境注意事项

建议:

✅ 所有支付参数由服务器生成

✅ 客户端不要保存商户密钥

✅ 支付成功后必须服务端验签

✅ 不要相信客户端支付结果

✅ 使用 HTTPS

✅ 做订单幂等


二十一、常见问题(FAQ)

1、为什么无法拉起微信?

检查:

  • AppID 是否正确
  • BundleID 是否一致
  • 是否安装微信
  • 微信版本是否支持
  • OpenSDK 是否正确集成

2、为什么提示签名错误?

重点检查:

  • 商户 Key
  • sign
  • nonceStr
  • timestamp
  • packageValue

3、为什么支付成功却没有到账?

不要依据客户端回调。

应让服务器:


查询微信订单

确认交易成功后再更新订单状态。


4、为什么真机正常,模拟器不行?

目前微信支付需要依赖真实微信客户端,因此通常需要:

  • 真机
  • 已安装支持鸿蒙的微信版本
  • 已登录微信账号

二十二、最佳实践

建议将支付能力按模块拆分:


payment/
├── WxPayManager.ets
├── WxConfig.ets
├── WxPayApi.ets
├── WxPayModel.ets
├── WxPayResult.ets
└── WxPayCallback.ets
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐