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

news/2024/7/20 2:33:21 标签: 微信小程序, notepad++, 小程序

小程序>微信小程序的订阅消息, 必须是由弹框,弹框,弹框来调起了,单纯的在页面上调用 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.niftyadmin.cn/n/5398090.html

相关文章

随想录算法训练营第四十五天|322.零钱兑换、279.完全平方数

322.零钱兑换 public class Solution {public int CoinChange(int[] coins, int amount) {int[] dpnew int [amount1];int maxint.MaxValue;for(int i0;i<dp.Length;i){dp[i]max;}dp[0]0;for(int i0;i<coins.Length;i){for(int jcoins[i];j<amount;j){if(dp[j-coins[…

使用爬虫去获取四六级成绩

使用爬虫去获取四六级成绩 今天出成绩&#xff0c;没过&#xff0c;二战六级依然惨死&#xff0c;那么我就写一个简单的爬虫&#xff0c;其实也可以封装成一个接口的&#xff0c;然后直接输入姓名 身份证好 以及四六级即可获取成绩&#xff0c;我就是简单的玩了一下哈&#xf…

集合进阶(四)——Map

Map集合 • Map集合称为双列集合&#xff0c;格式为&#xff1a; {key1  value1, key2  value2, key3  value3, …} 一次需要保存一对数据作为一个元素 • Map集合的每个元素"key  value"称为一个键值对/键值对对象/Entry对象&#xff0c;Map集合也被…

C++惯用法之空基类优化

相关系列文章 C惯用法之Pimpl C惯用法之CRTP(奇异递归模板模式) C之std::tuple(二) : 揭秘底层实现原理 目录 1.空类 2.空基类优化 3.内存布局原则 4.实例分析 5.总结 1.空类 C 中每个对象的实例都可以通过取地址运算符获取其在内存布局中的开始位置&#xff0c;因此每个类…

leetcode — 动态规划 — 打家劫舍、完全平方数

1 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房…

uniapp制作简单的tab切换

tab切换是APP开发最常见的功能之一&#xff0c;uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言&#xff0c;使用tabbar组件非常方便快捷&#xff0c;可以快速实现底部导航栏的效果。对于比较复杂的页面&#xff0c;我们可以使用tab组件自由定义样式和内容 目录…

SWOT分析法是什么?

SWOT法又称态势分析法&#xff0c;是一种通过分析对象内外部因素从而得出战略结论的分析方法。核心理念在于通过对影响因素进行分类梳理&#xff0c;再通过聚合考虑来得出结论。主要就是四个维度&#xff1a;优势&#xff08;Strengths&#xff09;、劣势&#xff08;Weaknesse…

Git自动忽略dll文件的问题

检查了半天发现是sourcetreee的全局忽略文件导致&#xff0c; 从里面删除dll即可。 我是干脆直接删了全局忽略&#xff0c;太恶心了&#xff0c;如下&#xff1a; #ignore thumbnails created by windows Thumbs.db #Ignore files build by Visual Studio *.exe .vsconfig .s…