,,,,,,,,,,当搭建好微信公众号开发环境后,先要和微信公众号建立联系。从本质上来说,微信公众号开发就是如何让自己的服务器与微信服务器进行交互的一个过程。
,,,,,,,,,,微信服务器就相当于一个转发服务器,终端(手机、垫等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器。应用服务器处理完毕后,将响应数据回发给微信服务器,微信服务器再将具体响应信息回复到微信应用终端。
通信协议为:HTTP
数据传输格式为:XML
具体的流程如下图所示:
来一张更加直观的图吧:
验证微信加密签名可以写成一个方法,放到一个工具类中,现将该方法贴出来。
公共静态布尔checkSignature(时间戳签名字符串标记,字符串,字符串,字符串nonce) {
,,,String [] arr=新String[]{令牌,时间戳,nonce};
,,,//将牌,时间戳,现时标志三个参数进行字典序排序
,,,Arrays.sort (arr);
,,,StringBuilder内容=new StringBuilder ();
,,,for (int i=0;我& lt;arr.length;我+ +){
,,,,,,,content.append (arr[我]);
,,,}
,,,MessageDigest md=零;
,,,字符串tmpStr=零;
,,,尝试{
,,,,,,,md=MessageDigest.getInstance (“SHA-1");
,,,,,,,//将三个参数字符串拼接成一个字符串进行sha1加密
,,,,,,,byte[]消化=md.digest (content.toString () .getBytes ());
,,,,,,,tmpStr=byteToStr(消化);
,,,}捕捉(NoSuchAlgorithmException e) {
,,,,,,,e.printStackTrace ();
,,,}
,,,内容=零;
,,,//将sha1加密后的字符串可与签名对比,标识该请求来源于微信
,,,还tmpStr !=零?tmpStr.equals (signature.toUpperCase()):假;
}
/* *
*将字节数组转换为十六进制字符串
*
中byteArray
* * @param @return
*/
私有静态字符串byteToStr (byte[]中byteArray) {
,,,字符串strDigest=啊?br/>,,,for (int i=0;我& lt;byteArray.length;我+ +){
,,,,,,,strDigest +=byteToHexStr(中byteArray[我]);
,,,}
,,,返回strDigest;
}
/* *
*将字节转换为十六进制字符串
*
* @param兆字节
* @return
*/
私有静态字符串byteToHexStr兆字节(字节){