微信小程序订阅功能实现 前后端

微信小程序订阅消息文档地址 链接

官网文档永远是第一手资料

步骤一:获取模板 ID

地址
在这里插入图片描述

步骤二:获取下发权限

开发工具不能唤起,真机调试

以一次性订阅为例

这里我用按钮来实现的,自己根据实际项目修改

页面效果

在这里插入图片描述

前端代码

在这里插入图片描述
home.js

  authMessageTpl() {
    wx.requestSubscribeMessage({
      tmplIds: ['模板id'],
      success: (res) => {
        if (res['模板id'] === 'accept') {
          wx.showToast({
            title: '订阅OK!',
            duration: 1000,
          })
        }
      }
    })
  },
步骤三:调用接口下发订阅消息

先获取接口权限access_token,再根据你选择的模拟,去模板详情 配置数据参数

在这里插入图片描述

实现效果

在这里插入图片描述

前端代码

home.js

  sendMessage: function () {
    wx.request({
      url: 'http://xxxx:9527/wx/posden-spring-wx-user/getApiAccessToken',
      success: (res) => {
        const accessToken = res.data.data.access_token; // 获取权限access_token
        wx.request({
          url: 'http://xxxx:9527/wx/posden-spring-wx-user/sendMessageTpl',
          method: 'POST',
          header: {
            'content-type': 'application/json',
            'token': wx.getStorageSync('token') // 此处我是登入时自己jwt生成的token
          },
          data: {
            accessToken: accessToken,
            "touser": 'openId',
            "templateId": "templateId",
            "page": "/pages/home/home.wxml?xxx=xxx",
            "miniprogramState": "developer",
            "lang": "zh_CN",
            "data": {
              "character_string1": {
                "value": "M12345678936"
              },
              "phrase2": {
                "value": "已完成"
              },
              "time3": {
                "value": "2020-04-28 10:22:22"
              },
              "thing4": {
                "value": "订阅信息"
              }
            }

          },
          success: (res) => {
            console.log(res) // 此处要打印状态值。尤其不成功要提示状态码(消息),如果是授权问题,可重新唤起授权
          }
        })
      }
    })
  }

在这里插入图片描述

后端代码
    @GetMapping("/getApiAccessToken")  // 获取access_token 不推荐如此获取,仅供个人使用。企业级建议存放redis
    public ReturnParam<Object> getApiAccessToken() {
        String result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret);
        JSONObject res = JSONObject.parseObject(result);
        ReturnParam<Object> returnParam = new ReturnParam<>(); // 自己返回类的封装
        returnParam.setSuccess(true);
        returnParam.setData(res);
        return returnParam;
    }


    @NeedLogin  // 自己定义的注解需要传递token 根据自己实际项目定制
    @PostMapping("/sendMessageTpl")
    public ReturnParam<Object> sendMessage(@RequestBody TplMessageDTO tplMessageDTO) {
        String accessToken = tplMessageDTO.getAccessToken();
        String lang = tplMessageDTO.getLang();
        String miniprogramState = tplMessageDTO.getMiniprogramState();
        String templateId = tplMessageDTO.getTemplateId();
        String touser = tplMessageDTO.getTouser();
        String page = tplMessageDTO.getPage();
        Object tpldata = tplMessageDTO.getData();

        Map<String , Object> data = new HashMap<>();
        data.put("touser",touser);
        data.put("template_id", templateId);
        data.put("page", page);
        data.put("data", tpldata);
        data.put("miniprogram_state", miniprogramState);
        data.put("lang", lang);
        Map<String , String> header = new HashMap<>();
        String response = HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken, data, 1, header); // 自己封装的HttpUtil工具类
        
        ReturnParam<Object> returnParam = new ReturnParam<>(); // // 自己封装的返回类
        returnParam.setSuccess(true);
        Map<String,Object> parse = JSONObject.parseObject(response);
        returnParam.setData(parse);
        return returnParam;
    }



// TplMessageDTO 
package com.example.demo.wx.entity;

import lombok.Data;

@Data
public class TplMessageDTO {
    private String accessToken;
    private String touser;
    private String templateId;
    private String page;
    private String miniprogramState;
    private String lang;
    private Object data;
}


在这里插入图片描述

完工

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
微信小程序支付功能是一种在微信小程序实现在线支付的功能,可以方便用户完成购买商品或服务的支付。在实现功能时,可以使用SpringBoot作为后端开发框架,下面是一个简单的示例代码: 后端代码: 1. 创建一个支付接口的Controller,如PayController。 2. 在PayController中定义一个接收前端请求的接口,如/pay。 3. 在该接口的实现中,首先获取前端传递的支付参数,包括商品名称、价格、订单号等。 4. 调用微信支付的API接口,生成一个预支付订单。 5. 将预支付订单的信息返回给前端。 6. 前端收到预支付订单信息后,调用微信支付的API接口进行支付。 7. 微信支付成功后,微信会异步通知后端支付状态的回调接口。 8. 后端接收到微信支付的回调通知后,更新订单的支付状态。 示例代码如下: ```java @RestController public class PayController { @PostMapping("/pay") public String pay(@RequestParam String productName, @RequestParam float price, @RequestParam String orderId) { // 1. 获取支付参数 // 2. 调用微信支付的API,生成预支付订单 // 3. 返回预支付订单信息给前端 } @PostMapping("/wxpay/callback") public void wxPayCallback(@RequestParam String orderId) { // 1. 更新订单的支付状态 } } ``` 以上是一个简单的微信小程序支付功能的SpringBoot后端代码示例,具体支付流程和参数的处理可以根据具体需求进行调整和完善。同时需要注意对支付过程中的异常情况进行处理,如用户取消支付、支付超时等情况。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值