微信+企微+微信小程序 开发过程中的疑难杂症汇总

28. IOS下微信环境 -- 分享的文章内容描述与图标不对

微信应用右上角自带的分享功能,在分享内容之前需要调用wx.config对微信分享JS-SDK鉴权,需要的传参如下:

js 复制代码
wx.config({
  debug: true, // 开启调试模式
  appId: "xxx", // 必填,公众号的唯一标识
  timestamp: "timestamp", // 必填,生成签名的时间戳
  nonceStr: "nonceStr", // 必填,生成签名的随机串
  signature: "signature",// 必填,签名
  jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline'] // 必填
});

其中不好获取的参数是signature。signature是怎么获取的呢?在我们的项目中,是通过请求getTicket接口,获取signature,而请求getTicket接口的参数中,最容易出问题的就是jsUrl。

js 复制代码
const params = {
    appId: newAppId || appId,
    corpId: env === "wx" ? authCorpId : currentCorpId,
    wechatType: env,
   jsUrl: url,
    agentId,
  };
  const res = await ajax('getTicket', params, isShowError);
  const { retdata = {} } = res;
  const { appId, noncestr, signature, timestamp, nextUpdateTime } = retdata;
  const obj = {
    debug: false, // 是否开启调试模式
    appId, // appid
    timestamp, // 时间戳
    nonceStr: noncestr, // 随机字符串
    signature, // 签名
    jsApiList,
    openTagList: [],
  };
  if (env === 'qywx') {
    obj.beta = true;
    obj.appId = currentCorpId;
  }
  wx.config(obj);

这个jsUrl参数,按理说要取当前分享页面的url,在Android上确实是这样,可是在IOS手机上,企业微信环境下没有问题,可是微信环境如果取当前分享页面的url,

js 复制代码
url = encodeURIComponent(window.location.href);

分享出去的内容,图标和描述的展示会有问题,

应该取进入单页应用首页的url,而不是当前页面的url

js 复制代码
url = encodeURIComponent(localStorage.getItem(keyDict.entryUrl));

所以获取jsUrl的时候,要添加判断条件:

js 复制代码
// 如果是 iOS 设备,个人微信环境,则使用应用首页的 URL 去请求 wxConfig,不然的话会导致 iOS 中分享的链接描述信息或者图标不对
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent) && env === "wx") {
  // console.log('签名地址=======================', localStorage.getItem(keyDict.entryUrl))
  url = encodeURIComponent(localStorage.getItem(keyDict.entryUrl));
} else {
  // console.log('签名地址=======================', window.location.href)
  url = encodeURIComponent(window.location.href);
}

鉴权失败会报如下错误,此时重点要检查一下url有没有多次调用encodeURIComponent编码

js 复制代码
wx.config {"errMsg": "config:invalid signature"}

27. OAuth2.0 网页授权连接如何构造?

构造方参参见官方文档

26.wx.agentConfig 授权配置客户聊天JSSDK ['sendChatMessage', 'getCurExternalChat', 'getContext']时,报错

解决方法: 在企业微信管理后台,给对应的应用授予 可调用外部联系人接口的权限。如果企业创建了上下游,则菜单导航是" 客户与上下游 ",否则导航菜单是" 客户联系 "

25 getCurExternalContact:fail_without context of external contact 这个报错是未从特定的入口进入,需要在聊天工具栏或个人信息栏界面使用

24 在特定业务场景下,需要本地加载微信SDK,奇怪的是,本地加载的微信SDK,会缺少一些方法,比如说wx.agentConfig,而通过官方提供的在线方式加载,无此问题。

