全国服务热线:400-123-4567

您的位置: 首页 > 新闻中心 > 公司资讯

全国服务热线

400-123-4567

Spring Boot框架下微信小程序模板消息推送功能全流程实现

作者:小编时间:2026-01-09 04:13:36次浏览

信息摘要:

文章浏览阅读3.2k次,点赞21次,收藏25次。微信小程序作为连接用户与服务的轻量级应用,其推送功能尤为重要。模板消息是微信官方为小程序提供的消息推送方式

微信小程序具备模板消息功能,此功能能使开发者直接朝着用户推送重要通知,可是要将它运用得恰到好处并非易事,这其中涉及到开发环节,涉及到审核环节,还涉及到用户体验等多个环节。

基础接口的作用

其关键在于,小程序获取用户身份乃是通过用户登录接口得以达成的一种情况。开发者借助wx.login能够从中取得临时凭证,随后利用此临时凭证从服务器里面互换引出用户唯一标识。这一过程更是推送模板消息的前提条件所在,其缘由在于,每条消息都必然需要明确指定接收者这么一种要求。

// 登录
wx.login({
  success: res => {
    // 发送 res.code 到后台换取 openId, sessionKey, unionId
    if (res.code) {
      // 发起网络请求
      wx.request({
        url: 'https://example.com/login',
        data: {
          code: res.code
        },
        success (res) {
          // 处理返回的用户信息
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

小程序与后台服务器的数据交换,由网络请求接口wx.request负责。提交订单数据,或者获取用户列表,开发者得通过此接口来进行。该接口支持GET、POST等多种方法,它还是触发模板消息发送的核心途径。

模板消息的发送条件

// 发起一个GET请求
wx.request({
  url: 'https://example.com/api/getData',
  method: 'GET',
  success: function(res) {
    console.log(res.data);
  }
});
// 发起一个POST请求
wx.request({
  url: 'https://example.com/api/postData',
  method: 'POST',
  data: {
    key: 'value'
  },
  success: function(res) {
    console.log(res.data);
  }
});

模板消息发送不能随意进行,其必须经由用户主动产生行为来触发,比如说,当用户提交表单或者完成支付之后,小程序才能够在七天的时间范围之内向该用户发送与之相关的通知,这样的一种限制起到了防止开发者滥发行为的作用。

一般而言,触发条件常常对应着特定的业务场景,于电商小程序当中而言,当用户支付成功的时候,便会触发发货通知模板,在预约类应用里,一旦用户确认预约时间,就会触发提醒模板,并且每个模板都得单独进行配置。

wx.requestPayment({
  timeStamp: '', // 时间戳,从后端获取
  nonceStr: '', // 随机字符串,从后端获取
  templateId: '', // 模板ID,从后端获取
  url: '', // 页面链接,从后端获取
  data: {
    'first': {
      value: '尊敬的用户,您好!',
      color: '#1aad19'
    },
    'keyword1': {
      value: '活动名称',
      color: '#1aad19'
    },
    'keyword2': {
      value: '活动时间:2023-03-28 12:00',
      color: '#1aad19'
    },
    'remark': {
      value: '欢迎参加活动!',
      color: '#1aad19'
    }
  },
  success(res) {
    // 成功
  },
  fail(err) {
    // 失败
  }
});

消息模板的申请与管理

try {
  // 尝试执行网络请求
} catch (error) {
  // 异常处理
  if(error.message === '网络出错了') {
    // 网络异常的处理逻辑
  } else if(error.message === '用户拒绝授权') {
    // 授权失败的处理逻辑
  }
}

开发者得登录微信小程序后台,于模板库里挑选适宜的消息模板。要是不存在现成模板,能够申请去创建崭新的,不过一定要阐明用途以及字段含义,提交之后静候微信平台予以审核。

经过审核被通过之后,模板将会获取到唯一的ID。当开发者于小程序代码里调用发送接口之际,必定要使用这个ID。一旦模板标题以及内容字段审核通过了,就不可以进行修改,要是有变动的需求,那就只能重新去申请新的模板。

接口调用的具体步骤

传递模板消息主要借助wx.requestSendMessage接口来进行调用,开发者得去构造一个JSON对象,这个对象要涵盖模板ID,用户的openid,有目标跳转的页面路径以及与之对应的数据内容,并且数据内容必须和审核通过的模板字段进行严格的对应才行 。

成功调用接口之后,微信服务器会返回发送的结果,用户会于微信的“服务通知”当中看到这条消息,要是用户点击该消息,则能够跳转到小程序指定的页面,这给后续交互提供了入口 。

常见的错误处理

// 假设已经获取到模板ID为"template_id",用户OPENID为"user_openid"
let templateData = {
  "first": { "value": "尊敬的用户,您好!", "color": "#173177" },
  "keyword1": { "value": "123456", "color": "#173177" },
  "keyword2": { "value": "2023-04-01", "color": "#173177" },
  "remark": { "value": "点击下方链接查看交易详情", "color": "#173177" }
};
// 发送模板消息
wx.request({
  url: 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN',
  method: 'POST',
  data: {
    touser: "user_openid",
    template_id: "template_id",
    page: "",
    data: templateData,
  },
});

调用接口,有可能由于各种各样的原因致使其失败。常见的错误涵盖模板ID无效这种情况,还有用户已经取消关注这种状况,此外发送频率超限等也是常见的失误。微信会返回具体的错误码,像40037表明模板ID不正确,这就需要开发者去核对后台配置。

网络出现超时状况,或者服务器出现异常情形,这同样是较为常见的问题,开发者得在小程序前端设定合理的超时时间长度,并且要在后台做好日志记录工作,对于发送失败的消息,一般情况下建议放入重试的队列之中,不过要注意防止出现重复发送的情况。

优化推送效果的建议

wx.getUserProfile({
  desc: '用于完善会员资料',
  success: function(res) {
    console.log(res.userInfo);
    console.log(res逼近);
  },
  fail: function(err) {
    console.error(err);
  }
});

为了把消息点击率予以提升,能够对数据内容的可读性加以优化。比如说,于订单通知里让商品名称以及金额凸显出来,在预约提醒中把时间地点明确清楚。防止去运用用户不容易理解的内部编号或者代码,。



  
    
  



  模板内容预览:{{selectedTemplate.content}}
  

去定期剖析推送数据这件事也是具备相当重要性的,借助微信后台去查看消息的送达率,查看消息的打开率,查看消息的跳转率,以此来知悉用户各自的偏好,针对那些打开率偏低的模板而言,能够试着去调整发送的时机,或者是去精简相关内容,从而使得推送变得更为精准且有效 。

在你运用小程序期间,更期望接收到哪类样式的模板消息提示呢?是交易达成告知,还是服务进程刷新呢?



    com.github.binarywang
    weixin-java-mp
    最新版本号

@Configuration
public class WeixinConfig {
    @Bean
    public WxMpService wxMpService() {
        WxMpServiceImpl wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(getWxMpConfigStorage());
        return wxMpService;
    }
    @Bean
    public WxMpConfigStorage getWxMpConfigStorage() {
        WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
        configStorage.setAppId("你的小程序ID");
        configStorage.setSecret("你的小程序密钥");
        // 其他必要的配置...
        return configStorage;
    }
}

Copyright © 2012-2025 long8龙八国际 版权所有 Powered by EyouCms 备案号:粤ICP备202136524号