鸿蒙Next如何接入微信支付

打印 上一主题 下一主题

主题 1012|帖子 1012|积分 3036

各人好,这是我工作中打仗到的鸿蒙Next接入微信支付,有使用到,分享给各人,轻松便捷
前提:你已有鸿蒙版本的微信,并且微信余额或绑定银行卡有钱,由于内测的微信暂不支持收红包和转账,2.你的应用已有安卓或IOS端的微信支付,否则的话,工作量将不止云云
正文:起首需要你公司这边去申请开通鸿蒙版本的微信商户

注意细节请看链接:接入指南 / 鸿蒙接入指南,申请需要用到两个参数:Bundle ID,Bundle ID 指的是鸿蒙应用的包名,详细请看:https://developer.huawei.com/consumer/cn/doc/app/agc-help-createharmonyapp-0000001945392297
 Identifier 指的是鸿蒙应用的 appIdentifier,详情请看:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-bundlemanager-bundleinfo-V5
申请通过后,即可进入微信支付调试步骤
1.在你的鸿蒙项目中,修改项目中的oh-package.json5文件,在dependencies中到场微信 opensdk 的依靠项:
  1. {
  2.   "name": "demo",
  3.   "version": "1.0.0",
  4.   "description": "Please describe the basic information.",
  5.   "main": "",
  6.   "author": "",
  7.   "license": "",
  8.    "dependencies": {
  9.     "@tencent/wechat_open_sdk": "1.0.0"
  10.   }
  11. }
复制代码
然后右上角重新Sync Now一下,等下加载完成,你就成功引入了鸿蒙版本的微信SDK


2.新建.ets文件,文件名为:Constants,然后复制以下代码:APP_ID是你公司申请过后的鸿蒙微信支付商户Id
  1. export const APP_ID = "wxd5a474c635b8fd17"
  2. export const APP_SECRET = ""
复制代码
3. 新建.ets文件 文件名为:WXApiWrap,然后复制以下代码:
  1. import * as wxopensdk from '@tencent/wechat_open_sdk';
  2. import { APP_ID } from '../Constants';
  3. export type OnWXReq = (req: wxopensdk.BaseReq) => void
  4. export type OnWXResp = (resp: wxopensdk.BaseResp) => void
  5. const kTag = "WXApiEventHandlerImpl"
  6. class WXApiEventHandlerImpl implements wxopensdk.WXApiEventHandler {
  7.   private onReqCallbacks: Map<OnWXReq, OnWXReq> = new Map
  8.   private onRespCallbacks: Map<OnWXResp, OnWXResp> = new Map
  9.   registerOnWXReqCallback(on: OnWXReq) {
  10.     this.onReqCallbacks.set(on, on)
  11.   }
  12.   unregisterOnWXReqCallback(on: OnWXReq) {
  13.     this.onReqCallbacks.delete(on)
  14.   }
  15.   registerOnWXRespCallback(on: OnWXResp) {
  16.     this.onRespCallbacks.set(on, on)
  17.   }
  18.   unregisterOnWXRespCallback(on: OnWXResp) {
  19.     this.onRespCallbacks.delete(on)
  20.   }
  21.   onReq(req: wxopensdk.BaseReq): void {
  22.     wxopensdk.Log.i(kTag, "onReq:%s", JSON.stringify(req))
  23.     this.onReqCallbacks.forEach((on) => {
  24.       on(req)
  25.     })
  26.   }
  27.   onResp(resp: wxopensdk.BaseResp): void {
  28.     wxopensdk.Log.i(kTag, "onResp:%s", JSON.stringify(resp))
  29.     this.onRespCallbacks.forEach((on) => {
  30.       on(resp)
  31.     })
  32.   }
  33. }
  34. export const WXApi = wxopensdk.WXAPIFactory.createWXAPI(APP_ID)
  35. export const WXEventHandler = new WXApiEventHandlerImpl
