微信小程序的订阅消息是一个允许开发者向用户发送重要通知的功能。这里为您展示如何实现小程序订阅消息的基本步骤和代码示例

这篇具有很好参考价值的文章主要介绍了微信小程序的订阅消息是一个允许开发者向用户发送重要通知的功能。这里为您展示如何实现小程序订阅消息的基本步骤和代码示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

步骤 1: 获取模板 ID

首先,您需要登录微信公众平台,进入「小程序管理」后台,找到“设置” > “开发设置” > “订阅消息”,然后选择并配置所需的模板,记录模板 ID。

步骤 2: 小程序前端请求订阅

在小程序的某个页面或组件中,当用户执行某个操作(例如点击按钮)时,可以调用以下方法请求订阅:

wx.requestSubscribeMessage({
  tmplIds: ['模板ID'],
  success (res) {
    if (res['模板ID'] === 'accept') {
      // 用户同意了订阅
      console.log('订阅成功')
    } else {
      // 用户拒绝了订阅或发生了其他异常
      console.log('订阅失败')
    }
  },
  fail (err) {
    console.error('请求订阅失败', err)
  }
})

步骤 3: 服务器端发送订阅消息

当需要发送订阅消息给用户时,可以在服务器端使用小程序的 API 来完成。以下是一个 Node.js 示例,使用 axios 发送请求:

const axios = require('axios')

async function sendSubscribeMessage(accessToken, openId, templateId, data) {
  const url = `https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=${accessToken}`
  
  const payload = {
    touser: openId,
    template_id: templateId,
    data: data
  }

  try {
    const response = await axios.post(url, payload)
    console.log('发送订阅消息结果:', response.data)
  } catch (error) {
    console.error('发送订阅消息失败:', error)
  }
}

其中:

  • accessToken 是调用小程序接口所需的访问令牌。
  • openId 是目标用户的 OpenID。
  • templateId 是在步骤 1 中获取的模板 ID。
  • data 是模板数据。

请确保在实际使用时替换相应的值,并根据需要处理成功和失败的情况。


当小程序前端需要请求服务端发送订阅消息时,你通常会使用小程序内的网络请求 API 来完成。以下是如何在小程序前端调用你的服务端接口来发送订阅消息:

前提

  1. 已有一个服务端接口,该接口可以处理前端的请求并发送订阅消息。例如该接口的 URL 是 https://yourserver.com/send-subscribe-message
  2. 服务端需要知道目标用户的 openId 和相关的模板数据,以发送订阅消息。

小程序前端代码

// 假设你已经获取了用户的 openId 和其他相关数据
const openId = '用户的OpenID';
const templateData = {
  // 根据你的模板结构,这里只是一个示例
  thing1: { value: '订阅内容' },
  time2: { value: '2023-09-15 15:00' }
};

// 调用服务端接口发送订阅消息
wx.request({
  url: 'https://yourserver.com/send-subscribe-message',
  method: 'POST',
  data: {
    openId: openId,
    data: templateData
  },
  success(res) {
    console.log('请求发送成功,服务端响应:', res.data);
    if (res.data.success) {
wx.showToast({
        title: '订阅消息已发送',
        icon: 'success'
      });
    } else {
      wx.showToast({
        title: '订阅消息发送失败',
        icon: 'none'
      });
    }
  },
  fail(err) {
    console.error('请求服务端失败:', err);
    wx.showToast({
      title: '网络请求失败',
      icon: 'none'
    });
  }
});

在上述代码中,我们使用了 wx.request() 方法来调用服务端的 API。你需要将示例中的 URL 和数据结构替换为实际的服务端接口和数据格式。

此外,服务端在处理这个请求并发送订阅消息后,应该返回一个响应,告诉前端是否成功发送了订阅消息。在上述示例中,我假设服务端返回的响应有一个 success 字段来表示是否成功发送了订阅消息。你需要根据实际的服务端响应来调整代码。



服务端如何知道目标用户的 openId呢?

