golang-vue实现微信小程序分享到朋友圈
最近涉及到微信小程序分享到朋友圈,不知道微信为什么不直接接口分享,咱也不敢佛,咱也不敢问,只能百度问度娘,看官方文档,网上的一些分享五花八门,每一个重点的,所以整理了一下到底怎样生成二维码分享图片才是正确的,做了如下总结
说实话踩了很多坑,最大的坑就是把获取微信小程序二维码的事情在前端做了,人家明确说了不要在前端做,可是没好好看官方文档。
1,获取带参数二维码
2.将二维码传到前端
3 将二维码及其他信息画到canvas上
4 保存到相册
5 开开心心分享朋友圈
一步一步来
1,获取带参二维码
微信提供了三个接口
链接如下:
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html
一定要好好看文档,这个接口是后台调用的,后台,后台,后台,重要的事情说三遍
上服务器代码(注意:access_token是有过期时间的。获取时要注意哦)
func getWXcode(id int64, accessToken string) []byte {
path := "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken
client := &http.Client{}
params := `{"scene":"calendarId=` + strconv.FormatInt(id, 10) + `", "page": "pages/ClassSchedule"}`
reqBody := bytes.NewBuffer([]byte(params))
request, _ := http.NewRequest("POST", path, reqBody)
request.Header.Set("Content-type", "application/json")
response, _ := client.Do(request)
if response.StatusCode == {
body, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Logger.Debug("fail to get QRCode", zap.Error(err))
}
return body
}
return nil
}
注意返回的是图片的字节,利用gin框架返回图片
2.将二维码传到前端
func (api *ScheduleAPI) WxCode(c *gin.Context) {
id, err := api.ValidateInt64Id(c)
if err != nil {
api.BadRequest(c)
}
accessToken, err := RequestToken(AppId, AppSecret)
if err != nil {
api.BadRequest(c)
return
}
c.Writer.Header().Set("Content-Type", "image/png")
_, err = c.Writer.Write(getWXcode(id, accessToken))
if err != nil {
log.Logger.Debug("fail to write QRCode", zap.Error(err))
}
}
后台基本就是这个样子的了,接下来就是前端如何处理,前端获取图片后会保存到临时目录,这个看文档应该就清楚了
3 将二维码及其他信息画到canvas上
shareImage () {
console.log('that.access_token', this.access_token)
this.sharePop = false
var that = this
wx.showLoading({
title: '图片生成中...'
})
wx.downloadFile({
url:
'https://后台获取图片你地址/' + this.calendarId + '/code',
success: function (res) {
wx.downloadFile({
url: that.user.avatarId,
success: function (res3) {
const ctx = wx.createCanvasContext('shareCanvas')
ctx.setFontSize(50)
ctx.drawImage(res3.tempFilePath, 250, 20, 200, 200)
ctx.fillText(that.user.nickname, 250, 300, 100)
ctx.fillText('分享', 400, 300, 100)
ctx.fillText(that.calendar.name, 250, 400, 500)
ctx.drawImage(res.tempFilePath, 150, 450, 500, 600)
ctx.fillText('长按识别小程序,查看课程详细', 150, 1150, 500)
ctx.stroke()
ctx.draw()
// loading
setTimeout(function () {
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: 800,
height: 1200,
destWidth: 480,
destHeight: 550,
canvasId: 'shareCanvas',
fileType: 'jpg',
success: function (res2) {
that.imageurl = res2.tempFilePath
wx.hideLoading()
that.canvasDialog = true
},
fail: function (err) {
console.log('errr111', err)
console.log('生成失败......')
wx.hideLoading()
}
})
}, 2000)
},
fail: function (err) {
console.log('1111', err)
}
})
},
fail: function (err) {
console.log(err)
}
})
},
仔细瞧你会发现有两个wx.downloadFile解释一下,一个是我们生成的二维码,一个是用户信息的头像,这个canvas 画完之后就是要显示一下了,就是个图片显示一下好了
4 保存到相册
div.shareimage
canvas(canvas-id="shareCanvas",style="width:800px;height:1200px;")
van-dialog.dialogPop(use-slot='', :show='canvasDialog', show-cancel-button='', @cancel='onClose("canvasDialog")' @confirm='saveImage' cancel-button-text="取消" confirm-button-text="保存到相册" )
.df-col-ac.py-20p
image(:src="data:imageurl" style="width: 200px; height: 300px")
van-toast#van-toast
本人用的pug格式的html,看不明白的下次讲讲开发效率的问题
保存代码如下:
saveImage () {
// debugger
var that = this
that.canvasDialog = false
wx.saveImageToPhotosAlbum({
filePath: that.imageurl,
success (res) {
wx.showModal({
content: '图片已保存到相册',
showCancel: false,
confirmText: '好的',
success: function (res) {
if (res.confirm) {
console.log('用户确定了')
}
}
})
}
})
},
最后一步就去分享吧
获取sence的传递的值
onLoad (options) {
if (options.scene) {
let scene2 = decodeURIComponent(options.scene)
//按照传递的值进行拆分。例如
var str = scene2.split('=')
shopId = str[1]
}
}
总结:
canvas是真的不好画,调不对格式呀,欢迎讨论,谢谢
转载请表明出处。
golang-vue实现微信小程序分享到朋友圈的更多相关文章
- 微信小程序分享至朋友圈的方法
最近研究怎么实现微信小程序分享至朋友圈,对就是朋友圈. 微信小程序目前没有直接提供方法来将小程序分享至朋友圈,不过可以采用曲线救国的方式来达到目的. 方法分两步: 1.通过浏览器将希望分享的东西风向至 ...
- 微信小程序分享到朋友圈方法与技巧
小程序提供onShareAppMessage 函数,此函数只支持分享给我微信朋友.小程序如何分享到朋友圈呢? 我提供的方法是,使用canvas绘制一张图片,并用wx.previewImage预览图片, ...
- 关于微信小程序分享/转发功能的实现方法
实现微信小程序分享,可以有两个入口: 1. 小程序右上角菜单自带的分享 这个入口是默认关闭的,需要在当前页面中调用showShareMenu方法,开启分享 onLoad: function () { ...
- 使用Vue开发微信小程序:mpvue框架
使用Vue开发微信小程序:mpvue框架:https://www.jianshu.com/p/8f779950bfd9
- 微信小程序分享转发用法大全——自定义分享、全局分享、组合分享
官方提供的自定义分享 使用隐式页面配置函数实现的全局分享-推荐 使用隐式路由实现的全局分享-不推荐,仅供了解隐式路由 前言: 目前微信小程序只开放了页面自定义分享的API,为了能够更灵活的进行分享配置 ...
- 微信小程序--分享功能
微信小程序--分享功能 微信小程序前段时间开放了小程序右上角的分享功能, 可以分享任意一个页面到好友或者群聊, 但是不能分享到朋友圈 这里有微信开发文档链接:点击跳转到微信分享功能API 入口方法: ...
- 只会Vue怎么开发小程序?vue和微信小程序的到底有哪些区别?
写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别. 一.生命周期 先贴两张生命周期图对比下: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. v ...
- Spring Boot后端+Vue前端+微信小程序,完整的开源解决方案!
项目简介 一个小商场系统,包括: 后端:Spring Boot 管理员前端:Vue 用户前端:微信小程序 功能介绍 1.小商城 首页 专题列表.专题详情 分类列表.分类详情 品牌列表.品牌详情 新品首 ...
- 学了这么久,vue和微信小程序到底有什么样的区别?
前言 写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别.相比之下,小程序的钩子函数要简单得多. 一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下 ...
随机推荐
- 深入理解C语言-深入理解void
void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据 void含义 void几乎只有注释和限制程序的作用,定义一个 ...
- 多线程基础知识---sleep和wait区别
1.sleep()是Thread类的静态方法:wait()是Object的成员方法 2.sleep()可以在任何地方使用;wait()只能在同步方法或代码块中使用
- 2019JAVA课程总结
课程总结 1.子类不能直接访问父类的私有属性,可通过get(),set()来间接访问. 2.super(),this()不可同时使用,因为其都必须放在首行,所以不可同时使用. 3.若删去super() ...
- hdoj2196(树形dp,树的直径)
题目链接:https://vjudge.net/problem/HDU-2196 题意:给出一棵树,求每个结点可以到达的最远距离. 思路: 如果求得是树上最长距离,两次bfs就行.但这里求的是所有点的 ...
- COleVariant功能
COLeVariant是数据库常用到的数据类型.它可以是字符串,整型值,日期等.知道怎样将它转换为CString. COLeVariant类是对VARIANT结构的封装.它的构造函数具有极为强大的功能 ...
- # Clion中编译多个cpp(实现单文件编译)
Clion中编译多个cpp(实现单文件编译) 在不做任何配置情况下,Clion工程下只能有一个main()函数,新建多个cpp会导致报main()函数重复定义的错误,所以默认情况下无法在一个工程下编译 ...
- windows环境下使用C++&Socket实现文件传输
server #include <stdio.h> #include <iostream> #include <cstring> #include <fstr ...
- FFmpeg4.0笔记:封装ffmpeg的解封装功能类CDemux
Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff CDemux.h /*********************** ...
- X-UA-Compatibles
今天在看京东网页代码的时候,发现了X-UA-Compatibles 这个元信息属性,不是很清楚,百度了一下,做下记录 X-UA-Compatible 属性是 IE 浏览器在 IE8 版本开始提供的一个 ...
- 关于HA(2.102 -2.103 服务器排障)
关于处理RHCA故障的报告: ,2.102 和 2.103 两台机器在重启之后拉不起来 原因是这两台服务比较怪 先要启动service rpcbind restart 然后再要起service nfs ...