Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信小程序之生成自定义参数小程序二维码

微信小程序之生成自定义参数小程序二维码

作者头像
一斤代码
发布于 2018-08-21 02:21:27
发布于 2018-08-21 02:21:27
4.9K00
代码可运行
举报
文章被收录于专栏:大前端开发大前端开发
运行总次数:0
代码可运行

扫码已经成为一种常见又方便的进入移动应用的途径,可以把线上线下的用户流量带入你的移动应用中来。微信小程序也提供了扫码进入的功能,可以通过扫描二维码或者微信小程序专有的小程序码,进入到相应的小程序页面。

微信官方提供了3个不同的REST API用于生成带参数的小程序码或者二维码,可在扫码后进入指定的小程序页面,其中接口A和C能生成的图片总数量有限制(10万张),对于那种需要生成大量二维码的使用场景(比如为每个订单生成一个二维码、餐厅的每张餐桌生成一个二维码等)是远远不能满足需求的。而接口B可以解决这个问题,我们这次主要来看一下如何使用这个接口。

总体的思路是:在我们的后端开发一个API,在其中调用微信的二维码接口,调用成功后会得到二维码图片的二进制流,最后将这个二进制流输出到前台。

以下步骤中的后端代码是基于Node.js进行编写,并使用了Koa 2框架。代码仅供参考。

步骤1:获取重要参数access_token

调用获取小程序二维码的REST API需要一个很重要的参数:access_token,这是用于获取微信公众平台API访问权限的重要参数,做过微信公众号HTML5开发的朋友对其肯定非常熟悉。没接触过的话,可以看一下微信公众平台的文档

调用微信公众平台的API,已经有很多成熟的开源SDK可以使用,从Github上可以搜到很多不同语言实现的SDK。由于我用的是Node.js开发,所以使用了co-wechat-api

以下是使用co-wechat-api来获取access_token的基本用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const WechatAPI = require('co-wechat-api')

const wxAppAPI = new WechatAPI('小程序的app id', '小程序的app secret')
const token = await wxAppAPI.ensureAccessToken()

console.log(token.accessToken)
步骤2:拼接url,发送请求获取二维码图片
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fs = require('fs')
const axios = require('axios')

// 拼接url
const url = `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${token.accessToken}`

// 发送POST请求
const response = await axios.post(url, {
  page: '小程序中Page的路径',
  scene: '自定义参数,格式你自己决定'
}, { responseType: 'stream' })

// 将请求结果中的二进制流写入到本地文件qrcode.png
response.data.pipe(fs.createWriteStream('qrcode.png'))

在上面的代码中,我们将access_token作为query string参数拼接到url上,然后向这个url发送POST请求,传递的参数主要是pagescene,其中page参数是扫码后进入的小程序页面路径(比如pages/index/index,并且不能携带参数),而scene则传入的是我们的自定义参数。

其实经过这一步,你就已经可以在你的磁盘上找到这张小程序码的图片了,用微信扫一下这张图片,就能进入你的小程序页面。

步骤3:将二维码图片输出

虽然我们已经获取到了小程序码图片,但是现在它还只是躺在我们的服务器端。而通常实际情况是,我们需要在小程序页面上去显示这张图片,让用户去保存和分享它。因此,我们需要把这张图片通过我们的API进行输出。以下是基于koa 2的示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fs = require('fs')
const Router = require('koa-router')
const router = new Router()

router.get('/wx/common/qrcode', async (ctx) => {
  const stream = fs.createReadStream(‘qrcode.png’)
  ctx.body = stream
})
步骤4:在小程序中显示

在小程序中显示该图片就非常简单了,直接使用<image>组件来进行展示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <image src="https://your-domain.com/wx/common/qrcode" style="width:200px;height:200px"></image>
附录:稍微完备一些的服务端代码

上面4个步骤中给出的示例代码只是为了配合说明各个步骤,代码比较简陋,下面是经过稍微的组织过的代码,供参考:

  • 路由部分的代码:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Router = require('koa-router')
const PassThrough = require('stream').PassThrough;
const wxapi = require('../services/wxapi')
const router = new Router()

router.get('/wx/common/qrcode', async (ctx) => {
  const stream = await wxapi.getWxaCodeUnlimit({
    page: 'pages/profile/profile',
    scene: 'abc123'
  })
  ctx.body = stream.pipe(PassThrough())
})
  • Service部分的代码:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fs = require('fs')
