算是个系列内容吧,最终要实现的是将uniCloud作为后端完成“扫码关注公众号后完成网站登录”
将要涉及的内容可能包括:
0.准备工作:各种配置、基础搭建
1.接受、解析、组装xml消息
2.请求access_token并缓存
3.生成带参数二维码(本节)
4.引入、封装redis缓存方法
5.引入、配置、初始化unipush
6.解析不同情况下用户扫码时推送的事件并完成登录

系列内容全部基于uniCloud+vk-uniCloud(云函数路由)+uni-app
编辑器HbuilderX最新版
云空间为阿里云
公众号为认证服务号

一、编写云函数
这个创建二维码的函数,笔者是直接放在了pub目录下/router/service/client/mp/pub/createQrCode.js,这样不需要鉴权即可直接生成,各位担心被滥用的话,也可以加一些简单的前后端验证,这里不再赘述。

来看一下代码:

'use strict';
module.exports = {/*** 生成二维吗* @url client/mp/pub/createQrCode 前端调用的url参数地址* data 请求参数*/main: async (event) => {let { data = {}, userInfo, util, filterResponse, originalParam } = event;let { customUtil, uniID, config, pubFun, vk, db, _ } = util;let { uid } = data;let res = { code: 0, msg: "" };// 业务逻辑开始-----------------------------------------------------------let clientAppid = data.client_appid; // 客户端平台appidlet pushClientid = data.push_clientid // unipush生成的客户端推送idlet sceneCode = vk.pubfn.random(6); // 随机生成的场景值let currentTime = new Date().getTime(); // 当前时间戳// 判断是否有未过期的二维码(ticket)let oldTicketInfo = await vk.baseDao.findByWhereJson({dbName: "wx-mp-cache",whereJson: _.and([{name: 'qrCodeTicket'},{clientAppid: clientAppid},{pushClientid: pushClientid},{expire_time: _.gt(currentTime)}])});if (vk.pubfn.isNotNull(oldTicketInfo)) {res.msg = 'get old';res.data = oldTicketInfo.ticket;return res;}// 这里引用了第二节里封装的方法let accessTokenInfo = await pubFun.getWxAccessToken();// http请求方式: POST URL:let url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=' + accessTokenInfo.token;let response = await uniCloud.httpProxyForEip.postJson(url, { "expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": { "scene": { "scene_id": sceneCode } } })// 还是记得要parseresponse = JSON.parse(response);// 换取二维码的ticketlet ticket = encodeURIComponent(response.body.ticket); // 上边有请求交互,可能会浪费时间,不能直接用一开始的时间戳入库currentTime = new Date().getTime(); // 当前时间戳// 存入数据库await vk.baseDao.add({dbName: "wx-mp-cache",dataJson: {name: 'qrCodeTicket',ticket: ticket,clientAppid,pushClientid,expire_time: (parseInt(currentTime) + 60000)}});// 缓存到redis// 这里的方法下一节会讲到if (vk.pubfn.isNotNull(ticket)) {let keyName = 'qrscene_' + sceneCode; // redis的keylet redisJson = {sceneCode,clientAppid,pushClientid,expireTime: (parseInt(currentTime) + 60000)}// 这是一个封装好的redis方法await pubFun.setRedisData(keyName, redisJson, 60);}res.msg = 'create success';res.data = ticket; // 把ticket返回给前端// 业务逻辑结束-----------------------------------------------------------return res;}
}

二、前端请求获取ticket
一般是打开登录界面,就发起请求获取tikect,当然也可以是先用手机登录之类的,然后有个切换按钮来发起请求。

// 创建并拉取公众号二维码
vk.callFunction({url: 'client/mp/pub/createQrCode',title: '正在生成二维码', // loading的titledata: {client_appid: uni.getSystemInfoSync().appId, // 原生方法获取发起请求的平台appidpush_clientid: vk.vuex.get('$user.push_clientid') // 这是在app.vue初始化unipush的时候生成并缓存到vuex的}
}).then(res => {// 实际上拿到的是ticket,这里拼一下图片的urlthis.qrCodeSrc = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' + res.data;setTimeout(() => {// 没登录的话60秒后提示过期if (!vk.checkToken()) {vk.toast('二维码已失效,点击重新获取');}}, 60000);
});
<view v-show="loginType == 'weixin'" class="weixin-qrcode" id="pologin"><image class="qrCode" :src="qrCodeSrc" @click="getMpLogin"></image>
</view>

我这里这样弄完,就是从手机登录切换为微信登录时,发起请求拉取二维码;
然后点击二维码时,可以再次拉取(有未过期的ticket时,拉取到的是未过期的ticket)。

uniCloud开发公众号:三、生成带参数二维码相关推荐

  1. JAVA 实现微信公众号的生成带参数二维码和扫码后被动回复消息

    公司新需求实现生成微信公众号带参数二维码和对应扫码后回复相应信息的功能. 1.实现带参数二维码功能 public class QrTest {private static Logger logger ...

  2. 实例:用C#.NET手把手教你做微信公众号开发(11)--生成带参数二维码

    上一篇讲了普通关注的各种情景,接下来准备详细讲解带参数的二维码的应用实例.在下一篇详解之前,这里先介绍一下如何下载二维码.生成二维码表,为后续的应用做好准备. 为了满足用户渠道推广分析和用户帐号绑定等 ...

  3. Java 微信开发(四)生成带参数二维码及分享到朋友圈、好友、QQ

    微信公众号中的微信分享到朋友圈.分享到QQ.分享到好友功能都是可以帮助营销活动支持的,今天就说一下公众号生成带参数的二维码分享到朋友圈功能 根据微信公众号提供的开发者文档我们可以看出提供的有方法,我们 ...

  4. 基于OpenJWeb平台的微信服务号开发培训-生成带参数二维码

    因为OpenJWeb平台已经集成了微信服务号接口,所以在OpenJWeb平台上开发微信服务号会起到事半功倍的作用.本文介绍如何使用微信公众号接口生成带参数二维码功能. 下面是开发及操作过程: (1)首 ...

  5. 微信公众平台开发(83) 生成带参数二维码

    本文介绍在微信公众平台上如何使用高级接口开发生成带参数二维码的功能. 一.场景二维码 为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码, ...

  6. 微信公众号 订阅号 生成带参数二维码

    1.公众号的任意一篇文章页链接 例如: http://mp.weixin.qq.com/s?__biz=MjM5NzAwNzMwMQ==&mid=2655787844&idx=3&am ...

  7. 微信订阅号渠道推广带参数二维码如何生成和统计呢?

    2019独角兽企业重金招聘Python工程师标准>>> 微信公众号订阅号渠道推广带参数二维码,公众号功能接口不支持订阅号生成 带参数二维码,只有服务号才可以,订阅号只能通过服务号转接 ...

  8. 微信公众号开发(十)——扫描带参数二维码事件

    我们通过微信扫码二维码已经是十分频繁的操作了,为了满足用户渠道推广分析和用户帐号绑定等场景的需要,微信公众平台提供了创建带参数二维码的接口,通过产生的ticket,去获取二维码图片.当用户扫描这个二维 ...

  9. 微信生成带参数二维码逻辑,无代码

    目前貌似网页不能直接跳转到公众号了,遇到客户要做地推,要生成带参数的二维码,关注公众号的量,后面做统计.就顺便研究下微信的接口.. 前提: 1.必须是服务号 可以看公众号接口权限,订阅号是未获得 如果 ...

最新文章

  1. 多条SQL语句同时执行方法
  2. 谷歌最新视频抠图术:影子烟雾都能抠,添加水印更顺滑,UP主剪辑利器 | 开源...
  3. 简单快速安装Apache+PHP+MySql服务环境(三)—— 下载安装phpmyadmin
  4. plex linux 数据目录,shareplex日常维护文档
  5. win台式找不到计算机管理,win10系统计算机右键-管理打不开windows找不到文件的解决方法...
  6. php替换指定函数,PHP替换指定字符函数str_replace()的用法
  7. Don't stop pretraining,继续预训练!
  8. 银行突发事件演练方案_【工作动态】准旗联社组织开展优质文明服务应急演练,为优质服务保驾护航!...
  9. 拓端tecdat|R语言结合新冠疫情COVID-19对股票价格预测:ARIMA,KNN和神经网络时间序列分析
  10. 解决idea中http://java.sun.com/jsp/jstl/core“红色异常
  11. 服务器中tomcat内存溢出配置文件修改
  12. 基本知识 100040
  13. 股票成交量和价格关系
  14. 【Unity3D】个人开发台球小游戏
  15. 如何参与linux内核开发
  16. clickhouse 副本引擎
  17. C# Remoting的基础介绍
  18. 厦门宝讯网捷:拼多多一件代发怎么做?
  19. Python异常处理+追溯
  20. 国家开放大学计算机应用论文,计算机应用基础国家开放大学.docx

热门文章

  1. 2022SEO关键发包快速排名系统源码
  2. CPU接触不良故障排除
  3. 人工智能诊断皮肤癌准确率达 91%
  4. Visio2021的下载与安装
  5. 163vip邮箱多少钱?怎么注册vip邮箱?
  6. REST风格接口学习
  7. 虚幻4UMG控件实用技巧
  8. 【Linux】Ubuntu 20.04安装教程(图文详解)
  9. 被动和主动网络攻击类型
  10. 论文学习——分段时间序列相似性研究与应用