当前位置: 首页 > 编程日记 > 正文

微信公众号H5订阅消息开发 uniapp订阅消息

简单说一下流程:

在页面带参数跳转到 https://mp.weixin.qq.com/mp/subscribemsg ,然后用户授权确认或者取消以后,会返回参数里面 redirect_url 的地址,并且带上openid 等相应参数,在前端的页面判断链接里面携带了相关参数后就告诉后端,用户订阅消息的结果,最后由后端触发订阅消息的发送,后端调用 https://api.weixin.qq.com/cgi-bin/message/template/subscribe?access_token=ACCESS_TOKEN 去发送订阅消息。

下面看看代码:

1.让用户授权订阅消息:

let redirect_url = encodeURIComponent(location.href);
let appId = '你的appid'
let scene = '场景值,可以填id或者其它值'
let template_id = '订阅消息的模板id'const href = `https://mp.weixin.qq.com/mp/subscribemsg?action=get_confirm&appid=${appId}&scene=${id}&template_id=${template_id}&redirect_url=${redirect_url}#wechat_redirect`;location.href = href;

2.在页面接收用户授权订阅消息的回调信息

onLoad: function(options) {const { openid, action } = options;if (action == 'confirm') {const { class_id } = JSON.parse(uni.getStorageSync('courseInfo') || '{}');//subscribe() 是封装的接口请求,用户告诉后端授权结果subscribe({ class_id: class_id }).then(res => {if (res.data.code == 0) {uni.navigateTo({url: '/pages/classRoom/courseList/courseList?id=' + class_id});} else {uni.showToast({title: res.data.msg,icon: 'none'});}});}
}

下面看看官方文档的介绍

公众号或网页使用一次性订阅消息流程如下:

第一步:需要用户同意授权,获取一次给用户推送一条订阅模板消息的机会

在确保微信公众帐号拥有订阅消息授权的权限的前提下(已认证的公众号即有权限,可登录公众平台在接口权限列表处查看),引导用户在微信客户端打开如下链接:

https://mp.weixin.qq.com/mp/subscribemsg?action=get_confirm&appid=wxaba38c7f163da69b&scene=1000&template_id=1uDxHNXwYQfBmXOfPJcjAS3FynHArD8aWMEFNRGSbCc&redirect_url=http%3a%2f%2fsupport.qq.com&reserved=test#wechat_redirect

参数说明

参数是否必须说明
action直接填get_confirm即可
appid公众号的唯一标识
scene重定向后会带上scene参数,开发者可以填0-10000的整形值,用来标识订阅场景值
template_id订阅消息模板ID,登录公众平台后台,在接口权限列表处可查看订阅模板ID
redirect_url授权后重定向的回调地址,请使用UrlEncode对链接进行处理。 注:要求redirect_url的域名要跟登记的业务域名一致,且业务域名不能带路径。 业务域名需登录公众号,在设置-公众号设置-功能设置里面对业务域名设置。
reserved用于保持请求和回调的状态,授权请后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验,开发者可以填写a-zA-Z0-9的参数值,最多128字节,要求做urlencode
#wechat_redirect无论直接打开还是做页面302重定向时,必须带此参数

用户同意或取消授权后会返回相关信息

如果用户点击同意或取消授权,页面将跳转至:

redirect_url/?openid=OPENID&template_id=TEMPLATE_ID&action=ACTION&scene=SCENE

参数说明

参数说明
openid用户唯一标识,只在用户确认授权时才会带上
template_id订阅消息模板ID
action用户点击动作,"confirm"代表用户确认授权,"cancel"代表用户取消授权
scene订阅场景值
reserved请求带入原样返回

第二步:通过API推送订阅模板消息给到授权微信用户

接口请求说明

http请求方式: post

https://api.weixin.qq.com/cgi-bin/message/template/subscribe?access_token=ACCESS_TOKEN

post数据示例

{"touser":"OPENID","template_id":"TEMPLATE_ID","url":"URL","miniprogram":{"appid":"xiaochengxuappid12345","pagepath":"index?foo=bar"    
},"scene":"SCENE","title":"TITLE","data":{"content":{"value":"VALUE","color":"COLOR"
}
}
}

参数说明

参数是否必须说明
touser填接收消息的用户openid
template_id订阅消息模板ID
url点击消息跳转的链接,需要有ICP备案
miniprogram跳小程序所需数据,不需跳小程序可不用传该数据
appid所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,并且小程序要求是已发布的)
pagepath所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar)
scene订阅场景值
title消息标题,15字以内
data消息正文,value为消息内容文本(200字以内),没有固定格式,可用\n换行,color为整段消息内容的字体颜色(目前仅支持整段消息为一种颜色)

注:url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。

返回说明

在调用接口后,会返回JSON数据包。正常时的返回JSON数据包示例:

{
"errcode":0,
"errmsg":"ok"
}

相关文章:

GRUB密码设置