const path = require('path')
const crypto = require('crypto')
const bluebird = require('bluebird')
const axios = require('axios')
const WechatAPI = require('co-wechat-api')

const wxAppAPI = new WechatAPI('小程序的app id', '小程序的app secret')

function sha1(message) {
  return crypto.createHash('sha1').update(message, 'utf8').digest('hex')
}

module.exports = {

  async getWxaCodeUnlimit({ page, scene }) {
    // 图片文件名使用page和scene等数据生成Hash
    // 以避免重复生成内容相同的小程序码
    const fileName = sha1(page + scene)
    const filePath = path.join(__dirname, `../../qrcode/${fileName}.png`)

    let readable

    try {
      // 检测该名字的小程序码图片文件是否已存在
      await bluebird.promisify(fs.access)(filePath, fs.constants.R_OK);
      readable = fs.createReadStream(filePath)
    } catch (e) {
      // 小程序码不存在,则创建一张新的
      const token = await wxAppAPI.ensureAccessToken()
      const response = await axios({
        method: 'post',
        url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit',
        responseType: 'stream',
        params: { access_token: token.accessToken },
        data: { page, scene }
      })
      readable = response.data
      readable.pipe(fs.createWriteStream(filePath))
    }

    // 返回该小程序码图片的文件流
    return readable
  }

}

祝大家开发出更好的小程序!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.11.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 生成微信小程序二维码(可以指定小程序页面 与 动态参数)
打开微信公众平台接口调试工具,在参数列表中输入小程序的appid和secret,点击检查问题,如果appid和secret正确,则可以返回正确的access_token结果(图中下方的红框)
用户1518699
2020/11/24
7.7K0
Java 生成微信小程序二维码(可以指定小程序页面 与 动态参数)
.NET生成微信小程序推广二维码
对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了。今天接到一个需求就是生成小程序码,并且与运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种二维码就可以进入小程序。为了节省服务器内存资源,我想的就是成功调用通微信生成小程序码的接口后直接把微信返回过来的图片二进制内容(返回的图片 Buffer)转化为二进制byte[]文件流,然后再转成Image这样就不需要在保存到本地直接读取本地的背景图片通过GDI+(Graphics)绘制图片。
追逐时光者
2023/11/29
4000
.NET生成小程序码,并合自定义背景图生成推广小程序二维码
  对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了。今天接到一个需求就是生成小程序码,并且于运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种二维码就可以进入小程序。为了节省服务器内存资源,我想的就是成功调用通微信生成小程序码的接口后直接把微信返回过来的图片二进制内容(返回的图片 Buffer)转化为二进制byte[]文件流,然后再转成Image这样就不需要在保存到本地直接读取本地的背景图片通过GDI+(Graphics)绘制图片。废话不多说直接上码,各位同学假如有什么小程序的开发问题都欢迎评论区,或者qq私聊我有时间都可以一起学习探索。
