微信小程序——服务通知,发送订阅消息

这篇具有很好参考价值的文章主要介绍了微信小程序——服务通知,发送订阅消息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是消息推送

微信小程序——服务通知,发送订阅消息

二、整体效果

微信小程序——服务通知,发送订阅消息

三、实现步骤

1 小程序开通订阅消息

微信小程序——服务通知,发送订阅消息
微信小程序——服务通知,发送订阅消息

2 postApi测试效果

微信小程序——服务通知,发送订阅消息

三、uniapp配置

这里有个需要特别注意的点,我们要给用户发送消息,就必须引导用户授权,如下

微信小程序——服务通知,发送订阅消息
因为用户不点击允许,你是没有办法给用户推送消息的。每一次授权只允许发送一条消息,所以如果你想尽量多的发送消息,就得尽量多的引导用户授权。

wx.requestSubscribeMessage这个方法,来获取用户的授权。
前端代码:

<button bindtap="getAuthority" type='primary'>获取订阅消息授权</button>

//获取授权的点击事件
			getAuthority() {
				console.log("点击了")
				wx.requestSubscribeMessage({
					tmplIds: ['grwQUkOPAaJg-pzSZWeZawYTRFjmKmVPbkfckxWcPYQ'], //这里填入我们生成的模板id
					success(res) {
						console.log('授权成功', res)
						wx.getUserInfo({
						  //成功后会返回
						  success:(res)=>{
							console.log(res);
							// 把你的用户信息存到一个变量中方便下面使用
							let userInfo= res.userInfo
							//获取openId(需要code来换取)这是用户的唯一标识符
							// 获取code值
							wx.login({
							  //成功放回
							  success:(res)=>{
								console.log("返回",res);
								let code=res.code
								console.log("code",code);
								// 通过code换取openId
								wx.request({
								  url: `https://api.weixin.qq.com/sns/jscode2session?appid=wxf85bf469c5f5d12b&secret=76a1479c2adc31ab8eeefd23a09d4410&js_code=${code}&grant_type=authorization_code`,
								  success:(res)=>{
									console.log(res);
									userInfo.openid=res.data.openid
									console.log("openid",userInfo.openid);
								  }
								})
							  }
							})	
						  }
						})
					},
					fail(res) {
						console.log('授权失败', res)
					}
				})
			},

四、 后台整体编写

微信小程序——服务通知,发送订阅消息
1、对应实体类
PushDTO.java

package com.soil.data.dto.push;

import lombok.Data;

import java.util.Map;

/**
 * 小程序推送所需数据
 *
 * @author hlc
 */
@Data
public class PushDTO {
    /**
     * 用户openid
     */
    private String touser;
    /**
     * //模版id
     */
    private String template_id;
    /**
     * 默认
     */
    private String page = "pages/index/index";
    /**
     * 跳转小程序页面
     */
    private MiniprogramData miniprogram;
    /**
     * 放大那个推送字段
     */
    private String emphasisKeyword = "keyword1.DATA";
    /**
     * 推送文字
     */
    private Map<String, TemplateData> data;

}

TemplateData.java

package com.soil.data.dto.push;

import lombok.Data;

/**
 * 设置推送的文字
 *
 * @author hlc
 */
@Data
public class TemplateData {
    private String value;

    public TemplateData(String value) {
        this.value = value;
    }
}

MiniprogramData.java

package com.soil.data.dto.push;

import lombok.Data;

/**
 * 跳转小程序时填写
 *
 * @author hlc
 */
@Data
public class MiniprogramData {


    private String appid;

    private String pagepath;
}

2、代码实现文章来源地址https://www.toymoban.com/news/detail-506502.html

package com.soil.biz.service.push;

import com.alibaba.fastjson.JSONObject;
import com.soil.core.exception.AppServiceException;
import com.soil.core.exception.ExceptionDefinition;
import com.soil.core.util.DateUtils;
import com.soil.core.util.Log;
import com.soil.data.dto.push.MiniprogramData;
import com.soil.data.dto.push.PushDTO;
import com.soil.data.dto.push.TemplateData;
import com.soil.data.enums.UserLoginType;
import lombok.SneakyThrows;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;


/**
 * hlc
 */
@Service
public class PushBizService {

    private OkHttpClient okHttpClient = new OkHttpClient();

    public static final String WX_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type={grant_type}&appid={appid}&secret={secret}";


    /**
     * 发送方法
     * @param pushDTO 所需数据
     * @return responseEntity
     */
    @SneakyThrows
    public ResponseEntity<String> pushOneUser(PushDTO pushDTO) {
        final String SEND_INFO_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=";

        RestTemplate restTemplate = new RestTemplate();
        String appId = "wxf85bf469c5f5d12b";
        String appSecret = "76a1479c2adc31ab8eeefd23a09d4410";
        // 获取accessTokenJson
        String accessTokenJson = getAccessTokenJSON(appId, appSecret);
        // 获取accessToken
        JSONObject jsonObject = JSONObject.parseObject(accessTokenJson);
        String accessToken = jsonObject.getString("access_token");
        // 获取过期时间
        Long expiresTime = jsonObject.getLong("expires_in");
        System.out.println(accessToken);
        String url = SEND_INFO_URL + accessToken;

        return restTemplate.postForEntity(url, pushDTO, String.class);
    }


