评论

如何调试企业微信工具栏打开小程序获取外部表联系人userId

介绍了如何真机调试企业微信工具栏启动微信小程序,并且调试wx.qy.getCurExternalContact获取外部联系人userId

由于《企业微信开发者文档》和《微信开发者文档》都没有详细告诉我们,如何在“企业微信工具栏” 点击后调起的微信小程序后调试wx.qy.getCurExternalContact 等这些 需要从特定入口进入页面才可调用在企业微信中调用此接口时,会额外返回一个 environment 字段(微信中不返回) 的api,而且这个企业微信的单聊工具栏,需要配置关联小程序啊、授权啊等等流程,然后又没能设置这个工具栏连接打开的小程序是什么版本,比如我想测试,我就先设置成开发版后体验版,等测试完上线发布小程序,我就改回来设置成发行版,即使官方这么设计其实有理有据且我本人也理解这么做。

不过还是希望官方能在文档里至少标注一下如果我要调试wx.qy.getCurExternalContact这种api,我应该怎么做。关键是百度、社区、csdn找了几天相关的文章和问答解决不了这个问题,最后和后端同事一起花了大半天摸出来了调试的办法,毕竟开发调试总不能每次修改代码都要发布一个正式版,然后从工具栏里点进去测试吧,有点反人类,万一代码没写好导致小程序用不了,得造成多大损失?然后老板过来算账,说什么怎么可能是人家微信的问题明明是你能力问题给我炒了,那我不冤死?

顺带一提,工具栏和服务商的配置是我后端同事配置的,具体这些配置啊、设置权限啊、申请服务商啊这些我不知道怎么搞我这里会跳过这些步骤。

废话不多说,先简述一下我的调试环境和最终的需求:

需求:

  • 客户(微信)主动加 企业员工(企微)
  • 企业员工 在手机企业微信上能看到工具栏,并点击下方工具栏链接
  • 链接打开的是微信小程序(我采用的是服务商的形式进行开发,你需要根据你的需求能是内部开发、也可能是第三方应用开发,貌似是不同的)
  • 小程序调用 wx.qy.login wx.qy.getCurExternalContact 获取外部联系人(既客户)的userId
  • 提交get后端接口获取客户信息

调试环境:

  • 手机企业微信 打开 微信小程序 (H5和移动端的可以不用看了,我这种方式不适用,那些要使用SDK有点复杂)


开始调试:

首先需要在 “微信开发者工具” 安装插件,目的是更新企业微信打开的 开发版小程序 的代码。

在 微信开发者工具 上方的 “小程序模式” 下选择 “企业微信小程序模式”,然后配置 “编译模式”,进入场景要选1121这个。

点击确定稍等一会,就能在 微信开发者工具 左边的预览视图选择你授权的企业,这里企业的列表是要在 企业微信的什么后台那里配置授权的,我不知道怎么搞,所以配置过程我这里跳过。

然后就是生成预览二维码,这里的预览二维码扫出来的小程序就是模拟 企业微信环境 打开的 微信小程序 开发版了,并且我们在 “编译模式” 配置的启动参数也是生效的。

但是还没结束,因为我们最终调试的是,获取这个客户的userId,那么就一定要在 企业员工 与 客户 的会话聊天中点击下方 工具栏 跳转到小程序 , 具体操作如下。

最后,企业员工 在客户的会话下方 点击工具栏,就能在 开发版小程序中,获取外部联系人(客户)的userId了,获取id的代码参考https://developer.work.weixin.qq.com/document/path/93568

总结:微信开发者工具 不支持真机调试,并且预览也不能代替真机调试,要想真机调试 wx.qy.getCurExternalContact 必须满足两个条件

  1. 必须在 企业微信环境 下启动小程序
  2. 必须在 真实的客户会话聊天 里面启动小程序

由于从工具栏启动的小程序必定是正式版,所以大多数人到这一步直接就放弃了,认为必须上传正式版才能真机调试(一开始我也是死了心的认为只能如此),后来我发现一个现象,我从工具栏打开小程序,有的时候是开发版有的时候是正式版,没搞懂是怎么回事,经过一顿瞎搞发现,如果我先扫预览打开开发版的调试模式,能看到右下角的vConsole,再去点击工具栏,启动的小程序也能看到vConsole说明就是开发版,于是乎莫名其妙达成两个必要条件。至此,真机调试环境达成,vConsole还能打印测试后的数据或结果,并且如果你修改保存代码,只需要在 微信开发者工具 编译一次,然后再通过 预览 更新开发版代码,你直接从企业微信工具栏启动小程序就是最新代码了,不需要扫预览二维码,可以理解为点预览是为了把新代码上传给微信,微信把开发版的代码更新一下。当然,缺点就是vConsole没办法像开发者工具一样能看到网络的情况,不能看到网络请求,有时需要排除一下后端接口异常或者报错不能很直观的在控制台看到,需要全程通过log答应出来结果,和提交的参数检查参数有没有为空或者字段写错了等情况。

总之希望这篇文章能帮助到各位开发者们,给大家提供参考,毕竟网上能搜到的真机调试手段并不能解决问题。

最后一次编辑于  2024-12-20  
点赞 0
收藏
评论
登录 后发表内容