微信小程序订阅消息前后端示例

news2024/11/17 17:54:49

微信小程序的订阅消息, 必须是由弹框,弹框,弹框来调起了,单纯的在页面上调用 wx.requestSubscribeMessage是没有效果的

小程序端的代码

<view class="sub" bindtap="dinyuxiaoxi">订阅消息</view>

页面点击订阅按钮,弹出订阅框
事件代码如下

//这里是判断用户的订阅状态
  dinyuxiaoxi(){
    let that = this;
    let tempId = "Ue4ZGm6xu5nDB6MYSi29muiTo9lVrBdtpv4XrOPmgqc";
    wx.getSetting({
      withSubscriptions:true,
      success(res){
        //当上面的参数有withSubscriptions:true时, res中会返回subscriptionsSetting (订阅消息的设置)
        //console.log(res.subscriptionsSetting)
        // res.subscriptionsSetting = {
        //   mainSwitch: true, // 订阅消息总开关
        //   itemSettings: {   // 每一项开关
        //     SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息
        //     SYS_MSG_TYPE_RANK: 'accept'
        //     zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息
        //     ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban',  //这是被后台禁用的, 也不弹出订阅框
        //   }
        // }
        if(res.subscriptionsSetting && res.subscriptionsSetting.mainSwitch){
          //用户选择过总是同意订阅消息的开关,此时就要判断,其下的每一条订阅消息,是否都是被同意的, 如果总是同意就不用弹出订阅框, 如果不是总是同意,或者以前是被拒绝的,要弹出提示框
          if(res.subscriptionsSetting.itemSettings && res.subscriptionsSetting.itemSettings[tempId]){
            //找到了记录, 然后要判断记录是 reject(用户拒绝) accept(用户同意) ban(微信后台封禁)
            let itemstatus = res.subscriptionsSetting.itemSettings[tempId];
            if(itemstatus == "reject"){
              //用户的拒绝过,弹出订阅提示
              that.doSubscript(tempId)
            }else if(itemstatus == "accept"){
              //用户总是同意,就可以不用弹出提示
            }else if(itemstatus == "ban"){
              //用户被后台封禁
            }
          }else{
            //这个分支是,订阅消息的总开关虽然打开了, 但是了 itemSetting[tempId] 中没有找到该订阅消息的记录
            that.doSubscript(tempId);
          }
        }else{
          //这里订阅消息的主开关没有打开的,就要每次都弹出订阅框
          that.doSubscript(tempId);
        }
      }
    })
  },

//这里才是直正的调起订阅
  doSubscript(tempId){
    wx.showModal({
      title: '订阅消息',
      content: '请同意我们给您推送消息,以便后续作提醒开课',
      success: (res) => {
        console.log(res);
        if (res.cancel) {
          wx.showToast({
            title: '您未同意,可能会收不到提醒短信',
          })
        }
        if (res.confirm) {
          wx.requestSubscribeMessage({
            tmplIds: [tempId],
            success(res1){ //{Ue4ZGm6xu5nDB6MYSi29muiTo9lVrBdtpv4XrOPmgqc: "accept", errMsg: "requestSubscribeMessage:ok"}
              if(res1[tempId] == "accept"){  //这个success中可以不写代码的,没多大用
                console.log("订阅成功")
              }
            }
          })
        }
      }
    })
  },

以上就是小程序端的订阅消息


在这里插入图片描述

