Java微信二次開發(fā)(一) Java微信請求驗證功能
準(zhǔn)備用Java做一個微信二次開發(fā)項目,把流程寫在這里吧。
第一篇,做微信請求驗證
需要導(dǎo)入庫:servlet-api.jar
第一步:新建包com.wtz.service,新建類LoginServlet.java
package com.wtz.service;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wtz.util.ValidationUtil;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月17日 下午8:11:32
* <p>version:1.0</p>
* <p>description:微信請求驗證類</p>
*/
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("get請求。。。。。。");
//1.獲得微信簽名的加密字符串
String signature = request.getParameter("signature");
//2.獲得時間戳信息
String timestamp = request.getParameter("timestamp");
//3.獲得隨機(jī)數(shù)
String nonce = request.getParameter("nonce");
//4.獲得隨機(jī)字符串
String echostr = request.getParameter("echostr");
System.out.println("獲得微信簽名的加密字符串:"+signature);
System.out.println("獲得時間戳信息:"+timestamp);
System.out.println("獲得隨機(jī)數(shù):"+nonce);
System.out.println("獲得隨機(jī)字符串:"+echostr);
PrintWriter out = response.getWriter();
//驗證請求確認(rèn)成功原樣返回echostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則失敗
if(ValidationUtil.checkSignature(signature, timestamp, nonce)){
out.print(echostr);
}
out.close();
out = null;
}
}
第二步:新建包com.wtz.util,新建類Validation.java
package com.wtz.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* @author wangtianze QQ:864620012
* @date 2017年4月17日 下午8:35:57
* <p>version:1.0</p>
* <p>description:微信請求校驗工具類</p>
*/
public class ValidationUtil {
private static String token = "wangtianze";
public static boolean checkSignature(String signature,String timestamp,String nonce){
//1.將token,timestamp,nonce三個參數(shù)進(jìn)行排序
String[] str = new String[]{token,timestamp,nonce};
Arrays.sort(str);
//2.將三個參數(shù)字符串拼接成一個字符串
StringBuilder buff = new StringBuilder();
for(int i=0;i<buff.length();i++){
buff.append(str[i]);
}
//3.進(jìn)行sha1加密
MessageDigest md = null;
String result = "";
try {
md = MessageDigest.getInstance("SHA-1");
byte[] data = md.digest(buff.toString().getBytes());
//將字節(jié)數(shù)組轉(zhuǎn)換成字符串
result = bytesToString(data);
System.out.println("加密后的字符串為:"+result);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result!=null?(result.equals(signature.toUpperCase())):false;
}
/**
* 將字節(jié)數(shù)組轉(zhuǎn)換成十六進(jìn)制字符串
* @param byteArray
* @return
*/
private static String bytesToString(byte[] byteArray){
String stringDigest = "";
for(int i=0;i<stringDigest.length();i++){
stringDigest += byteToHexString(byteArray[i]);
}
return stringDigest;
}
/**
* 將一個字節(jié)轉(zhuǎn)換為十六進(jìn)制字符串
* @param mByte
* @return
*/
private static String byteToHexString(byte mByte){
char[] digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] temp = new char[2];
temp[0] = digit[(mByte>>>4) & 0X0F];
temp[1] = digit[mByte & 0X0F];
String str = new String(temp);
return str;
}
}
第一天就做了這些,完成了微信請求驗證的功能。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Redis中高并發(fā)讀寫性能的深度解析與優(yōu)化
Redis 作為一款高性能的內(nèi)存數(shù)據(jù)庫,廣泛應(yīng)用于緩存、消息隊列、實時統(tǒng)計等場景,本文將深入探討 Redis 的讀寫并發(fā)能力,感興趣的小伙伴可以了解下2025-03-03
java 枚舉類定義靜態(tài)valueOf(java.lang.String)方法的問題及解決
這篇文章主要介紹了java 枚舉類定義靜態(tài)valueOf(java.lang.String)方法的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java Swing實現(xiàn)餐廳點餐系統(tǒng)源碼(收藏版)
這篇文章主要介紹了Java Swing實現(xiàn)餐廳點餐系統(tǒng)源碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
Springboot使用Redis中ZSetOperations實現(xiàn)博客訪問量
在日常的網(wǎng)站使用中,經(jīng)常會碰到頁面的訪問量,本文主要介紹了Springboot使用Redis中ZSetOperations實現(xiàn)博客訪問量,具有一定的參考價值,感興趣的可以了解一下2024-01-01
SpringMVC中Model和ModelAndView的EL表達(dá)式取值方法
下面小編就為大家分享一篇SpringMVC中Model和ModelAndView的EL表達(dá)式取值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
JVM內(nèi)存區(qū)域劃分相關(guān)原理詳解
這篇文章主要介紹了JVM內(nèi)存區(qū)域劃分相關(guān)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
java開發(fā)中使用IDEA活動模板快速增加注釋的方法
這篇文章主要介紹了java開發(fā)中使用IDEA活動模板快速增加注釋,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Java各種鎖在工作中使用場景和細(xì)節(jié)經(jīng)驗總結(jié)
本章主要說一說鎖在工作中的使用場景,主要以 synchronized 和 CountDownLatch 為例,會分別描述一下這兩種鎖的使用場景和姿勢2022-03-03

