鸿蒙微信二次封装
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
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')
}
}