所以微信sdk不能本地加载。只能使用在线地址加载 [res.wx.qq.com/open/js/{s...](https://link.juejin.cn?target=https%3A%2F%2Fres.wx.qq.com%2Fopen%2Fjs%2F%24%257BsdkVerion%257D "https://res.wx.qq.com/open/js/%7BsdkVerion%7D")

23. wx.agentConfig: invalid corpId more info athttps://open.work.weixin.qq.com/devtool/query?e=40013

解决方法: 第三方公司配置的公司corpId须和提供的企业微信corpId保持一致

22 签名无效invalid signature more info at https://open.work.weixin.qq.com/devtool/query?e=40093

解决方法: 获取签名时传的url必须是当前页面的地址

21 个别机型,分享出去的页面,标题和描述正常,图标显示为回形针。JS-SDK调用没有任何问题。

解决方案: 如果分享图片原来是png,替换成jpg格式就可以了

20. 微信,企微分享出去的页面如果换肤,新换的皮肤不生效,怎么处理?

将换肤样式修改为通过接口请求的方式获取,可以有效解决这个问题。

19. 微信预览文件的sdk,在Android手机上存在文件标题设置不正确的问题。

18. 有些网页在微信中打开之后,缺少分享给微信好友,发送到朋友圈菜单。

原因:是由于分享的链接没有绑定微信公众号,另外,网址链接在微信中打开的话,都有该链接不是由微信提供,请保护好个人信息的安全性提示。

17.wx.agentConfig不报错,但不执行,可能和企业微信JS-SDK的版本有关

js 复制代码
  const script = document.createElement('script');
  script.crossorigin = 'anonymous';
  // script.src = 'https://res.wx.qq.com/open/js/jweixin-1.2.0.js';
  // 这个版本才是正确的
  script.src = 'https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js';
  script.onerror = () => {
    console.log('qy-wx-sdk:loadError');
  };
  document.head.appendChild(script);

16.微信小程序可以获取手机号,微信公众号h5页面,不能获取手机号。只能获取头像,昵称,地区,性别这些。

15. 企业微信--从聊天附件栏发送附件给好友,三天之后附件无法发送

因为上传的临时素材,仅在三天之内有效。 原因参见这里

14.微信开发者工具--选择企业功能,要先安装扩展,不安装的话会报 登陆错误

MiniProgramError 请重新登录 1000001

13. 微信上传图片的js-api能否判断上传图片的尺寸是否过大?

在微信环境中,可以用wx.chooseImage上传图片,返回的信息特别有限,只有一个文件id,无法判断上传文件的尺寸。

12. 微信小程序,子组件监听父组件properties属性变化的语法

js 复制代码
managerInfo: {
  type: Object,
  value: {},
  observer(newVal, oldVal) {
      console.log(newVal.avatar)
      newVal.avatar && this.cutImage(newVal);
  }
},

11.手机时区设置不对,会导致new Date().getTime()获取时间不对。另外IOS系统中,字符串转时间戳,字符串的时间要处理成yyyy/MM/dd的格式,yyyy-MM-dd会有兼容性问题。

10.在IOS手机上,在输入框onChange事件中去除输入文字的空格,中文输入法下,输入的字符会重复。

9.微信H5页面生产环境打开调试的小窍门,把网址复制出来,然后在后面加一个查询参数&debug,程序中判断页面上是否有这个查询参数,如果有,打开vConsole调试面板。

8.图片中含有二维码,长按能否识别

只要是png|jpg|jpeg格式的图片,图片中有二维码的话,长按就有识别效果。这是微信应用提供的功能。

7.企微和微信的判断方法

js 复制代码
  const WECHAT_ENV = {
    qyWechat: 1, // 企业微信
    wechat: 2, // 微信
  };
  // 判断当前是微信环境还是企业微信环境
  const getEnv = () => {
    const ua = window.navigator.userAgent.toLowerCase();
    // eslint-disable-next-line
    if (Boolean(ua.match(/MicroMessenger/i)) && Boolean(ua.match(/wxwork/i))) {
      // 企业微信
      // console.log('企业微信环境-1')
      return WECHAT_ENV.qyWechat;
      // eslint-disable-next-line
    } else if (Boolean(ua.match(/micromessenger/i))) {
      // 微信
      // console.log('微信环境-2')
      return WECHAT_ENV.wechat;
    }
  };

6.微信长按识别二维码之后打开两个窗口的问题,亟待微信官方解决。

微信官方,对bug处理不太及时,在一个页面扫描二维码之后,页面刷新,展示新页面,原来的页面并没有关闭。两年前有人就反馈过这个问题,到现在都没解决。

5.微信环境 添加经理二维码时获取的unionId与企业微信下拿到的unionId不一致。

是因为受到了企业微信中第三方自建应用的影响。

4.服务商代开发自建应用,报 redirect_uri需使用应用可信域名

解决方法:企微管理后台==>应用管理==>网页授权及JSSDK==>设置可信域名,注意有的应用是服务商代开发应用,需要服务商去配置

3. 用QRCode生成的二维码扫描不出来

QRCode生成的二维码,在微信中有些手机扫描不出来。需要避开一个坑:二维码的背景,不能出现黑色背景。还有生成二维码的错误级别,要设置成较低的级别,较高级别二维码的字符容量会降低。

js 复制代码
const QRCode = require('qrcode')
const options = {
    errorCorrectionLevel: 'H',
    type: 'terminal',
    quality: 0.95,
    margin: 1,
    color: {
        dark: '#000',
        light: '#FFF',
    },
};

QRCode.toDataURL(shareUrl,  options , function (err, url) {});

2.企微配置的网页欢迎语图标不展示问题

开启欢迎语功能后,成员成功添加客户为联系人时,客户可立即收到欢迎语。欢迎语可以配置成文字、图片、网页、小程序消息。项目中配置了一个网页欢迎语,发现网页卡片的图标不展示。解决方法如下:

  • 首先要采用img标签加载图片,不能用new Image()的方式加载图片,img标签style属性设置成display:none,资源也能正常下载;
  • 第二,欢迎语的图片尺寸要大于或接近200px*200px,文件体积不能超过32k

1.关闭当前窗口

使用场景:有些抽奖活动业务流程要求用户打开微信中的H5页面后,不符合参与抽奖活动的条件,点击了弹出提示中的知道了按钮后,关闭页面。关闭页面就需要调用下面这段代码功能。

js 复制代码
 // 微信关闭页面
  const closeWindow = () => {
    setTimeout(function () {
      if (typeof WeixinJSBridge === 'undefined') {
        document.addEventListener(
          'WeixinJSBridgeReady',
          function () {
            WeixinJSBridge.call('closeWindow');
          },
          false
        );
      } else {
        WeixinJSBridge.call('closeWindow');
      }
    }, 0);
  };
相关推荐
Rainbow_Technology5 小时前
劫持微信聊天记录并分析还原 —— 数据库结构讲解(四)
微信·微信聊天记录查看·微信聊天记录破解
丁总学Java12 小时前
微信小程序,点击bindtap事件后,没有跳转到详情页,有可能是app.json中没有正确配置页面路径
微信小程序·小程序·json
mosen86813 小时前
Uniapp去除顶部导航栏-小程序、H5、APP适用
vue.js·微信小程序·小程序·uni-app·uniapp
qq229511650214 小时前
微信小程序的汽车维修预约管理系统
微信小程序·小程序·汽车
陈思杰系统思考Jason17 小时前
系统思考—深层结构
百度·微信·微信公众平台·新浪微博·微信开放平台
小飞哥liac1 天前
微信小程序的组件
微信小程序
stormjun1 天前
Java基于微信小程序的私家车位共享系统(附源码,文档)
java·微信小程序·共享停车位·私家车共享停车位小程序·停车位共享
Bessie2341 天前
微信小程序eval无法使用的替代方案
微信小程序·小程序·uni-app
shenweihong1 天前
javascript实现md5算法(支持微信小程序),可分多次计算
javascript·算法·微信小程序
1 天前
微信小程序运营日记(第四天)
微信小程序·小程序