feat:使用企业微信JS-SDK的onMenuShareAppMessage()实现点击转发自定义分享内容(TypeScript)

这篇具有很好参考价值的文章主要介绍了feat:使用企业微信JS-SDK的onMenuShareAppMessage()实现点击转发自定义分享内容(TypeScript)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:企业微信应用使用企业微信JS-SDK的分享接口实现分享样式自定义
原生:
feat:使用企业微信JS-SDK的onMenuShareAppMessage()实现点击转发自定义分享内容(TypeScript)
需要实现成:
feat:使用企业微信JS-SDK的onMenuShareAppMessage()实现点击转发自定义分享内容(TypeScript)

企业微信JS-SDK 是企业微信面向网页开发者提供的 基于企业微信内 的网页开发工具包。
通过使用企业微信JS-SDK,网页开发者 可借助企业微信 高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用企业微信分享、扫一扫等企业微信特有的能力,为企业微信用户提供更优质的网页体验。

传送门:企微JS-SDK开发文档

步骤一:引入JSSDK

<!-- 这里以jssdk1.2.0为例子,在html文件里引入jssdk -->
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

步骤二:通过config接口注入权限验证配置

// 示例:
wx.config({
    beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,企业微信的corpID,必须是本企业的corpID,不允许跨企业使用
    timestamp: '', // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见 附录-JS-SDK使用权限签名算法
    jsApiList: [] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
});

这里的config里的内容一般是请求后端获取,举个例子:

新建一个qwjssdk.ts文件或js文件,这里以Typescript为例,JavaScript类似。

  1. 提前将需要用到的api用一个数组存起来
const defaultApiSet = new Set([
  'onMenuShareAppMessage', // 获取“转发”按钮点击状态及自定义分享内容接口
])
/**
 * [getBrowserEnv 判断当前浏览器的环境,可忽略]
 * @return {[Object]}
 */
function getBrowserEnv(): {isWxWork: boolean, wxWorkVersion: string | null} {
  const ua = navigator.userAgent.toLowerCase()
  const isWxWork = /wxwork/i.test(ua) && /micromessenger/i.test(ua)
  // 获取企业微信版本
  let wxWorkVersion = null
  if (ua.match(/wxwork\/(\S*)\s/)) {
    wxWorkVersion = (ua.match(/wxwork\/(\S*)\s/) as object)[1]
  }
  return {
    isWxWork,
    wxWorkVersion
  }
}
  1. 定义一个方法调用签名接口和注册配置信息

    getParams是请求后端接口,获取签名,返回来的参数可以与配置信息对应上即可,一般返回(appId、timestamp、noncestr、signature)。具体可阅读JS-SDK使用权限签名算法。

    注意点: url的赋值

    为什么 url赋值 要使用encodeURIComponent()
    :因为有个业务场景需要带值为中文的请求参数,所以这里需要先编码再把url传给签名接口,否则不会走分享api。这里因项目而异。没有作者这个业务场景的话可以直接将url赋值为window.location.href.split('#')[0]

// 请求接口获取参数
async getParams() {
    const url = encodeURIComponent(window.location.href.split('#')[0]) // 注意点,因项目而已
    const res = await Api.getJssdkConfig({ launchUrl: url }) // 请求自己定义接口的方法
    if (res.code.value === 0) {
      return new Promise((resolve, reject) => {
        resolve(res.data.value)
      })
    }
  }
async initConfig() {
	const config:any = await this.getParams() 
	if (!config) {
		console.log('签名失败')
		return false
    }
    config.jsApiList = Array.from(defaultApiSet) // 将需要用到的api赋值给confi.JsAPIList
    await this.registeredConfig(config) // 去注册,将注册信息带到注册配置方法里面
}
  1. 注册配置信息
