微信公众号开发部署服务器
来源:互联网 发布:2017淘宝评价排序规则 编辑:程序博客网 时间:2024/05/16 10:30
个人觉得比较关键的一点就是Token了
由于项目是ssm框架,下面的代码是结合我的项目结构的,可以自行修改。
一、工具类
public class WeiXinSign { /** * 与接口配置信息中的Token要一致 * 这里写什么,在微信开发者后台那里Token就填什么 */ public static String TOKEN = "1234567890"; /** * 验证签名 * @param signature * @param timestamp * @param nonce * @return */ public static boolean checkSignature(String signature, String timestamp, String nonce) { String[] arr = new String[] { TOKEN, timestamp, nonce }; // 将token、timestamp、nonce三个参数进行字典排序 Arrays.sort(arr); StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } MessageDigest md = null; String tmpStr = null; try { md = MessageDigest.getInstance("SHA-1"); // 将三个参数字符串拼接成一个字符串进行sha1加密 byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } content = null; // 将sha1加密后的字符串可与signature对比 return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; } /** * 将字节数组转换为十六进制字符串 * * @param byteArray * @return */ private static String byteToStr(byte[] byteArray) { String strDigest = ""; for (int i = 0; i < byteArray.length; i++) { strDigest += byteToHexStr(byteArray[i]); } return strDigest; } /** * 将字节转换为十六进制字符串 * * @param mByte * @return */ private static String byteToHexStr(byte mByte) { char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0X0F]; tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr); return s; }}
二、controller类
@RequestMapping(value = "/wxSign",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) @ResponseBody public PrintWriter wxSign(HttpServletRequest request, HttpServletResponse response, HttpSession session){ // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 String signature = request.getParameter("signature"); // 时间戳,微信端给 String timestamp = request.getParameter("timestamp"); // 随机数,微信端给 String nonceStr = request.getParameter("nonce"); // 随机字符串,微信端给 String echostr = request.getParameter("echostr"); PrintWriter out = null; try { out = response.getWriter(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败 if (WeiXinSign.checkSignature(signature, timestamp, nonceStr)) { out.print(echostr); } } catch (IOException e) { e.printStackTrace(); } finally { out.close(); out = null; } return out; }
还需要按照要求下载一个文件放到项目服务器的根目录下。
访问路径为http://xxx.com/wxSign (服务器域名+方法名)
阅读全文
0 0
- 微信公众号开发部署服务器
- 微信公众号开发环境部署
- 微信开发 公众号接入服务器
- 微信公众号开发 flask后台的快速部署
- 微信公众号开发(1)--微信公众平台与后台服务器
- 微信公众开放平台开发04---百度BAE,java应用部署服务器,jetty了解
- 开发微信公众平台--新建新浪云sae部署服务器
- 微信开发(一)公众号接入服务器
- 微信公众号的开发之 服务器配置(一)
- 微信公众号开发443端口,本地服务器,小记
- 微信公众号开发验证服务器Token失败
- 微信公众号开发之服务器配置
- 微信公众号开发申请服务器资源
- 微信公众号开发1搭建php服务器
- 微信公众号开发-签名验证本地服务器方法
- 微信公众号开发流程(一)--自定义服务器
- 微信公众号开发 配置服务器URL,验证Token
- 微信公众号开发2-验证服务器有效性
- Thymeleaf教程 (三) 创建一个多语言的首页
- 如何解决error:execution failed for task app:transformclasseswithjarmerging
- kernel中的mempool机制
- ResNet, AlexNet, VGG, Inception: 理解各种卷积网络的结构
- Retrofit原理浅析
- 微信公众号开发部署服务器
- lesson2:掌握c++基本语法(vc++深入详解)
- 列表多选效果
- c++与java多态的区别
- oracle学习心得
- SQL DQL DML DDL DCL
- Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
- ros中的nodelet
- Spark的java开发环境实战