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);
};