《初识Java微信公众号开发》 学习中遇到的困难

前一段时间无聊的时候,在慕课网上自学了一点点微信公众号开发(受学姐威胁)。

慕课网教程的地址:http://www.imooc.com/learn/368 


毕竟是免费的课程,不可能讲的那么详细。所以我吧我遇到的问题跟大家分享一下。

这是我照着课程敲的代码(IDE是Eclipse): https://github.com/Zuosy/WeiXin 发到github上面了。

为了这个,我还专门到廖大的网站上学了一遍Git。

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


  • 那个映射工具不见尿

不见了,我就用了另一个映射工具,名字叫natapp。米纳桑可以自行百度一下,就有上面还有图文教程。

因为是玩玩,开个免费的就行了。这个工具不会超时,不错的。

发个图片秀一下:

《初识Java微信公众号开发》 学习中遇到的困难

《初识Java微信公众号开发》 学习中遇到的困难

《初识Java微信公众号开发》 学习中遇到的困难

  • 基本配置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微信公众号开发》 学习中遇到的困难

上一篇:数据库中的左连接和右连接的区别


下一篇:js闭包