openId 是一个微信用户在一个特定小程序中的唯一标识符。为了从服务端获取用户的 openId,您需要在小程序前端完成以下步骤:

  1. 用户登录小程序。
  2. 使用 wx.login() 获取到临时登录凭证(code)。
  3. 将这个 code 发送到服务端。
  4. 服务端使用 code 以及小程序的 appIdappSecret 调用微信端的 API 获取 openId

下面是详细的步骤说明:

1. 用户登录小程序

您可以使用微信小程序提供的登录功能来让用户登录。通常,你可能已经设置了在小程序启动时登录或在用户执行某些操作时登录。

2. 获取临时登录凭证(code)

在小程序前端,使用以下方法来获取登录凭证:

wx.login({
  success: function(res) {
    if (res.code) {
      // 发送 res.code 到后台
      sendCodeToServer(res.code);
    } else {
      console.log('获取用户登录态失败!' + res.errMsg);
    }
  }
});

3. 发送 code 到服务端

function sendCodeToServer(code) {
  wx.request({
    url: 'https://yourserver.com/get-openid', // 您的服务端接口地址
    method: 'POST',
    data: { code: code },
    success(res) {
      // 处理响应,例如保存从服务端返回的 openId
      const openId = res.data.openId;
      console.log('Received openId:', openId);
    },
    fail(err) {
      console.error('请求服务端失败:', err);
    }
  });
}

4. 服务端使用 code 获取 openId

在服务端,当接收到前端传来的 code 后,您需要调用微信的 jscode2session 接口来获取 openId。以下是一个 Node.js 示例:

const axios = require('axios');