// 注册配置信息
registeredConfig(config) {
    console.log('registeredConfig config:>> ', config);
    window.wx.config({
      // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
      beta: true,
      // 开启调试模式
      debug: false,
      // 必填,企业微信的corpID
      appId: config.appId,
      // 必填,生成签名的时间戳
      timestamp: +config.timestamp,
      // 必填,生成签名的随机串
      nonceStr: config.noncestr,
      // 必填,签名,见 附录-JS-SDK使用权限签名算法
      signature: config.signature,
      // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
      jsApiList: config.jsApiList
    })
    return new Promise((resolve, reject) => {
      // 如果是企业微信端的情况下执行,浏览器的情况下走else。不判断的话可忽略此判断。此方法在上面已经写了。
      if (getBrowserEnv().isWxWork) {
        window.wx.ready(() => {
          console.log('注册成功', config)
          // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
          resolve(null)
        })
        window.wx.error(err => {
          // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
          console.log('注册失败', err, config)
          reject(err)
        })
      } else {
        resolve(null)
      }
    })
  }

步骤三:封装分享api

在公共方法文件里面封装分享方法的调用。
这里就命名一个common.ts文件为例吧。

注意点:每次调用api都需要重新注册一遍

每次调用api之前都需要调用前面写的initConfig()重新注册一遍配置信息。否则分享的样式比如title、desc、imgUrl都会不生效。

// 引入qwjssdk文件,路径自己决定
import qwjssdk from '~/utils/qwjssdk'
/**
 * 通过调用jssdk能力自定义分享内容
 * */
export const wxShareAppMessage = async (shareObj: shareObj) => {
  await qwjssdk.initConfig() // 重点!!这里根据业务需求,需要每次更换路由都需要重新注册一遍,否则分享出去的样式不生效。
  if (!window.wx) {
    return
  }
  // 获取“转发”按钮点击状态及自定义分享内容接口
  window.wx.onMenuShareAppMessage({
    title: shareObj.title, // 分享标题
    desc: shareObj.desc, // 分享描述
    link: shareObj.link, // 分享链接
    imgUrl: shareObj.imgUrl, // 分享图标
    success: function () {
      // 这里可以写分享成功之后的逻辑
      console.log('SUCCESS onMenuShareAppMessage :>> ', shareObj);
    },
    error: (err)=>{
      // 这里可以写分享失败之后的逻辑
      console.log('ERR onMenuShareAppMessage :>> ', err);
    }
  });
}

这里只用到了success 和 error 的回调,其他回调可以看下面这段官网的描述:

所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:
success:接口调用成功时执行的回调函数。
fail:接口调用失败时执行的回调函数。
complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。
cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。
trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。
注意
不要尝试在 trigger 中使用 Ajax 异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用 Ajax 的回包会还没有返回。
以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性err_msg,其值格式如下:
调用成功时:“xxx:ok” ,其中xxx为调用的接口名
用户取消时:“xxx:cancel”,其中xxx为调用的接口名
调用失败时:其值为具体错误信息

步骤四:监听转发按钮

在业务代码里面,引入封装的api,这里就以index.vue举例叭

import { wxShareAppMessage } from '~/utils/common'
/**
 *  调用分享api,实现分享自定义内容
 */
const toShare = () => {
  shareData.value = {
    title: '搜索',
    desc: '搜索',
    link: window.location.href,
    imgUrl: 'xxxxxxxxx.png'
  }
  wxShareAppMessage(shareData.value)
}

toShare()  // 根据自身的业务逻辑调整请求位置

执行上面代码就代表着开始监听转发按钮了。

快去尝试叭~文章来源地址https://www.toymoban.com/news/detail-467020.html

