微信+企微+微信小程序 开发过程中的疑难杂症汇总
33. 更换了给第三方应用授权的服务号,unionId是否会改变?
unionId是微信开放平台生成的,第三方应用从授权服务号获取的客户unionId会不会变,取决于变更之后的服务号和原来的服务号,是不是在同一个开放平台账号下。登录该微信公众号(认证之后的公众号就是服务号)的管理后台,在‘开发——基本设置‘ 里可以查看该微信公众号所绑定的微信开放平台帐号。
32. 微信扫码添加好友,提示 无法找到该用户,请检查你填写的账号是否正确,如何解决?
- 开启了外部联系人能添加权限没有
- 对方账号是否被限制
- 对方的二维码是不是过期,或者更换过,使用的平台更新不及时
31. 此公众号并没有这些scope的权限错误码:10005, 如何解决?
可能的原因是:
- 使用的是订阅号,订阅号没有权限使用网页授权 这是订阅号
这是服务号
- 使用的是未认证的服务号 ,也可能是服务号认证过期
- 网页授权回调域名填写错误 。要先查看域名配置是否正确,域名中不能带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
- scope参数顺序不对
当scope为 snsapi_base的时候没有影响。但是scope为snsapi_userinfo,scope参数位置放置不正确, 就会提示scope参数错误或没有scope权限
- 如果是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);
};