企业微信使用微信 jssdk 实现转发分享功能

LibraHeresy
• 阅读 501

前言

又接到一个看似简单,实则难受的需求,实现企业微信环境转发 H5 页面到微信好友和朋友圈,并保留卡片形式。

需求简单明了,但是和微信沾边的,都不是一条好走的路。

一上手就发现问题了,企微的jssdk它不更新了。兜兜转转发现,好像企微和微信的jssdk统一用@wecom/jssdk

果然不愧是微信啊,张小龙 NB

而我在发现这个状况之前已经用了第三方封装的包,weixin-js-sdk。幸好问题不大,因为这个包只是将官方 js-sdk 转为了 CommonJS 格式。

但我的建议是使用 @wecom/jssdk ,因为我已经发现有些方法 weixin-js-sdk 并不支持,比如 updateAppMessageShareDataupdateTimelineShareData ,这两个新的分享方法。

环境

企业微信 4.1.3(21966)

weixin-js-sdk 1.6.0

实现

引入微信 jssdk

我说我怎么引入的这么难受呢。。。

// terminal
npm install weixin-js-sdk

// updateShare.js
import * as wx from 'weixin-js-sdk'

注册企微接口权限

这一步其实挺简单的,调用 wx.config 接口就行,重点是参数的获取,还有就是注册以后的 url 不会变动了,如果切换页面你就要重新注册一次。

JS-SDK 说明文档

附录 1-JS-SDK 使用权限签名算法

附录 2-所有 JS 接口列表

// 注册接口权限

const jsapiTicket = ""; // 我是后端返回的,前端也可以自己获取,具体的看附录1

const timestamp = Number(Date.now().toString().substring(0, 10)); // 获取时间戳
const nonceStr = getuuid(); // 获取uuid
const url = ""; // 注册url,需要与当前页面一致
const signature = CryptoJS.SHA1(
  `jsapi_ticket=${jsapiTicket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${url}`
).toString(); // 生成签名

wx.config({
  debug: false, // 是否开启调试模式,开启的话,每调用一次api就会回调弹出结果弹窗。
  appId: "", // 填写企业号corpid,但是要注意的是,如果该网页被分享到微信,那你就要用微信公众号的appid才能获取到接口权限
  timestamp: "", // 必填,生成签名的时间戳。注意!微信要的时间戳精度是到秒
  nonceStr: "", // 必填,生成签名的随机串。随便一个uuid就行,只要是不重复的随机串都可以。
  signature: "", // 必填,签名,见附录1。
  jsApiList: [], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2。
});

// 成功回调
wx.ready(function (res) {
  // config信息验证成功会执行ready函数

  // 检查环境是否支持指定JS接口
  wx.checkJsApi({
    jsApiList: [],
    success: function (res) {},
  });
});

// 失败回调
wx.error(function (err) {
  // config信息验证失败会执行error函数,如签名过期导致验证失败
  // 具体错误信息可以打开config的debug模式查看,也可以在返回的err参数中查看,对于SPA可以在这里更新签名。
});

调用分享接口

最难的就是注册接口权限了,如果你成功了,那接下来就是一片坦途。

const config = {
  title: '', // 分享卡片标题
  desc: '', // 分享卡片描述
  imgUrl: '', // 分享卡片头像
  link: '', // 分享卡片点击打开的网址
  success: function () {
  // 用户确认分享后执行的回调函数
  },
  cancel: function () {
  // 用户取消分享后执行的回调函数
  },
}
。
// 分享接口的入参都差不多
// 分享到微信,即将废弃
wx.onMenuShareAppMessage(config)
// 分享到朋友圈,即将废弃
wx.onMenuShareTimeline(config)

问题

再次分享卡片头像图不加载

常见原因就是你的头像图太大,导致加载失败,最好控制在 200k 以内,还有就是可能你的头像图链接挂了。

错误码:63002, invalid signature

如果你确定你的 noncestrjsapi_ticket 没有问题,但就是提示非法签名,那可能是因为你的 timestamp

因为微信的 timestamp 精度是到秒,而 JSDate.now() 方法精度是到毫秒。

真不愧是你啊,微信。

const js_timestamp = Date.now();

