记录一下uni-app开发微信公众号遇到的问题。
之前用 uni-app 开发App,小程序,这次用来开发微信公众号,防止客户后期 ”变卦“,要做app或者小程序。当然也遇到一些问题;
问题1 如何调起微信支付
- 判断window原型链是否有 ” WeixinJSBridge “
1 | if (window.hasOwnProperty('WeixinJSBridge')) { |
问题2 海报下载
尝试拼canvas后,转为base64下载,但是不成功,微信公众号不允许此行为;
微信公众号虽然不支持下载,但是可以长按图片图片保存
- canvas容器
1
2<canvas canvas-id="myCanvas" id="myCanvas" ref="myCanvas" style=" position:fixed; top:0;left:10000px; width: 985px; height: 1585px"></canvas>
- Canvas 海报生成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38// 绘制canvas图片
var bgPath = '/static/images/bg_invite.jpg' // 本地静态资源图片
var name = this.details.name;
var img_base64 = this.details.img_base64; // 远程拿下来的二维码base64
const ctx = uni.createCanvasContext('myCanvas')
ctx.setFillStyle('#ffffff');
ctx.fillRect(0,0,985,1585);
uni.downloadFile({
url: bgPath, //仅为示例,并非真实的资源
success: (res) => {
console.log('bgPath_res:', res)
ctx.drawImage(res.tempFilePath, 0, 0, 985, 1280)
uni.downloadFile({
url: img_base64, //仅为示例,并非真实的资源
success: (res) => {
console.log('img_base64_res:', res)
ctx.drawImage(res.tempFilePath, 40, 1330, 200, 200)
ctx.setFillStyle('#fff');
ctx.setFontSize(46)
ctx.fillText('邀请得奖励了!', 360, 1100)
ctx.setFillStyle('#3C3C3C');
ctx.setFontSize(46)
ctx.fillText(name, 280, 1390)
ctx.setFillStyle('#3C3C3C');
ctx.setFontSize(36)
ctx.fillText('关注车汇管,让养车轻松起来!', 280, 1490)
ctx.draw()
}
});
}
})- 从 生成的海报canvas,获取base64,放进img 标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36<view class="wrapper-poster" v-if="is_show_poster">
<view class="wrapper-poster-inner">
<image
class="img-poster"
:src="poster_base64"
mode=""
></image>
</view>
<text class="txt-tip">长按图片保存</text>
<button class="btn-close"
@click="is_show_poster = false"
><text class="iconfont icondelete2"></text></button>
</view>
<script>
downloadQr() {
console.log('----');
let canvas = document.getElementById('myCanvas').getElementsByTagName('canvas')[0];
let href = canvas.toDataURL() // 获取canvas对应的base64编码
uni.showLoading({
title: '正在保存...'
});
setTimeout(() => {
this.poster_base64 = href;
// let a = document.createElement('a') // 创建a标签
// a.download = this.details.name+'的邀请海报.png' // 设置图片名字
// a.href = href
// a.dispatchEvent(new MouseEvent('click'))
uni.hideLoading();
this.is_show_poster = true;
}, 1000);
return;
}
</script>
问题3 调用微信公众号的导航
- 引入 jssdk
1 | <script src="//res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> |
- 微信公众号官方是这么用
1 | wx.getLocation({// |
然而当放进uni-app后会报错
后来查阅得知 uni-app 内 ’wx‘ 关键字被重写,所以需要另辟蹊径,使用关键字 ‘ jWeixin ’,如下:
1 | let config = { |