追逐时光者
2021/05/13
1.5K0
.NET生成小程序码,并合自定义背景图生成推广小程序二维码
微信小程序----获取二维码
3. 返回的结果二维码(扫码即可进入Rattenking 的博客测试商店)
Rattenking
2021/02/01
3K0
微信小程序----获取二维码
小程序二维码和小程序带参数二维码生成
本文主要讲解小程序二维码的基本概念,帮助开发和运营人员更好的掌握小程序参数二维码,同时也包含小程序二维码官方文档解读,更好的掌握小程序参数二维码在业务中的使用 一,小程序二维码小白介绍 二,小程序二维
编程软文
2018/06/20
7.3K0
koa框架生成微信公众号二维码
demo的github地址:https://github.com/xuedingmiaojun/koa-demo.git
薛定喵君
2020/07/30
7120
php生成传参小程序二维码
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html
许坏
2019/07/08
1.2K0
微信小程序之生成指定页面的太阳码
最近的项目中也是需要生成小程序的邀请太阳码.一开始生成的是个二维码.但是小程序的客户扫了之后总不能让人家跳到H5页面.所以也是研究了一下.一路上也是坎坎坷坷.这里总结下.顺当分享下自己写的代码.哪里写的不好.多多指教下.
桑先生
2019/12/18
8.9K0
微信小程序实现扫码登录网站
最近使用腾讯云时,用的都是微信扫码登入,发现会跳转到腾讯云助手小程序进行确认登入。感觉挺好用的,就想做一个扫码登入。
王秀龙
2021/09/09
7.5K3
C#动态生成带参数的小程序二维码
在微信小程序管理后台,我们可以生成下载标准的小程序二维码,提供主程序入口功能。在实际应用开发中,小程序二维码是可以携带参数的,可以动态进行生成,如如下场景:
初九之潜龙勿用
2024/06/20
3040
C#动态生成带参数的小程序二维码
小程序开发知识点总结
我承认,最近比较懒了,博客也很久没更新了,太对不住自己了,做了一段时间小程序开发,总结了一些知识点,直接上菜。
用户1141560
2018/08/20
1.3K0
小程序开发知识点总结
微信扫描小程序码登录 PC 网站 Demo
本文主要介绍如何基于小程序页面授权,使用微信扫描PC端小程序码实现获取用户信息进行系统登录。
薛定喵君
2021/01/27
3.5K0
PHP 生成微信小程序码,并存储图片
泥豆芽儿 MT
2023/10/22
6160
PHP 生成微信小程序码,并存储图片
Java生成微信小程序二维码,5种实现方式,一个比一个简单
先介绍一下项目场景,主要是通过微信小程序二维码裂变分享,每个账号有专属邀请二维码,分享出去,有新人扫码入驻,就可以得到现金奖励或红包奖励。当然,产品设计会更丰富,不止有裂变模式,还有渠道推广模式,还有各种奖励规则,但核心实现都是生成二维码。对于如何生成微信小程序二维码,本文一共列举了5种实现方式,其中第1、2种是网上常见的方式,第3、4、5种封装的更为优雅,文末可打包下载开箱即用的全套源码,我更期待老铁的文末 投票 :哪种方式你更喜欢?
天罡gg
2023/03/01
2.6K0
Java生成微信小程序二维码,5种实现方式,一个比一个简单
巧用腾讯云云函数快速生成小程序码
之前写过一篇小程序云函数生成小程序码的文章,里面介绍了通过云调用wxacode.get 来生成小程序码的方法,因为采用的是小程序云开发,云调用是免服务端鉴权的,在云函数中使用云调用调用服务端接口无需换取 access_token,只要是在从小程序端触发的云函数中发起的云调用都经过微信自动鉴权,可以在登记权限后直接调用如发送模板消息等开放接口,所以比较方便,但是如果使用腾讯云云开发的话情况就变成了服务端调用了,需要自己在服务端进行小程序全局 access_token 获取,上一篇文章我们介绍了腾讯云云函数实现小程序全局 access_token 刷新 ,这就意味着我们拿到了接口调用凭证,接下来的操作就方便了。
薛定喵君
2021/01/29
1.2K0
巧用腾讯云云函数快速生成小程序码
获取小程序码并接受buffer流保存为图片的方法
getwxacodeunlimit 这个 API 可以通过【云调用】和通过 【HTTPS 调用】获得小程序码我们对返回的buffer数据进行处理,保存为图片
用户7592570
2020/07/24
3.7K0
PHP实现微信小程序生成海报
由于之前处理这块业务基本都是前端处理的,所以后端还真没写过小程序生成海报,但经过谷歌和百度搜索之后发现,微信小程序生成海报的代码真的很少,可以说基本没有,那我这里就把我用了2小时时间写的PHP合并微信小程序海报的代码分享出来给大家
程序猿的栖息地
2022/04/29
1.8K0
PHP实现微信小程序生成海报
开发 | 小程序如何生成带参数二维码?
许多小程序开发者,都需要获取进入小程序不同页面的二维码:包括常见的四方形「QR 码」和新推出的「小程序码」。
知晓君
2018/08/01
5.7K0
开发 | 小程序如何生成带参数二维码?
PHP实现生成二维码代码展示
为了满足用户渠道推广分析和用户账号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。
很酷的站长
2022/11/30
8800
PHP实现生成二维码代码展示
【黄啊码】PHP配合微信公众号生成推广二维码
为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。
黄啊码
2022/05/30
6040
相关推荐
Java 生成微信小程序二维码(可以指定小程序页面 与 动态参数)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档