    /**
     * 测试方法
     */
    public static void main(String[] args) {
        String openid = "o7TAS4zVL5D3IlVEnucI09FrCwjE";
        String templateId = "grwQUkOPAaJg-pzSZWeZawYTRFjmKmVPbkfckxWcPYQ";
        //拼接推送的模版
        PushDTO pushDTO = new PushDTO();


        //用户的openId
        pushDTO.setTouser(openid);
        pushDTO.setTemplate_id(templateId);
        MiniprogramData miniprogram = new MiniprogramData();
        pushDTO.setMiniprogram(miniprogram);
        Map<String, TemplateData> data = new HashMap<>();
        data.put("thing9", new TemplateData("新婴儿奶瓶"));
        data.put("character_string1", new TemplateData("11231323"));
        data.put("amount24", new TemplateData("0.01"));
        data.put("time21", new TemplateData("2023-02-16"));
        pushDTO.setData(data);
        System.out.println("发送的模板" + data);
        Date date = new Date();
        System.out.println(DateUtils.format(date, DateUtils.DATE_TIME_PATTERN));
        PushBizService pushBizService = new PushBizService();
        ResponseEntity<String> stringResponseEntity = pushBizService.pushOneUser(pushDTO);

        System.out.println(stringResponseEntity);
    }


    /**
     * 查微信AcessToken,返回JSON值
     *
     * @param appId
     * @param appSecret
     * @return
     * @throws Exception
     */
    private String getAccessTokenJSON(String appId, String appSecret) throws Exception {
        String json = okHttpClient.newCall(
                new Request.Builder().url("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
                        + appId + "&secret=" + appSecret).build())
                .execute().body().string();
        JSONObject jsonObject = JSONObject.parseObject(json);
        Integer errcode = jsonObject.getInteger("errcode");
        if (errcode == null || errcode == 0) {
            return json;
        } else {
            Log.info("[微信 getAccessToken] 回复失败 回复报文:" + json);
            throw new AppServiceException(ExceptionDefinition.THIRD_PART_SERVICE_EXCEPTION);
        }
    }

}

到了这里,关于微信小程序——服务通知,发送订阅消息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序——订阅通知消息

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

    2024年02月13日
    浏览(52)
  • 微信公众号 - Java推送小程序订阅消息给用户_java 通过微信公众号发送订阅通知

    不啰嗦,我们直接开始! 本文使用体验版小程序进行调试。 1、登录微信公众平台 点开下面链接,使用微信扫码 微信公众平台 然后选择一个小程序并登录 2、在小程序后台找到Appid、AppSecret、Token、EncodingAESKey等参数 AppSecret忘记了可以自行重置 往下翻,在消息推送这儿能看到

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

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

    2024年04月16日
    浏览(53)
  • 如何为微信小程序添加订阅消息和推送通知功能

    为微信小程序添加订阅消息和推送通知功能是非常有用的,它可以让用户在重要的事件发生时及时地收到通知。在本文中,我们将详细介绍如何为微信小程序添加这两种功能。 一、订阅消息 订阅消息是一种新的消息类型,用户可以选择是否订阅它们。订阅消息一般用于向用

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

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

    2024年01月25日
    浏览(42)
  • uniapp+微信小程序获取openId,获取access_token,订阅消息模板,java后台发送消息

    1.前期准备 2.用户订阅消息 3.获取openId(uniapp) 4.获取access_token 5.发送消息 6.请求的代码Springboot(自己写有发送请求方法的可以不用看) 在微信公众号申请订阅消息 在公共模板这里选用模板, 模板种类跟小程序设置的类目有关,只有特殊的类目有长期订阅模板 类目可以在设

    2024年02月03日
    浏览(47)
  • 【小程序】微信小程序关联公众号(服务号)推送通知消息

    最近开发的一个小程序项目需要通过服务号来推送通知。但是在最开始开发小程序的时候并没有考虑到这个功能。 预备知识 : 小程序openid:小程序用户的唯一id 公众号openid:公众号用户的唯一id unionid:同一用户,对同一个微信开放平台下的不同应用,unionid是相同的 准备

    2024年01月18日
    浏览(45)
  • 微信小程序实现订阅消息功能(Node服务器篇)

            * 源码已经上传到资源处,需要的话点击跳转下载 |  源码下载         在上一篇内容当中在微信小程序中实现订阅消息功能,都在客户端(小程序)中来实现的,在客户端中模拟了服务器端来进行发送订阅消息的功能,那么本篇就将上一篇内容中仅在客户端中实现

    2024年02月03日
    浏览(64)
  • 微信小程序通过公众号服务号发送消息

    一、基础概念: 准备条件:      1、公众号和小程序必须在同一个公司主体下。      2、在公众号后台需要对小程序进程绑定操作。 公众号提供了两种消息,一种是订阅消息,一种是模板消息。 订阅消息需要用户主动订阅,然后才能接收消息,微信提供前端组件用于用户进

    2024年02月07日
    浏览(45)
  • 【微信小程序】使用 WebSocket 进行订阅操作、连接监听、接收到服务器的消息事件

    在微信小程序中使用 WebSocket 进行订阅操作,可以通过 wx.connectSocket 方法创建 WebSocket 连接,并通过相关事件处理函数进行订阅和数据处理。 以下是一个示例代码,演示了在微信小程序中使用 WebSocket 进行订阅: 在上述代码中,我们首先使用 wx.connectSocket 方法创建 WebSocket 连接

    2024年02月16日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包