通过编辑GRUB启动参数可以轻松的进入单用户模式从而修改root密码,GRUB的密码设置可分为全局密码和菜单密码。 一,全局密码设置 在splashimage这个参数的下一行可以加上password密码,保存后重新启动计算机,再次登录到GRUB菜单页…

国内使用dropbox_通过创建费用管理器来学习使用Dropbox API

国内使用dropboxLearn how to build an expense organizer with the Dropbox API and JavaScript ES6! 了解如何使用Dropbox API和JavaScript ES6构建费用管理器! Dropbox is a content and collaboration platform. Its API allows you to add Dropbox features t…

【洛谷 1345】 奶牛的电信

以前刷试炼场时根本不会的 现在 一眼最小割&#xff01; #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #define MAXN 1000000 #define INF 100000000 using namespace std; int n,m,s,t; int tot2,g[MAXN],num[MAX…

uniapp兼容H5和小程序订阅消息授权开发封装,使用方便

本文使用 uniapp 框架开发&#xff0c;因为H5的订阅消息和小程序的订阅消息的授权流程不一样&#xff0c;但是很多地方需要使用授权&#xff0c;所以我封装了一个兼容H5和小程序订阅消息授权的方法&#xff0c;使用比较方便&#xff0c;希望能够帮助到你&#xff0c;实测可用。…

dma工作时cpu工不工作_CPU如何工作?

dma工作时cpu工不工作CPU, also known as the microprocessor is the heart and/or brain of a computer. Lets Deep dive into the core of the computer to help us write computer programs efficiently.CPU&#xff0c;也称为微处理器&#xff0c;是计算机的心脏和/或大脑。…

pymsql学习笔记

pymsql学习笔记 1. 执行SQL #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql# 创建连接 conn pymysql.connect(host127.0.0.1, port3306, userroot, passwd123, dbt1) # 创建游标 cursor conn.cursor()# 执行update&#xff0c;并返回收影响行数, print(effect…

UITextView高度根据内容变化

1. 添加内容变化的通知响应事件&#xff1a;[[NSNotificationCenter defaultCenter] addObserver:self selector:selector(textChanged:) name: UITextViewTextDidChangeNotification object:nil]; 2 实现方法 - (void)textChanged:(NSNotification *)notification{ …

一:搭建一套免费的serverless网站

因为公司需求&#xff0c;需要快速搭建一个公司内部能够访问的资源查看管理的 PC网站&#xff0c;因为没有服务器&#xff0c;没有后端开发&#xff0c;又要快速上线使用&#xff0c;那么 serverless 就成了我的首选方案&#xff0c;下面从零开始搭建。 步骤一. 准备工作 1. …

monorepo_Monorepo开发的要点

monorepoThe word monorepo is a combination between “mono”, as in the Greek word mnos (in translation, alone) and an abbreviation of the word repository. A simple concept if taken verbatim: one lonely repository. The domain is software engineering so we’…

记一次 HTTP信息头管理器使用 的重要性

今天在测试中遇到了一个问题 使用JMeter时请求相关地址参数及方法都填写正确&#xff0c;但是相应数据返回始终不对&#xff0c;例如 查看取样器结果显示 200 正常&#xff0c;但响应数据不符合正常的结果。 经反复检查发现问题如下&#xff1a; 1&#xff09;没有添加HTTP信息…

手把手,教你怎样用命令行给apk签名

最近因为项目上线&#xff0c;要配合运营的童鞋们上传各渠道apk,其中&#xff0c;搜狗的渠道因为迁移问题&#xff0c;需要给一个他们提供的空的apk签名&#xff0c;然后用公司的签名文件进行签名 没办法&#xff0c;只能手动给apk签名&#xff0c;网上搜索一片均不太完善&…

uniapp富文本复制文字内容

设置样式即可 text,span,p {user-select: text;-webkit-user-select: text;}

创建react应用程序_通过创建食谱应用程序来学习在React中使用API

创建react应用程序Learn how to use external APIs with React and React Router in a full tutorial from Hamza Mirza. This tutorial shows how to create a recipe finder application in React.在Hamza Mirza的完整教程中&#xff0c;了解如何将外部API与React和React Rou…

dogse入门指南

dogse入门指南 Dogse作为游戏服务端引擎&#xff0c;目前只包含游戏服务端的核心部分&#xff0c;但这也是最核心的部分。它全部使用.net c#开发&#xff0c;充分兼顾了程序性能与代码编写的准确性与易用性&#xff0c;再加上以vs作为开发工具&#xff0c;极大的提升代码的编写…

Python maketrans() 方法

描述 Python maketrans() 方法用于给 translate() 方法创建字符映射转换表。 可以只接受一个参数&#xff0c;此时这个参数是个字典类型&#xff08;暂不研究这种情况&#xff09;。 对于接受两个参数的最简单的调用方式&#xff0c;第一个参数是字符串&#xff0c;表示需要转换…

二:serverless网站数据库操作

操作数据库API文档 第一篇&#xff0c;搭建一套免费的serverless网站 一&#xff0c;创建集合&#xff0c;进入控制台 登录腾讯云后台 打开云开发控制台 可以新建集合&#xff0c;新建集合后点击集合名称即可批量导入导出数据库集合的数据&#xff0c;还可以设置数据库访问的…

