Java微信二次開(kāi)發(fā)(一) Java微信請(qǐng)求驗(yàn)證功能
準(zhǔn)備用Java做一個(gè)微信二次開(kāi)發(fā)項(xiàng)目,把流程寫(xiě)在這里吧。
第一篇,做微信請(qǐng)求驗(yàn)證
需要導(dǎo)入庫(kù):servlet-api.jar
第一步:新建包c(diǎn)om.wtz.service,新建類(lèi)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:微信請(qǐng)求驗(yàn)證類(lèi)</p> */ public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("get請(qǐng)求。。。。。。"); //1.獲得微信簽名的加密字符串 String signature = request.getParameter("signature"); //2.獲得時(shí)間戳信息 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("獲得時(shí)間戳信息:"+timestamp); System.out.println("獲得隨機(jī)數(shù):"+nonce); System.out.println("獲得隨機(jī)字符串:"+echostr); PrintWriter out = response.getWriter(); //驗(yàn)證請(qǐng)求確認(rèn)成功原樣返回echostr參數(shù)內(nèi)容,則接入生效,成為開(kāi)發(fā)者成功,否則失敗 if(ValidationUtil.checkSignature(signature, timestamp, nonce)){ out.print(echostr); } out.close(); out = null; } }
第二步:新建包c(diǎn)om.wtz.util,新建類(lèi)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:微信請(qǐng)求校驗(yàn)工具類(lèi)</p> */ public class ValidationUtil { private static String token = "wangtianze"; public static boolean checkSignature(String signature,String timestamp,String nonce){ //1.將token,timestamp,nonce三個(gè)參數(shù)進(jìn)行排序 String[] str = new String[]{token,timestamp,nonce}; Arrays.sort(str); //2.將三個(gè)參數(shù)字符串拼接成一個(gè)字符串 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; } /** * 將一個(gè)字節(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; } }
第一天就做了這些,完成了微信請(qǐng)求驗(yàn)證的功能。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot使用zxing實(shí)現(xiàn)二維碼生成和解析
ZXing支持各種條形碼,二維碼掃描,由多個(gè)模塊組成,?而且支持PC端,移動(dòng)端,本文將利用zxing實(shí)現(xiàn)二維碼生成和解析,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10Java 中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解
這篇文章主要介紹了Java 中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能掌握這部分知識(shí),需要的朋友可以參考下2017-09-09利用MyBatis-Plus靈活處理JSON字段的技巧與最佳實(shí)踐
這篇文章主要給大家介紹了關(guān)于利用MyBatis-Plus靈活處理JSON字段的技巧與最佳實(shí)踐,Mybatis-Plus可以很方便地處理JSON字段,在實(shí)體類(lèi)中可以使用@JSONField注解來(lái)標(biāo)記JSON字段,需要的朋友可以參考下2024-07-07java實(shí)現(xiàn)肯德基收銀系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)肯德基收銀系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05Java對(duì)象不使用時(shí)賦值null的意義詳解
這篇文章主要介紹了java對(duì)象不再使用時(shí)賦值null的意義,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03SpringMVC使用JsonView針對(duì)統(tǒng)一實(shí)體返回不同信息
這篇文章主要為大家介紹了SpringMVC使用JsonView針對(duì)統(tǒng)一實(shí)體返回不同信息,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03關(guān)于springboot配置druid數(shù)據(jù)源不生效問(wèn)題(踩坑記)
今天日常跟著網(wǎng)課學(xué)習(xí),學(xué)到了整合druid數(shù)據(jù)源,遇到了好幾個(gè)坑,希望這篇文章可以幫助一些和我一樣踩坑的人2021-09-09java整數(shù)與byte數(shù)組的轉(zhuǎn)換實(shí)現(xiàn)代碼
這篇文章主要介紹了java整數(shù)與byte數(shù)組的轉(zhuǎn)換實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-07-07