订阅消息成功以后, 后台服务端是要发送消息给用户的
这里我们使用了 easywechat6 的功能
简易代码如下

 //发送订阅消息后台
    public function sendSubscript(){
        $app = WechatService::getMiniInstance();
        $accessToken = $app->getAccessToken()->getToken();
        $api = $app->getClient();
        $response = $api->post("/cgi-bin/message/subscribe/send?access_token=".$accessToken,[
            "json"=>[
                "template_id"=>"Ue4ZGm6xu5nDB6MYSi29muiTo9lVrBdtpv4XrOPmgqc",
                "page"=>"",  //这里可以写上跳转的页面地址
                "touser"=>"oloj-7GNPtiaeR4_zUoWx89BtJb0",
                "data"=>["thing10"=>["value"=>"服务"],"thing3"=>["value"=>"我的地址"],"thing6"=>["value"=>"测试取消"],"time4"=>["value"=>date("Y-m-d")]]
            ]
        ]);
        if($response->getStatusCode() == 200){
            $result = $response->toArray();
            var_dump($result);
        }


    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1476400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习】SDXL-Lightning 体验,gradio教程,SDXL-Lightning 论文

文章目录 资源SDXL-Lightning 论文 资源 SDXL-Lightning论文&#xff1a;https://arxiv.org/abs/2402.13929 gradio教程&#xff1a;https://blog.csdn.net/qq_21201267/article/details/131989242 SDXL-Lightning &#xff1a;https://huggingface.co/ByteDance/SDXL-Light…

SpringCloud Eureka(注册中心)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基…

sql基本语法+实验实践

sql语法 注释&#xff1a; 单行 --注释内容# 注释内容多行 /* 注释内容 */数据定义语言DDL 查询所有数据库 show databases;注意是databases而不是database。 查询当前数据库 select database();创建数据库 create database [if not exists] 数据库名 [default charset 字符…

Qt中关于信号与槽函数的思考

信号与槽函数的思考 以pushbutton控件为例&#xff0c;在主界面上放置一个pushbutton控件&#xff0c;点击右键选择关联槽函数&#xff0c;关联一个click函数&#xff0c;如下图所示&#xff1a; 在该函数中&#xff0c;实现了一个点击pushbutton按钮后&#xff0c;弹出一个窗…

复制策略深入探讨

在之前的博客中&#xff0c;我们讨论了复制最佳实践和不同类型的复制&#xff0c;例如批量、站点和存储桶。但是&#xff0c;随着所有这些不同类型的复制类型的出现&#xff0c;人们不得不想知道在哪里使用哪种复制策略&#xff1f;从现有 S3 兼容数据存储迁移数据时&#xff0…

部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片

PhotoMaker只需要一张人脸照片就可以生成不同风格的人物照片&#xff0c;可以快速出图&#xff0c;无需额外的LoRA培训。 安装环境 python 3.10gitVisual Studio 2022 安装依赖库 git clone https://github.com/bmaltais/PhotoMaker.git cd PhotoMaker python -m venv venv…

借助 Aspose.Words,使用 C#、Java、Python 和 C++ 创建 Word 文档

以编程方式创建和操作 Word 文档是许多应用程序的常见要求。幸运的是&#xff0c;有各种编程语言的强大库可以简化此任务。Aspose.Words 就是此类多功能解决方案之一&#xff0c;它是强大的 API&#xff0c;使开发人员能够无缝生成、修改和转换 Word 文件。在这篇博文中&#x…

tomcat下载安装配置教程

tomcat下载安装配置教程 我是使用tomcat下载安装及配置教程_tomcat安装-CSDN博客 此贴来进行安装配置&#xff0c;原文21年已经有些许不同。 下载tomcat 官网&#xff1a;http://tomcat.apache.org/ 我们老师让安装8.5以上&#xff0c;所以我直接选择版本9 点击9页面之后…

定制开发一款家政小程序,应知应会

引言 在这个快节奏的现代生活中&#xff0c;人们对高效、便捷的家政服务的需求日益增加。随着社会结构的变化和职业生活的繁忙&#xff0c;许多家庭面临着时间不足、精力不济的挑战。在这种情况下&#xff0c;家政服务成为解决问题的有效途径。然而&#xff0c;传统的家政服务…

SD-WAN助力企业数据传输安全

随着企业网络需求的不断增长&#xff0c;SD-WAN成为企业网络组网的首选方案&#xff0c;能够实现多种网络拓扑结构的无缝连接&#xff0c;其中包括总部-分支、总部-分支-数据中心、总部-数据中心、总部-分支-云服务等。如何确保企业数据在传输过程中的安全性成为企业关注的重要…

微软广告和网络服务CEO承认OpenAI的Sora将加入Copilot,但需要一些时间

事情的起因是一名网友询问 Sora 是否会加入 Copilot&#xff0c;微软广告和网络服务CEO首席执行官——Mikhail Parakhin 回应说&#xff1a;“最终&#xff0c;但这需要时间。”毕竟投了几十个亿美金进去&#xff0c;不亏是金主爸爸。 图为Mikhail Parakhin Sora是OpenAI开发的…

论文设计任务书学习文档|基于智能搜索引擎的图书管理系统的设计与实现

文章目录 论文(设计)题目:基于智能搜索引擎的图书管理系统的设计与实现1、论文(设计)的主要任务及目标2、论文(设计)的主要内容3、论文(设计)的基本要求4、进度安排论文(设计)题目:基于智能搜索引擎的图书管理系统的设计与实现 1、论文(设计)的主要任务及目标 …

03OpenCV图像的掩膜操作

文章目录 掩膜操作提高图像的对比度获取图像像素制作图像掩膜算子防止像素溢出算子全部代码 掩膜操作提高图像的对比度 红色是中心像素&#xff0c;从上到下&#xff0c;从左到右对每个像素做同样的处理操作&#xff0c;得到最终结果就是对比度提高之后的输出图像Mat对象 注&am…

Google checkstyle实战

概述 CheckStyle检查代码是否符合制定的规范。CheckStyle检查是基于源码的&#xff0c;无需编译&#xff0c;执行速度快。 CheckStyle的主要流程是&#xff1a; 对Java文件进行词法语法分析&#xff0c;生成语法树。载入配置文件&#xff08;checkstyle-metadata.xml以及自定…

解密逃脱路径判断算法

介绍 在计算机科学领域&#xff0c;有许多有趣的算法问题需要解决。其中之一就是判断在给定条件下是否存在逃脱路径的问题。本篇博客将介绍如何使用广度优先搜索&#xff08;BFS&#xff09;算法来解决这个问题。 问题背景 假设有一个二维平面上的迷宫&#xff0c;某人被困在…

【AI绘画·24年1月最新】Stable Diffusion整合包安装!解压即用--秋葉aaaki 大佬的作品,试用

前言 Stable Diffusion 之前费老大的劲部署安装&#xff0c;解决报错。搞完之后&#xff0c;突然发现有个现成集成包可以用&#xff0c;真是效率高到不行&#xff0c;今天搞下来试试 我电脑配置&#xff1a; CPU: 12th Gen Intel Core™ i7-12700F 2.10 GHz 内存32G&#xff0…

解决鸿蒙模拟器卡顿的问题

缘起 最近在学习鸿蒙的时候&#xff0c;发现模拟器非常卡&#xff0c;不要说体验到鸿蒙的丝滑&#xff0c;甚至到严重影响使用的程度。 根据我开发Android的经验和在论坛翻了一圈&#xff0c;最终总结出了以下几个方案。 创建模拟器 1、在DevEco Virtual Device Configurat…

【Go语言】Go语言中的指针

Go语言中的指针 变量的本质是对一块内存空间的命名&#xff0c;我们可以通过引用变量名来使用这块内存空间存储的值&#xff0c;而指针则是用来指向这些变量值所在内存地址的值。 注&#xff1a;变量值所在内存地址的值不等于该内存地址存储的变量值。 Go语言中&#xff0c;…

vue3+vite+ts配置多个代理并解决报404问题

之前配置接口代理总是报404,明明接口地址是对的但还是报是因数写法不对;用了vue2中的写法 pathRewrite改为rewrite 根路径下创建env文件根据自己需要名命 .env.development文件内容 # just a flag ENVdevelopment# static前缀 VITE_APP_PUBLIC_PREFIX"" # 基础模块…

Dockerfile(2) - LABEL 指令详解

LABEL 可以为生成的镜像添加元数据标签信息&#xff0c;这些信息可以用来辅助过滤出特定镜像 LABEL <key><value> <key><value> <key><value> ... 栗子一 # key 加了 " LABEL "com.example.vendor""ACME Incorpor…