【HarmonyOS NEXT】鸿蒙应用接入微信支付
一、前言
随着 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更多推荐




所有评论(0)