我希望支持JavaScript GraphQL实现的API

The GraphQL schema language is great! It is certainly the best way to communicate anything about a GraphQL service. No wonder all documentations now use it!GraphQL 模式语言很棒&#xff01; 当然&#xff0c;这是传达与GraphQL服务有关的任何东西的最佳方法。 难怪…

2_Selenium对象识别

1 准备工作 firebug和firepath我们使用xpath进行元素定位&#xff0c;所以需要安装firefox的两个插件&#xff0c;帮助编写xpath html知识在编写xpath的时候&#xff0c;需要查看html代码&#xff0c;所以需要理解html知识&#xff0c;可以到http://www.w3school.com.cn/去自学…

Mac OS Terminal Commands

转自 &#xff1a; http://www.renfei.org/blog/mac-os-x-terminal-101.html Mac OS X Terminal 101&#xff1a;终端使用初级教程 July 29, 2012 / 编程指南最近学习苹果认证的《Mac OS X Support Essentials》教程&#xff0c;看到 Command Line 一节有很多实用的知识&#x…

封装一个计时器,记录页面的停留时间

在页面加载时初始化计时器&#xff0c;页面结束时取值。 效果如图&#xff1a; 下面是uniapp的代码示例&#xff1a; <template><view class"aaaacc"><view class"aaa">{{time}}</view></view> </template><scri…

ess用户名和密码_陈ess洁如何从摄影系学生转变为成功的自由职业者和内容创作者(播客)...

ess用户名和密码This week, for our last podcast episode of 2019, I got to chat with freelancer and content creator Jessica Chan - known as CoderCoder on social media - about how she got into tech and started her educational website and YouTube channel.本周&…

安装wxpython——python程序GUI图形界面使用

一、本机使用python版本 1、本机使用python版本为3.6.2&#xff0c;windows系统。 二、安装步骤 1、开始-运行-cmd 2、python3.x 需要进入python安装位置下是pip目录&#xff0c;再执行pip 命令 其中&#xff1a;python F:\Users\Administrator\AppData\Local\Programs\Python\…

ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发)

ASP.NET 2.0及以上的开发平台&#xff0c;为全球化本地化应用程序提供了工具&#xff0c;而且实现起来非常简单。以下内容是使用c#&#xff0c;按照帮助一步步做的&#xff0c;将为初学者提供详细的实现步骤。 一 几个必要概念 &#xff08;一&#xff09; 支持全球化  由于…

promise 和 async await区别

什么是Async/Await? async/await是写异步代码的新方式&#xff0c;以前的方法有回调函数和Promise。   async/await是基于Promise实现的&#xff0c;它不能用于普通的回调函数。   async/await与Promise一样&#xff0c;是非阻塞的。   async/await使得异步代码看起来像…

mac 制作usb启动盘_如何使用Mac制作Windows 10 USB-从Mac终端构建可启动的ISO

mac 制作usb启动盘Most new PCs dont come with DVD drives anymore. So it can be a pain to install Windows on a new computer.大多数新PC不再附带DVD驱动器。 因此&#xff0c;在新计算机上安装Windows可能会很痛苦。 Luckily, Microsoft makes a tool that you can use …

作业05-继承、多态、抽象类与接口

1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口&#xff0c;Comparable&#xff0c;Comparator 1.2 尝试使用思维导图将这些关键词组织起来。 1.3 可选&#xff1a;使用常规方法总结其他上课内容。 1.接口特点&#xff1a;一个公开的界面 有统一定义的规…

炫彩流光按钮 html+css

话不多&#xff0c;先上效果&#xff1a; 简介&#xff1a; 用基础css做一个有一点炫酷的流光按钮&#xff0c;不止按钮&#xff0c;只要是盒子就行。 具体步骤&#xff1a; 1.先定义一个盒子当做按钮&#xff0c;如我就用a标签&#xff1a; <body><a href"#…

SQL取上一条, 下一条记录方法

如果我们需要取id为3的前后的1条记录. 就可以用以下方法 取上一条记录: select * from 表名 where id<3 order by id desc limit 1取下一条记录: select * from 表名 where id>3 order by id asc limit 1大小于比较 order limit 转载于:https://www.cnblogs.com/…

react中使用构建缓存_通过构建海滩度假胜地网站,了解如何使用React,Contentful和Netlify...

react中使用构建缓存In this full course from John Smilga you will learn React by building a beach resort website project. The project uses React router for routing, React context API for state management, Contentful headless CMS for data management, and Net…

R语言实战 - 基本统计分析(2)- 频数表和列联表

数据&#xff1a; > library(vcd) > head(Arthritis)ID Treatment Sex Age Improved 1 57 Treated Male 27 Some 2 46 Treated Male 29 None 3 77 Treated Male 30 None 4 17 Treated Male 32 Marked 5 36 Treated Male 46 Marked 6 23 …