Mensaje de suscripción de configuración de desarrollo de mini programa push [versión java]

Al desarrollar el envío de mensajes, el miniprograma debe solicitar una plantilla primero. Al solicitarlo por primera vez, debe configurar algunos parámetros: 1. Configure
Insertar descripción de la imagen aquí
la URL del servidor, el token, la clave secreta, el método de cifrado y el formato de datos
Insertar descripción de la imagen aquí
. se utiliza para la verificación y la clave secreta se genera aleatoriamente. Está bien. No mencionaré el método de cifrado. El formato de datos debe ser de acuerdo con sus propias preferencias. Elegí json.
2. Cree una interfaz y escriba la lógica (se estima que los amigos que vienen a verificar la información ya han caído en la trampa. Sí, después de configurar la configuración anterior, debe seguir la dirección URL proporcionada. WeChat enviará una solicitud y luego interactuar con usted para demostrar que proporcionó la URL es correcta y está disponible, de lo contrario no se le permitirá enviar la configuración)
2.1. Herramientas

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class CheckUtils {
    
    

	private static String token = "mote"; // 定义Token 务必与服务器保持一致

	/**
	 * 验证签名
	 *
	 * @param signature
	 * @param timestamp
	 * @param nonce
	 * @return
	 */
	public static boolean checkSignature(String signature, String timestamp,
			String nonce) {
    
    

		// 将token、timestamp、nonce三个参数进行字典排序
		String[] arr = new String[] {
    
     token, timestamp, nonce };
		Arrays.sort(arr);

		// 将三个参数字符串拼接成一个字符串
		StringBuilder content = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {
    
    
			content.append(arr[i]);
		}
		try {
    
    
			//获取加密工具
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			// 对拼接好的字符串进行sha1加密
			byte[] digest = md.digest(content.toString().getBytes());
			String tmpStr = byteToStr(digest);
			//获得加密后的字符串与signature对比
			return tmpStr != null ? tmpStr.equals(signature.toUpperCase()): false;
		} catch (NoSuchAlgorithmException e) {
    
    
			e.printStackTrace();
		}
		return false;
	}

	private static String byteToStr(byte[] byteArray) {
    
    
		String strDigest = "";
		for (int i = 0; i < byteArray.length; i++) {
    
    
			strDigest += byteToHexStr(byteArray[i]);
		}
		return strDigest;
	}

	private static String byteToHexStr(byte mByte) {
    
    
		char[] Digit = {
    
     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
				'B', 'C', 'D', 'E', 'F' };
		char[] tempArr = new char[2];
		tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
		tempArr[1] = Digit[mByte & 0X0F];
		String s = new String(tempArr);
		return s;
	}

}

2.2 Interfaz de prueba

@RestController
@RequestMapping("/wxPush")
public class Controller {
    
    
    @GetMapping
    @ResponseBody
    public void openPushMsg(HttpServletRequest request,
                            HttpServletResponse response) {
    
    

        // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
        String signature = request.getParameter("signature");
        // 时间戳
        String timestamp = request.getParameter("timestamp");
        // 随机数
        String nonce = request.getParameter("nonce");
        // 随机字符串
        String echostr = request.getParameter("echostr");

        PrintWriter out = null;
        try {
    
    
            out = response.getWriter();
            if (CheckUtils.checkSignature(signature, timestamp, nonce)) {
    
    
                out.print(echostr);
                out.flush();
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            out.close();
        }

    }

}

3. Simplemente empaquete el proyecto en el servidor. No importa si usa nginx o tomcat, o directamente java -jar. Mientras la solicitud se complete, 4. Configure la
URL del servidor que no se completó en la primera paso
Insertar descripción de la imagen aquí
y haga clic en enviar directamente.
Insertar descripción de la imagen aquí

Al final del artículo, ¡gracias Hermano Pollo! ! !

Supongo que te gusta

Origin blog.csdn.net/qq_45699784/article/details/121790518
Recomendado
Clasificación