Lors du développement du message push, le mini-programme doit d'abord demander un modèle. Lors de la première application, vous devez configurer certains paramètres. 1. Configurez l'URL du
serveur, le jeton, la clé secrète, la méthode de cryptage et le format des données.
Jeton est utilisé pour la vérification et la clé secrète est générée aléatoirement. C'est très bien. Je ne mentionnerai pas la méthode de cryptage. Le format des données doit être conforme à vos propres préférences. J'ai choisi json.
2. Créez une interface et écrivez une logique (on estime que les amis qui viennent vérifier les informations sont déjà tombés dans le piège. Oui, une fois la configuration ci-dessus configurée, vous devez suivre l'adresse URL fournie. WeChat enverra une demande puis interagissez avec vous pour prouver que vous avez fourni L'URL est correcte et disponible, sinon vous ne serez pas autorisé à soumettre la configuration !)
2.1. Outils
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.Interface de test
@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. Emballez simplement le projet sur le serveur. Peu importe que vous utilisiez nginx ou Tomcat, ou directement java -jar. Tant que la requête est traitée, 4. Configurez l'
URL du serveur qui n'a pas été renseignée dans le premier étape
et cliquez sur Soumettre directement.
A la fin de l'article, merci Brother Chicken ! ! !