const wx_timestamp = Number(Date.now().toString().substring(0, 10)); // 需要这样处理
点赞
收藏
评论区
推荐文章
vue h5 对接支付宝,微信支付,微信js支付
vueh5实现支付(支付宝,微信)h5端实现支付难度不大,只是有些小的点需要注意下,其他的看文档撸就行了。支付宝很简单,后端返回一个html,前端插入调用就行了,微信支付分两种:1、微信内支付(jsapi,微信内浏览器)2、微信外支付(h5支付)。一、支付宝支付//前端啥都不用管,交给后端去干,返回html调用点击就好了/
翼
3年前
微信支付 (JSSDK支付)
官方文档微信支付https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter7_7&index6微信授权获取codehttps://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JSSDK.html58准备工作微信公
Jacquelyn38 Jacquelyn38
3年前
手写一个仿微信登录的nodejs程序
前言首先,我们看一下微信开放文档中的一张图:上面的一幅图中清楚地介绍了微信登录整个过程,下面对图上所示进行总结:一、二维码的获得1.用户打开登录网页后,登录网页后台根据微信OAuth2.0协议向微信开发平台请求授权登录,并传递事先在微信开发平台中审核通过的AppID和AppSecrect等参数;2.微信开发平台对AppID等参数进行验证,并向
Easter79 Easter79
3年前
three.js
第1章课程介绍介绍了微信小游戏的概念以及相关的由来,从宏观上对于微信小游戏的定位和价值有一个明确的认识第2章微信小游戏平台与特性讲了微信小游戏平台的相关特性,包括微信小游戏工程的建立,微信小游戏开发工具的详细使用,以及微信小游戏相关API的实战等第3章THREEJS与WebGL核心概念通过理论和实战,讲解了什么是webgl、什
Wesley13 Wesley13
3年前
5G消息与微信小程序互联互通?北京国都互联这么做……
最近微信小程序上线了一个超级流量的新入口URLScheme,据微信官网介绍,scheme码适用于短信、邮件、外部网页等拉起小程序的业务场景。通过小程序页面的URLScheme,可以在短信、邮件或微信外部的网页中打开微信小程序。意义在于将微信流量生态延伸到微信以外渠道,进一步完善了小程序和外部渠道互通的营销场景。北京国都互联第一时
Stella981 Stella981
3年前
Python微信机器人
Python微信机器人本文目录一简介二登录微信三微信好友男女比例四微信好友地域分布五微信聊天机器人一简介wxpy基于itchat,使用了Web微信的通讯协议,,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。实现了微信登录、收发消息、搜索好友、数
Stella981 Stella981
3年前
Hash, PushState 和微信 JSSDK 授权
最近将riot.js升级到了3.0,并用上了新版本的riotroute,原先用了一年多的2.2.4版本内置的riot.route只支持hash形式的SPA单页面应用,riotroute则支持pushState。Hash方式有个缺点,就是服务器不知道地址栏中之后的内容,放在微信里,就导致了未授权用户授权后想返回原界面
liam liam
1年前
企业微信 API 接口调用教程:零基础学习企业微信 API 开发
本文通过accesstoken凭证的方式来讲解怎么调用,并一步步介绍如何获取企业微信API的corpsecret、corpid、accesstoken凭证以及怎么向企业微信的应用发送消息。企业微信API在线地址为:https://qiyeweixin.ap
流浪剑客 流浪剑客
1年前
微信伴侣WechatTweak for mac v3.8.5中文集成版 支持M1
微信小助手故障之后如何实现微信多开和微信防撤回免认证功能呢?这里小编为大家推荐另外一款非常不错微信多开助手微信伴侣WechatTweak,微信伴侣WechatTweak功能就比较简单直接,主要包括防撤回、多开、免二次认证登录和消息处理增强。下载:
流浪剑客 流浪剑客
1年前
微信伴侣WechatTweak for mac(微信防撤回、多开助手)v3.8.5中文集成版
微信小助手故障之后如何实现微信多开和微信防撤回免认证功能呢?这里小编为大家推荐另外一款非常不错微信多开助手微信伴侣WechatTweak,微信伴侣WechatTweak功能就比较简单直接,主要包括防撤回、多开、免二次认证登录和消息处理增强。下载: