我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何利用unicloud生成微信小程序分享码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何利用unicloud生成微信小程序分享码

一,方案

看了官方的文档,获取小程序码有三种,我采用的是第二种:生成数量不受限制的分享码。

对应的官方文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.html

其中又分为https调用和云开发调用。

因为我用的是unicloud云开发,如果采用微信的云开发,还需要引入wx-server-sdk,然后要配置一堆东西,文档又不全,尝试了两次未果,就放弃了这种方案。
最后是采用的https调用的方式。

二,实现思路

【第一步】需要获取ACCESS_TOKEN值。

这种微信的接口,必须服务端调用,不能前端直接https进行调用。虽然在开发阶段能够调用成功,那是因为微信开发者工具-项目信息-本地设置中勾选了不校验合法域名导致的成功。当你发布体验版和正式版时是调用不通的。

所以,获取ACCESS_TOKEN必须在服务端直接调用微信接口获取。

官方文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html

实现的云对象代码:

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
module.exports = {
	_before: function () { // 通用预处理器

	},
	
	async addCodeInfo(infoObj){
		//获取access_token
		const APPID='xxx'
		const APPSECRET='xxx'
		const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`
		const requestOptions = {
			method: 'GET',
			dataType: 'json'
		}
		const res1 = await uniCloud.httpclient.request(URL,requestOptions)
		const access_token=res1.data.access_token
		return access_token
	}
}

【第二步】需要利用ACCESS_TOKEN再调用微信的生成分享码的接口

这个接口依旧是微信的接口,所以依旧是需要在服务端发起。

于是,在上一步获取到access_token的基础上,继续调用获取分享码的接口:

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
module.exports = {
	_before: function () { // 通用预处理器

	},
	//数据库中增加wifi信息,增加完毕后返回分享二维码
	async addCodeInfo(infoObj){
		//获取access_token
		const APPID='wxe0bc57edf31dad80'
		const APPSECRET='7e5f676a5fad20d044434792360c28d4'
		const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`
		const requestOptions = {
			method: 'GET',
			dataType: 'json'
		}
		const res1 = await uniCloud.httpclient.request(URL,requestOptions)
		const access_token=res1.data.access_token

		//由此id生成分享码
		const codeUrl=`https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${access_token}`
		const codeOptions={
			method:'POST',
			data: JSON.stringify({
				"scene":'id',
				"page":'pages/index/index',
				"check_path":false,
				"width":500,
				"env_version":'trial'//trial:体验版
			}),
		}
		const res3 = await uniCloud.httpclient.request(codeUrl,codeOptions)
		return res3
	}
}

【第三步】获取到的分享码结果类型是buffer的二进制格式,需要转图片

如下图:

也就是,res.data是个buffer类型的数据,它有两个字段:data字段存储内容,type字段显示类型。

于是需要在服务端转成base64后再传给前端:

const buffer=res3.data
const result=buffer.toString('base64')

三,完整的代码实现

前端

<img :class="lazy" data-src="shareCode" alt="" >

<script>
	export default {
		data() {
			return {
				shareCode:'',
			}
		},
		onLoad(options) {
			this.getWeixinCode()
		},
		methods: {
			//调用后端接口,生成小程序分享码
			async getWeixinCode() { // 注意异步
				const _this=this
				const wifiCode = uniCloud.importObject('wifiCode') // 导入云对象
				try {
					const params={}
					const res=await wifiCode.addCodeInfo(params)
					console.log("++++",res)
					this.shareCode="data:image/png;base64," + res
				} catch (e) {
					console.log(e)
				}
			}
		}
	}
</script>

后端:

主要就是wifiCode这个云对象:

// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程:https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
module.exports = {
	_before: function () { // 通用预处理器

	},
	//数据库中增加wifi信息,增加完毕后返回分享二维码
	async addCodeInfo(infoObj){
		//获取access_token
		const APPID='xxx'
		const APPSECRET='xxx'
		const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`
		const requestOptions = {
			method: 'GET',
			dataType: 'json'
		}
		const res1 = await uniCloud.httpclient.request(URL,requestOptions)
		const access_token=res1.data.access_token
		
		//由此id生成分享码
		const codeUrl=`https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${access_token}`
		const codeOptions={
			method:'POST',
			data: JSON.stringify({
				"scene":"23",
				"page":'pages/index/index',
				"check_path":false,
				"width":500,
				"env_version":'trial'//trial:体验版
			}),
		}
		const res3 = await uniCloud.httpclient.request(codeUrl,codeOptions)
		const buffer=res3.data
		console.log("---响应--",buffer)
		// const buf = new Buffer (buffer)
		console.log("buffer转化",buffer.toString('base64'))
		const result=buffer.toString('base64')
		return result
	}
}

四,坑点

1,微信的接口需要服务端调用

2,获取分享码的接口的post接口参数需要JSON.stringify处理一次

3,scenez只支持32位,一些特殊字符还不支持。

4,获取分享码的接口的access_token参数,必须放在url上,也就是和我代码中一样的写法。

5,本地开发完成后,云对象啥的需要上传部署后,体验版和真机调试才能用。并且,需要配置小程序的接口白名单。https://tcb-api.tencentcloudapi.com和
https://tcb-wbk382fznzzwna3-8chuc14d8e99.service.tcloudbase.com

6,获取分享码的接口,返回的是buffer二进制流,所以获取二维码的接口,我没有配置datatype这个参数,而是让它采用默认的值。获取到结果后还需要转化成base64才可以渲染在页面上。

总而言之,比较坑,但是我没哭。

呐,就这样吧~

总结

到此这篇关于如何利用unicloud生成微信小程序分享码的文章就介绍到这了,更多相关unicloud生成微信小程序分享码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何利用unicloud生成微信小程序分享码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何利用unicloud生成微信小程序分享码

这篇文章主要给大家介绍了关于如何利用unicloud生成微信小程序分享码的相关资料,这是最近工作中遇到的一个需求,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考下
2022-12-19

微信小程序码如何生成

这篇文章主要介绍了微信小程序码如何生成的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序码如何生成文章都会有所收获,下面我们一起来看看吧。  小程序码是什么?小程序码跟二维码长的不一样,你可以理解成这是另
2023-06-26

微信小程序分享朋友圈图片如何生成

本文小编为大家详细介绍“微信小程序分享朋友圈图片如何生成”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序分享朋友圈图片如何生成”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。特性简单易用 —&
2023-06-26

Java中如何生成微信小程序太阳码

这篇文章主要介绍“Java中如何生成微信小程序太阳码”,在日常操作中,相信很多人在Java中如何生成微信小程序太阳码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中如何生成微信小程序太阳码”的疑惑有所
2023-06-30

微信小程序如何获取分享链接

小编给大家分享一下微信小程序如何获取分享链接,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!API层面onShareAppMessage小程序如果想对外分享,必须在 page 里面定义 onShareAppMessage 函
2023-06-26

使用微信小程序实现二维码生成功能

使用微信小程序实现二维码生成功能小程序的盛行使得开发者可以轻松地实现各种功能,而二维码生成功能正是其中之一。二维码作为快速传递信息的一种方式,被广泛应用于各种场景,如支付、活动推广等。在本篇文章中,我们将学习如何使用微信小程序实现二维码生成
使用微信小程序实现二维码生成功能
2023-11-21

微信小程序中如何实现二维码分享和扫码功能

在微信小程序中实现二维码分享和扫码功能,可以通过以下步骤来实现:生成二维码分享:可以使用第三方的二维码生成库来生成二维码图片,然后将生成的图片展示在小程序页面中供用户分享。例如,可以使用jsqrcode库来生成二维码图片。扫描二维码功能:可
微信小程序中如何实现二维码分享和扫码功能
2024-04-03

怎么使用微信小程序canvas2d生成图形验证码

本篇内容主要讲解“怎么使用微信小程序canvas2d生成图形验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用微信小程序canvas2d生成图形验证码”吧!成品展示:背景:大致看了一下
2023-06-30

微信小程序中如何使用store数据共享

全局数据共享 全局数据共享(状态管理)是为了解决组件之间数据共享的问题,开发中常用的全局数据共享方案有:Vuex、Redux、MobX等,这篇文章主要介绍了微信小程序中如何使用store数据共享,需要的朋友可以参考下
2023-05-15

如何使用PHP开发微信小程序的任务分享功能?

如何使用PHP开发微信小程序的任务分享功能?随着微信小程序的流行,开发者们对于小程序的功能需求也越来越多样化。其中,任务分享功能是很多小程序中常见的一项功能需求。通过任务分享功能,用户可以将任务或活动分享给好友或群聊,从而增加用户的活跃度和
2023-10-26

如何使用PHP实现微信小程序的文件分享功能?

如何使用PHP实现微信小程序的文件分享功能?随着微信小程序的普及,文件分享功能成为了很多小程序开发者的需求之一。本文将介绍如何使用PHP实现微信小程序的文件分享功能,并提供具体的代码示例。一、准备工作在实现文件分享功能之前,我们需要完成以下
2023-10-27

微信小程序直播如何获取分享卡片链接参数

这篇文章主要介绍“微信小程序直播如何获取分享卡片链接参数”,在日常操作中,相信很多人在微信小程序直播如何获取分享卡片链接参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序直播如何获取分享卡片链接参数
2023-06-26

微信小程序中的用户数据如何分析

今天小编给大家分享一下微信小程序中的用户数据如何分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。访问数据用户访问数据:通过
2023-06-27

如何用PHP实现微信小程序的积分系统?

如何用PHP实现微信小程序的积分系统?随着微信小程序的快速发展,越来越多的企业和个人开始在微信小程序上开展业务。其中一个常见的需求是实现积分系统,用于奖励用户积分和进行积分兑换。本文将介绍如何用PHP实现微信小程序的积分系统,并提供具体的代
2023-10-26

编程热搜

目录