async function getOpenIdFromCode(code) {
  const appId = 'YOUR_APP_ID'; // 您的小程序 appId
  const appSecret = 'YOUR_APP_SECRET'; // 您的小程序 appSecret
  const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`;

  try {
    const response = await axios.get(url);
    const { openid } = response.data;
    return openid;
  } catch (error) {
    console.error('获取 openId 失败:', error);
    throw error;
  }
}

在这里,您需要将 YOUR_APP_IDYOUR_APP_SECRET 替换为实际的小程序 appIdappSecret

最后,您应该在服务端持久化 openId 和用户的其他相关数据,以便后续使用(例如发送订阅消息)。


服务端持久化 openId

持久化 openId 意味着在服务器端将用户的 openId 以及与之相关的数据保存到一个持久存储中,如数据库。这样,即使服务器重启或发生故障,这些数据仍然可以被恢复和使用。以下是一个简单的说明和示例,展示如何在服务器端持久化 openId

1. 选择存储方式

首先,您需要选择一个存储方式。常见的存储方式包括:

  • 关系型数据库(如 MySQL、PostgreSQL)
  • NoSQL 数据库(如 MongoDB、Redis)

这里我们以 MySQL 为例进行说明。

2. 创建数据表

您可以创建一个数据表,专门用于存储用户的 openId 和其他相关信息。以下是一个简单的 SQL 创建表的示例:

CREATE TABLE wx_users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    openId VARCHAR(255) NOT NULL UNIQUE,
    other_data TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

在这个示例中,我们创建了一个叫做 wx_users 的数据表,其中包括一个自增的 id 作为主键,openId 字段用于存储用户的 openId,并确保其值是唯一的,other_data 用于存储其他任意与用户相关的数据,created_at 记录数据的创建时间。

3. 在服务端保存数据

当您在服务端获取到 openId 时,您可以使用相应的数据库驱动或框架将数据保存到上述的数据表中。以下是一个使用 Node.js 和 mysql 包的示例:

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'your_db_host',
  user: 'your_db_user',
  password: 'your_db_password',
  database: 'your_db_name'
});

connection.connect();

function saveOpenId(openId, otherData) {
  const query = 'INSERT INTO wx_users (openId, other_data) VALUES (?, ?) ON DUPLICATE KEY UPDATE other_data = VALUES(other_data)';
  connection.query(query, [openId, JSON.stringify(otherData)], function (error, results, fields) {
    if (error) throw error;
    console.log('Saved openId:', openId);
  });
}

// 示例用法
const openId = 'exampleOpenId';
const userData = { nickname: 'John', age: 25 };
saveOpenId(openId,userData);

请注意,上述代码示例简化了很多内容,如错误处理和数据库连接管理。在生产环境中,您可能会选择更高级的工具或框架,如 Sequelize 或 TypeORM,以便更好地管理数据库连接和操作。文章来源地址https://www.toymoban.com/news/detail-766162.html

到了这里,关于微信小程序的订阅消息是一个允许开发者向用户发送重要通知的功能。这里为您展示如何实现小程序订阅消息的基本步骤和代码示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp 小程序订阅消息 一次订阅多个 wx.requestSubscribeMessage 微信小程序订阅消息

    如图所示,订阅消息 官方文档: 小程序订阅消息官方文档 1,消息类型 (1) 一次性订阅消息 用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。 (2) 长期订阅消息 用户订阅一次后,开发者可长期下发多条消息。 目前长期性订阅消息

    2024年02月09日
    浏览(45)
  • 微信小程序 如何订阅消息?

    微信公众号分为两种类型:订阅号和服务号,它们在功能和使用方式上有一些区别。 1.订阅号(Subscription Account): 2.服务号(Service Account): 微信公众号的类型是在注册时选择的,一旦选择了订阅号或服务号,无法直接转换。如果您主要是提供资讯和更新性内容,订阅号可

    2024年02月06日
    浏览(53)
  • 微信小程序——订阅通知消息

    1.在微信公众平台的订阅消息页面设置模板消息 2.后端发送订阅消息需要得到用户的唯一id 通过   wx.login() 获取微信的唯一配置 code (每一个微信号只有一个code) 通过接口把获取到的 code 发送给后端 获取openid   3.在登录页面点击登录按钮的时候让用户同意接收订阅消息 使用

    2024年02月13日
    浏览(43)
  • 微信小程序消息订阅功能

    消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅(用户订阅了才能接收推送的消息) 订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页

    2024年02月05日
    浏览(37)
  • 微信小程序之订阅消息

    其实客户端的步骤很简单 这里放上文档地址 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html 第一步 首先我们需要到微信公众平台的 订阅消息-公共消息模板处选择需要的模板添加到-我的模板。 通过wx.requestSubscribeMessage()方法调起小程序订

    2024年02月11日
    浏览(39)
  • 微信小程序:发送小程序订阅消息

    文档:小程序订阅消息(用户通过弹窗订阅)开发指南 在微信公众平台(https://mp.weixin.qq.com)手动配置获取模板 ID 2.1、获取消息下发权限 文档:一次性订阅消息、长期订阅消息 示例代码 这里需要注意一个坑,如果用户未授权,需要引导用户打开设置手动设置 2.2、获取登录凭

    2024年01月25日
    浏览(31)
  • 微信小程序-小程序订阅消息(四)

    小程序订阅消息 | 微信开放文档 消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅 订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面

    2024年02月11日
    浏览(35)
  • 微信小程序通知,微信小程序长期订阅消息添加硬件设备能力的设备订阅消息step-by-step

    本文目的,分享一个实际案例: 开发微信小程序的报警器的微信订阅消息, 设备报警后触发微信报警 前提: 有一个微信小程序并且微信认证过。 1: 添加设备申请权限 2:按照实际情况填写设备信息, 一般等两天到三天能审核过  3: 申请设备消息能力 , 这个一部不做的

    2024年04月16日
    浏览(46)
  • 微信小程序之订阅消息推送

    目录 1、开通订阅消息 2、请求用户授权 2.1、wx.requestSubscribeMessage(Object object) 2.2、wx.requestSubscribeDeviceMessage(Object object) 3、发送订阅信息 3.1、调用方式 3.2、云调用接口方法 3.3、请求参数 3.4、返回值 3.5、代码示例 登录小程序之后点击功能下的 订阅消息 , 点击开通 选择公共模

    2024年02月09日
    浏览(52)
  • 微信小程序实现订阅消息功能

             * 源码已经上传到资源处,需要的话点击跳转下载 |  源码下载         小程序中的订阅内容在日常中大家都会使用到,一般在支付的时候,会收到支持成功的消息,里面有一些基础信息花费多少以及是使用在什么地方,订阅消息是小程序向用户发送消息的方式

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包