1. 程式人生 > >《初識Java微信公眾號開發》 學習中遇到的困難

《初識Java微信公眾號開發》 學習中遇到的困難

.cn spa 變量名 es2017 sha1 [] encoding ted 沒有

前一段時間無聊的時候,在慕課網上自學了一點點微信公眾號開發(受學姐威脅)。

慕課網教程的地址:http://www.imooc.com/learn/368


畢竟是免費的課程,不可能講的那麽詳細。所以我吧我遇到的問題跟大家分享一下。

這是我照著課程敲的代碼(IDE是Eclipse): https://github.com/Zuosy/WeiXin 發到github上面了。

為了這個,我還專門到廖大的網站上學了一遍Git。

廖大的Git教程傳送們:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000


  • 那個映射工具不見尿

不見了,我就用了另一個映射工具,名字叫natapp。米納桑可以自行百度一下,就有上面還有圖文教程。

因為是玩玩,開個免費的就行了。這個工具不會超時,不錯的。

發個圖片秀一下:

技術分享

技術分享

技術分享

  • 基本配置token驗證失敗

主要的問題是老畢沒有分享sha1加密算法。百度的可能百度到假的“傻一”加密算法。

“傻一”加密算法的傳送門:http://www.cnblogs.com/blackdeng/p/6060781.html

防止代碼丟失,我貼出來

傻一加密算法工具類:

 1 package org.fc.Util;
 2 
 3 import java.security.MessageDigest;
 4
import java.security.NoSuchAlgorithmException; 5 import java.util.Arrays; 6 7 import com.sun.mail.handlers.message_rfc822; 8 9 public class SignUtil { 10 11 private static String token="XXXXXX"; 12 13 /** 14 * 傳入三個參數以及微信的token(靜態自己設定)驗證, 15 * @param signature 簽名用來核實最後的結果是否一致
16 * @param timestamp 時間標記 17 * @param nonce 隨機數字標記 18 * @return 一個布爾值確定最後加密得到的是否與signature一致 19 */ 20 public static boolean checkSignature(String signature, 21 String timestamp,String nonce){ 22 //將傳入參數變成一個String數組然後進行字典排序 23 String[] arr=new String[]{token,timestamp,nonce}; 24 Arrays.sort(arr); 25 //創建一個對象儲存排序後三個String的結合體 26 StringBuilder content=new StringBuilder(); 27 for(int i=0;i<arr.length;i++){ 28 content.append(arr[i]); 29 } 30 31 32 //啟動sha1加密法的工具 33 MessageDigest md=null; 34 String tmpStr=null; 35 try { 36 md=MessageDigest.getInstance("SHA-1"); 37 //md.digest()方法必須作用於字節數組 38 byte[] digest=md.digest(content.toString().getBytes()); 39 //將字節數組弄成字符串 40 tmpStr=byteToStr(digest); 41 } catch (NoSuchAlgorithmException e) { 42 // TODO Auto-generated catch block 43 e.printStackTrace(); 44 } 45 content=null; 46 47 return tmpStr!=null?tmpStr.equals(signature.toUpperCase()):false; 48 49 } 50 51 52 /** 53 * 將字節加工然後轉化成字符串 54 * @param digest 55 * @return 56 */ 57 private static String byteToStr(byte[] digest){ 58 String strDigest=""; 59 for(int i=0;i<digest.length;i++){ 60 //將取得字符的二進制碼轉化為16進制碼的的碼數字符串 61 strDigest+=byteToHexStr(digest[i]); 62 } 63 return strDigest; 64 } 65 66 /** 67 * 把每個字節加工成一個16位的字符串 68 * @param b 69 * @return 70 */ 71 public static String byteToHexStr(byte b){ 72 //轉位數參照表 73 char[] Digit= {‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘}; 74 75 76 //位操作把2進制轉化為16進制 77 char[] tempArr=new char[2]; 78 tempArr[0]=Digit[(b>>>4)&0X0F];//XXXX&1111那麽得到的還是XXXX 79 tempArr[1]=Digit[b&0X0F];//XXXX&1111那麽得到的還是XXXX 80 81 //得到進制碼的字符串 82 String s=new String(tempArr); 83 return s; 84 } 85 }

這個是好用的,可以直接替換老畢的CheckUtil 就行了。

  • XStream報錯

缺少xmlpull的jar包

傳送門: http://blog.csdn.net/ljg888/article/details/7711852

其實那些jar包,到網上都能下載,我發的gitbug項目裏面應該都已經有了。

  • 中文亂碼問題

這個是我粗心導致的。

1 response.setCharacterEncoding("UTF-8");

這行代碼一定要寫在doPost方法的第一行。

  • 註意大小寫

註意textMessage類裏面的屬性(變量名) 一定要註意大小寫。否則封裝成xml的時候你就會打出GG。


這是我在慕課網上發的手記:http://www.imooc.com/article/20238

不會用慕課網上的手記,別舉報我抄襲啊。

《初識Java微信公眾號開發》 學習中遇到的困難