复制代码
注意事项:请注意相关文件引入的路径
3.重点!!一定要在EntryAbility里初始化和注册回调微信SDK,详细代码如下:
  1. import { WXApi, WXEventHandler } from '../model/WXApiWrap';
  2.   onCreate(want: Want, _launchParam: AbilityConstant.LaunchParam): void {
  3.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  4.     this.handleWeChatCallIfNeed(want)
  5.   }
  6.   onNewWant(want: Want, _launchParam: AbilityConstant.LaunchParam): void {
  7.     this.handleWeChatCallIfNeed(want)
  8.   }
  9.   private handleWeChatCallIfNeed(want: Want) {
  10.     WXApi.handleWant(want, WXEventHandler)
  11.   }
复制代码
注意事项:注意相应文件的引入路径
4.使用 也是重点 
1.在你需要调用微信支付的文件 引入如下代码:
  1. import { WXApi, WXEventHandler } from '../model/WXApiWrap';
  2. import * as wxopensdk from '@tencent/wechat_open_sdk';
  3. import { common } from '@kit.AbilityKit';
  4.       Button("跳转支付")
  5.         .onClick(async () => {
  6.         let req = new wxopensdk.PayReq
  7.         req.partnerId = '2480306091'
  8.         req.appId = 'wx05b3e2e9fc730840'
  9.         req.packageValue = 'Sign=WXPay'
  10.         req.prepayId = 'wx26161523845794ecced251acf2b6860000'
  11.         req.nonceStr = 'vmall_240926161523_993_2774'
  12.         req.timeStamp = '1727338524'
  13.         req.sign = 'rAqsrx5yLfRNBGvlHYuLhUsNK0OPeOLQ5xlvhxFo9guPU4HeNtzRdPaGAXAzXvn7V5chVe8sj3BfvDgwXlCKctCcFIllOgheyZbZ7btFC++9bW0QTijhWo1hZ6LhvjcKQ1zf53RGX7zf7GBu9sheqWPKlWqJJzynBZo8UH5Wow9t/WK5fanNj6ST2U2zPQGxuCH+DBMOKJAhhaalrOXlqj+feEiz1bLAzEmhLzIREgcWJQyZmdI5VO0B8r11ND+o1iBYgoohDUuJc+bd9r6RvmZBSE+HqggWE4p3D0/NzY7mQH+51u0osfOfaTHVLqlUM3IMoXi1vH4a0Qrg1P6c0g=='
  14.         req.extData = 'extData'
  15.         let finished = await this.wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
  16.         console.log("微信支付", finished)
  17.       }).width('80%')
复制代码
注意事项:请注意相关文件的引入路径,相关参数请替换后端返回的参数
相关参数备注:解释不一定准确,详细字段和内容请参考后端返回的数据,每个人的书写习惯不一样
  1. partnerId // 商户号
  2. appId // 应用ID
  3. packageValue //固定名称 Sign=WXPay
  4. prepayId// 微信预支付交易会话ID
  5. nonceStr// 随机字符串
  6. timeStamp// 时间戳
  7. sign// 签名
  8. extData//可选 如需写: extData
复制代码
支付结果会在这个函数里回调:
  1.   onResp(resp: wxopensdk.BaseResp): void {
  2.     console.log('微信支付',JSON.stringify(resp))
  3.     wxopensdk.Log.i(kTag, "onResp:%s", JSON.stringify(resp))
  4.     this.onRespCallbacks.forEach((on) => {
  5.       console.log('微信支付1',JSON.stringify(resp))
  6.       on(resp)
  7.     })
  8.   }
复制代码
相关回调码:
  值
  描述
  解决方案
  0
  成功
  展示成功页面
  -1
  错误
  可能的缘故原由:签名错误、未注册AppID、项目设置AppID不正确、注册的AppID与设置的不匹配、其他异常等
  -2
  用户取消
  无需处置惩罚。发生场景:用户不支付了,点击取消,返回App
  各人可在支付回调里处置惩罚相关利用
相关文档链接:
微信sdk库:OpenHarmony三方库中央仓
微信demo下载:包含微信支付,微信登录,微信分享:https://dldir1.qq.com/WechatWebDev/opensdk/ohos/OpenSDK-1.0.0.zip
以上就是微信支付的流程了。对各人有资助的话,可以点赞收藏哦


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表