鸿蒙微信二次封装-简单好用持续更新,微信sdk,wechat-sdk

鸿蒙微信二次封装

https://ohpm.openharmony.cn/#/cn/detail/@zyl%2Fwxcommonlibhar
“keywords”: [‘wxsdk’,‘wx’,‘wx二次封装’,‘微信二次封装’,‘微信封装’,‘zhouyouli’,‘zyl’,‘wechat二次封装’,‘微信’,‘wechat_open_sdk’],

wxcommonLibHar(harmony-utils (API12 - 5.0.3.906)

HarmonyOS 5.0.3 Beta2 SDK,原样包含OpenHarmony SDK Ohos_sdk_public 5.0.3.131 (API Version 15 Beta2)

🏆简介

wxcommonLibHar是一个公共的方法,如函数的封装

🌞下载安装

  ohpm install @zyl/wxcommonlibhar

🙏使用说明

鸿蒙微信二次封装

前期准备

前期准备

申请appid,需要准备Bundle ID、Identifier

Bundle ID 指的是鸿蒙应用的包名,详情可查看

Identifier 指的是鸿蒙应用的 appIdentifier,详情可查看

注意事项:

环境安装

ohpm i @tencent/wechat_open_sdk

ohpm i @zyl/wechatcommonlibhar

在 module.json5 文件中加入

    "querySchemes": [
      "weixin",
    ],
		........

        "skills": [
          {

            "actions": [
              ....
              "wxentity.action.open" // 微信的回参的
            ],

至此完毕开始引入包写代码

建立一个common.ets放 export const APP_ID = ‘wx66666666666’

export  const APP_ID = 'wx66666666666'

使用

EntryAbility.ets加上初始化代码

import { handleWeChatCallIfNeed } from '@zyl/wechatcommonlibhar'; // 包
import { APP_ID } from './common';


export default class EntryAbility extends UIAbility {
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    handleWeChatCallIfNeed(want,APP_ID) // 微信需要的
  }

  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
     wxopensdk.Log.i('kTag', "onResp:%s") // 如果项目中没有使用,运行的时候会把这个包清楚,可能。
    handleWeChatCallIfNeed(want,APP_ID) // 微信需要的

  }

检查微信是否安装

const flag = checkWeChatApp()  // 返回布尔值

微信分享文字

new ShareWxSdk(“APP_ID”,“分享对话还是朋友圈,不传就是对话”)

  • @param currentScene(可传,默认0(SendMessageToWX.Req.WXSceneSession)),发送的目标场景,
    let share = new ShareWxSdk(APP_ID)
    share.wechatSendText('WechatSendText666').then((res:SendReqResultWrap)=>{
    console.log('resres',res)
  })

微信分享图片一 网络图片或者arraybuffer

系统跳转限制大小不能超过100KB,uri和imageData同时存在时会优先使用uri字段
WechatSendImagrOrUrl(param) param 可以是string(网络地址)也可以是ArrayBuffer,代码自行判断处理

  • @param currentScene(可传,默认0),发送的目标场景
  let share = new ShareWxSdk(APP_ID)
  share.WechatSendImagrOrUrl('图片地址').then((res:SendReqResultWrap)=>{
    console.log('resres',res)
  })

微信分享图片二 从相册选择图片发送

  • @param currentScene(可传,默认0(SendMessageToWX.Req.WXSceneSession)),发送的目标场景,
  • @param filePath (可传可忽略) 指定缓存的地址,便于项目缓存的维护
    默认是在getContext().cacheDir + ‘/Photo’ + ${Date.now()}hongmeng${Math.random()}IMG.jpg
import { SendReqResultWrap } from "@tencent/wechat_open_sdk"
  let share = new ShareWxSdk(APP_ID)
  share.wechatSendAlbumSelection().then((res:SendReqResultWrap)=>{
    console.log('resres',res)
  })

微信拉起小程序

  • @param param:LaunchMiniProgramReq
import { LaunchMiniProgramReq } from "@tencent/wechat_open_sdk"
  let share = new ShareWxSdk(APP_ID)
        share.wechatLaunchMiniProgram({
          userName:'gh_00000000000000000000',
          path:'/pages/index'
        } as LaunchMiniProgramReq)

微信支付

wechatPay

  • @param param:PayReq
       let share = new ShareWxSdk(APP_ID)
          share.wechatPay({
            appId: "wx0000000000000000",
            partnerId: "000000000000000",
            prepayId: "wx000000000000000",
            nonceStr: "aaaaaaaaaaaaaaaaaaaa",
            timeStamp: "000000000000000",
            packageValue: "packageValue",
            sign: "000000000000000000000000",
            extData: 'extData',
            signType: 'signType'
          } as PayReq).then((res:BaseResp)=>{

          if(res instanceof PayResp){
           // 使用支付的类型
          }
            console.log('支付完成后,从微信回来的回调',JSON.stringify(res))
          })

微信授权登录+ code换token +获取用户信息

share.wechatOAuth(scope, state)

  • @param scope //应用授权作用域,获取用户个人信息则填写 snsapi_userinfo (只能填 snsapi_userinfo)

  • @param state 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止 csrf
    攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验。在state传递的过程中会将该参数作为url的一部分进行处
    参数详情可见

    share.getUserInfo(APP_SECRET,res)

  • @param res wechatOAuth授权返回的值

  • @param APP_SECRET 应用密钥 AppSecret,在微信开放平台提交应用审核通过后获得

            Button('授权并且获取用户信息').onClick(async () => {
              const scope = "ssssssssssss"
              const state = "bbbbbbbbb"
              const APP_SECRET = "ssssssssssssssssssssfdsfef"
              let share = new ShareWxSdk(APP_ID)
              try {
                const res:BaseResp = await share.wechatOAuth(scope, state)
                console.log('resres', res,res instanceof SendAuthResp)
                if (res instanceof SendAuthResp) {
                  // 使用支付的类型
                  console.log('resrescatch', res.code)
                  const data:WechatUserUserInfo =  await share.getUserInfo(APP_SECRET,res)
                  console.log('resrescatch', data)
                  AlertDialog.show({
                    message:'-'+JSON.stringify(data)
                  })
                }
              } catch (e) {
              }
            })

微信网页类型分享-演示原生wxapi使用-可自行扩展

Button('网页类型分享')
          .onClick(async () => {
            const wxApi = MyWXApi(APP_ID)
            const webpageObject = new WXWebpageObject()
            webpageObject.webpageUrl = "http://www.qq.com"
            const mediaMessage = new WXMediaMessage()
            mediaMessage.mediaObject = webpageObject
            mediaMessage.title = "测试网页链接"
            mediaMessage.description = "测试网页摘要"
            const thumbData = await getContext(this).resourceManager.getMediaContent($r("app.media.video_cache_play"))
            const thumbPixel = image.createImageSource(thumbData.buffer).createPixelMapSync()
            const thumbBuffer =
              await image.createImagePacker().packToData(thumbPixel, { format: "image/png", quality: 100 })
            mediaMessage.thumbData = new Uint8Array(thumbBuffer)
            const req = new SendMessageToWXReq()
            req.callbackAbility = 'callbackAbility'
            req.scene = SendMessageToWXReq.WXSceneSession
            req.message = mediaMessage
            wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
          })

微信原生使用

如果想使用其他的也可以使用微信原来的WXApi-封装后叫做MyWXApi

import { MyWXApi  } from '@zyl/wxcommonlibhar';
MyWXApi(APP_ID).sendReq(...或者其他)

完整的demo

import {
  BaseResp,
  LaunchMiniProgramReq,
  PayReq,
  SendAuthResp,
  SendMessageToWXReq,
  SendReqResultWrap,
  WXMediaMessage,
  WXTextObject,
  WXWebpageObject
} from "@tencent/wechat_open_sdk"
import { MyWXApi } from "@zyl/wxcommonlibhar"
import { checkWeChatApp } from "@zyl/wxcommonlibhar"
import { ShareWxSdk, WechatUserUserInfo } from "@zyl/wxcommonlibhar"
import { APP_ID, APP_SECRET, scopeReq, stateReq } from "./utils/Constants" // 这个需要申请哟
import { common } from "@kit.AbilityKit"
import { image } from "@kit.ImageKit"

@Component
export struct wechatDemo {
  private share: ShareWxSdk = new ShareWxSdk(APP_ID)

  build() {
    RelativeContainer() {
      Column() {
        Button('授权并且获取用户信息').onClick(async () => {
          try {
            const res: BaseResp = await this.share.wechatOAuth(scopeReq, stateReq)
            console.log('resres', res, res instanceof SendAuthResp)
            if (res instanceof SendAuthResp) {
              // 使用支付的类型
              console.log('resrescatch', res.code)
              const data: WechatUserUserInfo = await this.share.getUserInfo(APP_SECRET, res)
              AlertDialog.show({
                message: '-' + JSON.stringify(data)
              })
            }
          } catch (e) {
          }
        })
        Button('微信支付').onClick(async () => {
          this.share.wechatPay({
            appId: this.share.APP_ID,
            partnerId: "partnerId",
            prepayId: "prepayId",
            nonceStr: "nonceStr",
            timeStamp: "timeStamp",
            packageValue: "packageValue",
            sign: "sign",
            extData: 'extData',
            signType: '"signType"'
          } as PayReq).then((res: BaseResp) => {
            console.log('支付', JSON.stringify(res))
            AlertDialog.show({
              message: '' + JSON.stringify(res)
            })
          }).catch((e: Error) => {
            AlertDialog.show({
              message: '' + JSON.stringify(e)
            })
          })
        })
        Button('微信分享图片')
          .onClick(() => {
            this.share.wechatSendImagrOrUrl('http图片.jpg')
              .then((res: SendReqResultWrap) => {
                console.log('resres', res)
              }).catch((e: Error) => {
              console.log('resrescatch', JSON.stringify(e))
            })
          })

        Button('是否安装微信')
          .onClick(() => {
            const flag = checkWeChatApp() // 返回布尔值
            AlertDialog.show({
              message: '' + JSON.stringify(flag)
            })
          })


        Button('微信分享文字')
          .onClick(() => {
            let share = new ShareWxSdk(APP_ID)
            share.wechatSendText('WechatSendText666').then((res: SendReqResultWrap) => {
              AlertDialog.show({
                message: '' + JSON.stringify(res)
              })
            })

          })
        Button('微信分享图片二 从相册选择图片发送')
          .onClick(() => {
            this.share.wechatSendAlbumSelection().then((res: SendReqResultWrap) => {
              AlertDialog.show({
                message: '' + JSON.stringify(res)
              })
            })
          })

        Button('微信拉起小程序')
          .onClick(() => {
            this.share.wechatLaunchMiniProgram({
              userName: '00000000000000000000000',
              path: '/index'
            } as LaunchMiniProgramReq)
          })

        Button('微信原生使用MyWXApi(APP_ID)')
          .onClick(() => {
            const wxApi = MyWXApi(APP_ID)
            let textObject = new WXTextObject
            textObject.text = "分享的内容"
            let mediaMessage = new WXMediaMessage()
            mediaMessage.mediaObject = textObject
            let req = new SendMessageToWXReq()
            req.scene = SendMessageToWXReq.WXSceneSession
            req.message = mediaMessage
            wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
          })
        Button('网页类型分享')
          .onClick(async () => {
            const wxApi = MyWXApi(APP_ID)
            const webpageObject = new WXWebpageObject()
            webpageObject.webpageUrl = "http://www.qq.com"
            const mediaMessage = new WXMediaMessage()
            mediaMessage.mediaObject = webpageObject
            mediaMessage.title = "测试网页链接"
            mediaMessage.description = "测试网页摘要"
            const thumbData = await getContext(this).resourceManager.getMediaContent($r("app.media.video_cache_play"))
            const thumbPixel = image.createImageSource(thumbData.buffer).createPixelMapSync()
            const thumbBuffer =
              await image.createImagePacker().packToData(thumbPixel, { format: "image/png", quality: 100 })
            mediaMessage.thumbData = new Uint8Array(thumbBuffer)
            const req = new SendMessageToWXReq()
            req.callbackAbility = 'callbackAbility'
            req.scene = SendMessageToWXReq.WXSceneSession
            req.message = mediaMessage
            wxApi.sendReq(getContext(this) as common.UIAbilityContext, req)
          })
      }
    }.id('refershEmptyClass').width('100%').height('auto')
  }
}

🙏内容有问题联系纠正Q:867374269

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值