likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 6

33. 更换了给第三方应用授权的服务号,unionId是否会改变?

unionId是微信开放平台生成的,第三方应用从授权服务号获取的客户unionId会不会变,取决于变更之后的服务号和原来的服务号,是不是在同一个开放平台账号下。登录该微信公众号(认证之后的公众号就是服务号)的管理后台,在‘开发——基本设置‘ 里可以查看该微信公众号所绑定的微信开放平台帐号。

32. 微信扫码添加好友,提示 无法找到该用户,请检查你填写的账号是否正确,如何解决?

  1. 开启了外部联系人能添加权限没有
  2. 对方账号是否被限制
  3. 对方的二维码是不是过期,或者更换过,使用的平台更新不及时

31. 此公众号并没有这些scope的权限错误码:10005, 如何解决?

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

可能的原因是:

  1. 使用的是订阅号,订阅号没有权限使用网页授权 这是订阅号

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

这是服务号

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

  1. 使用的是未认证的服务号 ,也可能是服务号认证过期

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

  1. 网页授权回调域名填写错误 。要先查看域名配置是否正确,域名中不能带http或https

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

在查看授权参数是否正确, 比如说检查appid填写是否正确

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxdbb7f914a3d0a283&redirect_uri=https%3A%2F%2Fsgpay.baidu-mgame.com%2Fpay%2Fjsapi%2Fjsapi.php&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect
  1. scope参数顺序不对

当scope为 snsapi_base的时候没有影响。但是scope为snsapi_userinfo,scope参数位置放置不正确, 就会提示scope参数错误或没有scope权限

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

  1. 如果是APP点击登陆提示的这个(公众号并没有这些scope的权限,错误码:10005)都是因为应用登陆权限被封禁了

30. window和mac操作系统,在浏览器中如何打开个人聊天窗口?

只能在window和mac操作系统的PC端打开,可以通过location.href=wxwork://launch?launch_code=xxx唤醒PC端的企业微信 参见这里

29. 红包链接被封,可以采用动态路径的方式,解除封锁。

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

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

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

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

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,

url = encodeURIComponent(window.location.href);

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

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

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

url = encodeURIComponent(localStorage.getItem(keyDict.entryUrl));

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

// 如果是 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编码

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…

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

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的版本有关

  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属性变化的语法

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

11.getCurExternalContact报错"getCurExternalContact:fail_fail_user not in allow list",如何解决?

企微中单聊窗口,调用getCurExternalContact接口,获取不到用户的userId,

wx.invoke('getCurExternalContact', {}, function(res){
   if(res.err_msg == "getCurExternalContact:ok"){
      userId  = res.userId ; //返回当前外部联系人userId
   }else {
      //错误处理
   }
});

解决方法其实官方文档有说明,参见: 微信+企微+微信小程序 开发过程中的疑难杂症汇总

10. 企微JS-SDK打开单聊窗口时groupName必须设置为空。

    wx?.openEnterpriseChat({
      externalUserIds:'userId',
      groupName: '', // 必填,会话名称。单聊时该参数传入空字符串""即可。
      success: function (res: any) {
        console.log('打开临时会话', res);
      },
      fail: function (res: any) {
        if (res.errMsg.indexOf('function not exist') > -1) {
          Toast.fail('企业微信版本过低请升级');
        }
      },
    });

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

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

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

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

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

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

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页面后,不符合参与抽奖活动的条件,点击了弹出提示中的知道了按钮后,关闭页面。关闭页面就需要调用下面这段代码功能。

 // 微信关闭页面
  const closeWindow = () => {
    setTimeout(function () {
      if (typeof WeixinJSBridge === 'undefined') {
        document.addEventListener(
          'WeixinJSBridgeReady',
          function () {
            WeixinJSBridge.call('closeWindow');
          },
          false
        );
      } else {
        WeixinJSBridge.call('closeWindow');
      }
    }, 0);
  };