到了这里,关于feat:使用企业微信JS-SDK的onMenuShareAppMessage()实现点击转发自定义分享内容(TypeScript)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JS-SDK微信支付开发攻略

      一、吐槽篇 一个字——坑!两个字——很坑!三个字——非常坑!首先,微信支付接口作为微信开发接口的一部分,竟然有一本书那么厚的官方文档,共36页,更重要的是,这36页还不能把开发的流程说清楚,描述过于分散,过度分类,导致遇到一个问题的时候很难定位,

    2024年02月08日
    浏览(35)
  • H5项目中使用微信JS-SDK(以H5项目批量上传图片为例,兼容IOS及安卓)

    H5项目中使用微信图片上传相关sdk,主要用于解决 1.安卓手机无法一次选择多张图片进行上传问题;2.控制IOS系统手机一次可无限量选择图片上传的问题 一、准备工作:公众号配置 验证所需使用的sdk是否符合需求 可在使用场景中,打开微信官方提供的 微信SDKDemo 链接,或企业

    2024年02月07日
    浏览(37)
  • h5接微信js-sdk的详细步骤

    流程图: 微信文档https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 登录微信公众平台公众号设置,进行js安全域名设置 配置完安全域名之后,会让微信知道我们有这样一个域名,但是此时还不能实现双方对话 1.申请一个安全域名 2.去微信公众平台下载MP_verify_WCdi1jnSEaG

    2024年02月04日
    浏览(38)
  • vue3引入JS-SDK实现h5分享小卡片、跳转微信小程序功能

    微信js-sdk官方文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 想要实现的效果: 1.登录微信公众平台,进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 2.通过npm引入js-sdk 安装成功后,可以在package.json中找到\\\"weixin-js-sdk\\\" 3.在main.js中,将js-sdk挂载

    2024年02月11日
    浏览(39)
  • 微信分享第三方连接(H5页面)自定义缩略图、标题、描述(显示分享框,而不是链接)(微信JS-SDK)

    首先要说明几个分享相关的问题: 现在微信不支持自定义按钮分享组件(也就是说不能点击某个按钮分享),只能通过微信右上角的三个小点,点击后选择分享给朋友,朋友圈等。 当前从企业微信分享到微信好友和微信朋友圈是有问题的,一些手机(有些是因为app版本,企

    2024年02月09日
    浏览(43)
  • 微信 JS-SDK 实现自定义分享、手机选图拍照、图片音频处理、地理位置、摇一摇等功能

    微信 JS-SDK 是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包 通过使用微信 JS-SDK ,开发者可借助微信高效地使用 拍照 、 选图 、 语音 、 位置 等手机系统的能力 同时可以直接使用 微信分享 、 扫一扫 、 卡券 、 支付 等微信特有的能力,是管理微信一切

    2024年02月09日
    浏览(32)
  • 微信公众号 H5 JS-SDK wx.config 报错 invalid url domain 及 invalid signature 错误原因及解决方式

    在项目进行JSSDK使用的过程中,出现了很多问题,其中报错invalid url domain 以及 invalid signature最多,也最头疼,部分坑在文档里也并没有写清楚,这里就简单说下这两个报错的原因和解决方式 当报错invalid url domain时 其实离成功不远了,错误原因也很直白,就是url并没有在公众

    2024年02月08日
    浏览(32)
  • 无条件抽奖和条件抽奖(互动功能发起端JS-SDK)

    允许开始前对抽奖进行奖品、中奖人数、中奖人员等设置,完成设置后可以开始抽奖。 本功能只支持讲师、嘉宾、助教、管理员这四种角色进行抽奖的发起和停止。 支持自定义设置中奖用户信息采集字段。 支持设置预设中奖用户。 支持设置定时开奖 可查看中奖名单     在

    2024年02月08日
    浏览(29)
  • 低代码如何集成多平台(企业微信、钉钉、飞书)SDK,且听我细细道来

    我们是一家做 低代码 产品开发的公司,我司的低代码产品支持在多个平台环境内使用:有钉钉、企业微信、微信、飞书、W eb 浏览器(如谷歌),后续还会接入更多平台。面对这么多平台,每个平台的SDK可能一致,可能不一致。 那我们如何集成多平台SDK呢? 且听我细细道来

    2024年04月13日
    浏览(36)
  • uniapp(vue3) - 微信小程序平台使用import引入外部js文件出现undefined,正常引入js文件(sdk插件)文件路径正确但console.log控制台打印时却是undefined

    注:uniapp 小程序平台! 在使用 uniapp 微信小程序端导入 SDK 的过程中,您可能会遇到这样的情况: 使用 console.log() 打印导入的模块名称时,实际输出的名称并不是您期望的名称。这是因为 uniapp 进行了编译和打包处理后,会将代码重新命名以减小文件大小和提高执行效率,包

    2024年02月10日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包