El mini programa WeChat uniapp + springboot implementa la notificación de servicio del mini programa
1. Lograr resultados
2. Selección de plantilla y juicio sobre el tipo de campo.
2.1 Activar mensajes de suscripción y seleccionar una plantilla
Si hace clic en Mensaje de suscripción para habilitar la suscripción de mensajes, aparecerá la siguiente página. La plantilla que utilicé esta vez es
月卡到期提醒
una plantilla. Simplemente haga clic para seleccionarla.
2.2 Ver tipos de campos de plantilla
TemplateId se usará más adelante, cópielo, haga clic en detalles para ver la información de la plantilla
2.3 Restricciones de consulta sobre los tipos de campo correspondientes
Descripción de la restricción de contenido del valor del parámetro del mensaje de suscripción
Nuestros campos son Character_string.DATA, tiempo y cosa, solo necesitamos seguir sus reglas.
Categoría de parámetro | Descripción de parámetros | Restricciones de valores de parámetros | ilustrar |
---|---|---|---|
cosa.DATOS | cosa | Dentro de 20 caracteres | Se puede combinar con caracteres, números, letras o símbolos chinos. |
número.DATOS | número | Número dentro de 32 dígitos | Sólo se permiten números, decimales. |
carta.DATOS | carta | Dentro de 32 caracteres | Solo cartas |
símbolo.DATOS | símbolo | Símbolo dentro de 5 dígitos | solo puedo firmar |
cadena_caracteres.DATOS | cadena | Números, letras o símbolos de hasta 32 dígitos | Se puede combinar con números, letras o símbolos. |
hora.DATOS | tiempo | Formato de hora de 24 horas (admite + año, mes y día), admite completar períodos de tiempo y los dos puntos de tiempo están conectados con el símbolo "~" | Por ejemplo: 15:01 o: 15:01 del 1 de octubre de 2019 |
Datos de fecha | fecha | Formato de año, mes y día (admite tiempo de +24 horas), admite completar períodos de tiempo y los dos puntos de tiempo están conectados con el símbolo "~" | Por ejemplo: 1 de octubre de 2019 o: 1 de octubre de 2019 15:01 |
cantidad.DATOS | Cantidad | 1 símbolo de moneda + números puros de hasta 10 dígitos, con decimales permitidos y "yuan" al final | Decimales permitidos |
número_teléfono.DATOS | Teléfono | Dentro de 17 dígitos, números, símbolos. | Número de teléfono, por ejemplo: +86-0766-66888866 |
número_auto.DATOS | placa | Dentro de los 8 dígitos, el primer y el último dígito pueden ser caracteres chinos y el resto pueden ser letras o números. | Número de matrícula: Guangdong A8Z888 |
nombre.DATOS | Nombre | Dentro de 10 caracteres chinos puros o dentro de 20 letras o símbolos puros | El nombre chino debe tener un máximo de 10 caracteres chinos; el nombre puro en inglés debe tener un máximo de 20 letras; una mezcla de chino y letras se contará como un nombre chino, dentro de un máximo de 10 caracteres |
frase.DATOS | personaje chino | Dentro de 5 caracteres chinos | Dentro de 5 caracteres chinos puros, por ejemplo: Entrega en curso |
enumeración.DATOS | valor de enumeración | Solo se pueden cargar valores de campo dentro del rango de valores de enumeración | Llame a la interfaz para obtener el valor de enumeración de referencia. |
3. vue front-end para autorización
Este código solo necesita colocarse en un método determinado y luego completar el template_id correspondiente.
wx.requestSubscribeMessage({
tmplIds: ['xxxx'],
success (res) {
console.log('接口调用成功的回调函数', res)
},
fail (err) {
console.log('接口调用失败的回调函数', err)
},
complete () {
console.log('接口调用结束的回调函数(调用成功、失败都会执行)')
}
})
Efecto de autorización
Después de hacer clic en Permitir, podemos enviar el mensaje al usuario (open_id)una vezSuscríbete a las noticias
4. El backend envía mensajes de suscripción a los usuarios suscritos.
4.1 Interfaz
PUBLICAR https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN
4.2 Parámetros de solicitud:
Recuerde verificar si se trata de una plantilla de mini programa o una plantilla de cuenta pública.
4.3 Escribir código de prueba
Lo principal es encapsular los datos de la plantilla y enviarlos a la interfaz.
No escribiré aquí el método para obtener accessToken.
Para obtenerlo, simplemente llame a esta interfaz y reemplace APPID y APPSECRET con el suyo propio. El valor de retorno contiene accessToken.
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
package com.admin;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.admin.domain.Card;
import com.admin.mapper.CardMapper;
import com.admin.util.WxUtils;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author zr
* @date 2023/6/20 15:23
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class ExpireNotifyTest {
@Autowired
private CardMapper cardMapper;
@Test
void name() {
Card card = cardMapper.selectById(10);
String today = DateUtil.formatDate(new Date());
Map map = new HashMap();
map.put("template_id","xxxx");
map.put("page","");//点击详细跳转小程序页面,不填就没有查看详情
map.put("touser","xxxx");//发送用户的open_id
//跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
map.put("miniprogram_state","developer");
map.put("lang","zh_CN");
Map data = new HashMap();
Map character_string1 = new HashMap();
character_string1.put("value",card.getCardNo());//15487517
Map time2 = new HashMap();
time2.put("value",card.getDoorValidEnd());//2023-06-20
Map thing3 = new HashMap();
thing3.put("value",card.getDoorValidEnd().compareTo(today)>0?"":"月卡已过期,请尽快延期");//月卡已过期,请尽快延期
data.put("character_string1",character_string1);
data.put("time2",time2);
data.put("thing3",thing3);
map.put("data",data);
String accessToken = WxUtils.getXcxAccessToken();//获取小程序的accessToken
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN";
String sendUrl = url.replace("ACCESS_TOKEN", accessToken);
String post = HttpUtil.post(sendUrl, JSONUtil.toJsonStr(map));
System.out.println(post);
}
}
5. Prueba
Porque en el Capítulo 3, a nuestro backend se le permitió llamar directamente al método de prueba una vez.