当前位置: 首页 > news >正文

最新互联网项目平台网站什么叫搭建平台

最新互联网项目平台网站,什么叫搭建平台,WordPress主题开源,企业邮箱免费版开通要搭建加密传输的微信公众号消息传输#xff0c;首先要在开发这平台下载一下微信加密的相关jar包#xff0c;并做一些准备。准备的步骤如下#xff1a; 1.打开开发者文档#xff0c;找到消息加减密---接入指引#xff0c;如下图所示#xff1a; 2.在页面底部找到实例…    要搭建加密传输的微信公众号消息传输首先要在开发这平台下载一下微信加密的相关jar包并做一些准备。准备的步骤如下 1.打开开发者文档找到消息加减密---接入指引如下图所示 2.在页面底部找到实例代码并下载解压下载的地方如下图所示 3.在解压的地方找到java版本并做如下准备 1将commons-codec-1.9.jar导入到项目中。 2将dist下的aes-jre1.6.jar导入到项目中。 3打开readme.txt按照他的指示操作。红色对勾的地方很重要。 要下载的东西就是下图标记的地方 这样准备工作就完成了可以进入正式的代码编写了。 代码部分的解释基本都放在注释中首先开用来核心控制的controller。内容如下 package org.calonlan.soulpower.controller;import java.io.IOException; import java.io.PrintWriter; import java.io.StringReader; import java.util.Map;import javax.annotation.Resource; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.calonlan.soulpower.service.WeiInfoService; import org.calonlan.soulpower.util.AesUtils; import org.calonlan.soulpower.util.MessageUtil; import org.calonlan.soulpower.util.SignUtil; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod;/*** author Administrator* 这个controller是用来处理消息的核心controller在这里有两个请求地址都为/sign的请求地址一个是用get方式用来* 做服务器和微信服务器之间的认证一个是post方式用来在服务器和微信服务器之间传递消息。*/ Controller RequestMapping(/core) public class CoreController {Resourceprivate WeiInfoService weiInfoService;/** 这个service大家可以不用管* 因为在我的项目中我是把所有的微信相关的配置信息都保存在一个weiInfo的类中了* 这里只会用到token。*//*** param request* param response* throws IOException* throws ServletException* 用来和微信服务器之间相互认证*/RequestMapping(method RequestMethod.GET, value /sign)public void goGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException {String signature request.getParameter(signature);// 获得signatureString timestamp request.getParameter(timestamp);// 获得timestampString nonce request.getParameter(nonce);// 获得nonceString echostr request.getParameter(echostr);// 获得echostr/** 上面的四个参数都是微信服务器发送过来的其中signature、timestamp、nonce是要参与服务器的验证的* 而echostr是在我们通过验证后返回给服务器告诉服务器我们就是要通讯 的那个远程服务器*/PrintWriter out response.getWriter();if (SignUtil.checkSignature(signature, timestamp, nonce,weiInfoService.get())) {//在SignUtil中使用checkSignature来进行验证代码附在后面。out.print(echostr);//验证通过后就把echostr返回给微信服务器。}out.close();out null;}RequestMapping(method RequestMethod.POST, value /sign)/*** * 用来和微信服务器通信* * */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding(UTF-8);response.setCharacterEncoding(UTF-8);/** 进行消息分发 *//* 首先定义一个空的回复消息 */String respMessage ;try {/* 从请求中获得xml格式的信息。并转化为map类型 */MapString, String requestMapSecret MessageUtil.parseXml(request);//从request中获得获得xml并解析代码附在后面/* 获得解密后的消息正文 */String mingwenXML AesUtils.descMessage(//用微信官方给的jar包中的AesUtils来对消息进行解密requestMapSecret.get(Encrypt),/* 加密的消息体 */request.getParameter(msg_signature),/* 请求中的消息签名 */request.getParameter(timestamp),/* 时间戳 */request.getParameter(nonce));/* 无序数列 *//* 将明文再次进行xml解析 */MapString, String requestMap MessageUtil.parseXml(new StringReader(mingwenXML));//将明文的xml再次解析后放入map中/** 获得用户发来的消息类型并做相应的处理 */String messageType requestMap.get(MsgType);System.out.println(messageType);/*处理不同格式的消息类型开始-------------------------------------------------------*/// 用户发来的是文本消息if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {System.out.println(requestMap.get(Content));}// 用户发来的是图片消息else if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {}// 用户发来地理位置信息else if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {}// 用户发来链接消息else if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {}// 用户发来音频消息else if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {}/** 事件推送的处理 */else if (messageType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {// 事件类型String eventType requestMap.get(Event);// 订阅if (eventType.equals(MessageUtil.REQ_MESSAGE_TYPE_SUBSCRIBE)) {}// 取消订阅else if (eventType.equals(MessageUtil.REQ_MESSAGE_TYPE_UNSUBSCRIBE)) {}// 点击按钮事件else if (eventType.equals(MessageUtil.REQ_MESSAGE_TYPE_CLICK)) {}}/*处理不同格式的消息类型介绍-------------------------------------------------------*//*对于不同类型的消息的处理网上有很多高手已经发表了很多文章了我自己也会总结一下不过不是在这里---------*/// 给返回的消息加密AesUtils.aescMessage(respMessage,request.getParameter(timestamp),request.getParameter(nonce));} catch (Exception e) {e.printStackTrace();}/*返回消息给微信服务器然后微信服务器把消息转发给用户···额貌似我们聊什么微信服务器都是可以截获的*/PrintWriter out response.getWriter();out.print(respMessage);out.close();} }SignUtil中的checkSignature代码如下 public static boolean checkSignature(String signature, String timestamp,String nonce, WeiInfo info) {/** 微信服务器发送过来的signature是通过某些处理然后进行SHA1加密的我们来用它发过来的信息自己生成一个signature* 然后两者之间进行比对一致的话我们就是伙伴不一致就拒绝它*/String[] arr new String[] { info.getToken(), 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 {/*进行sha1加密*/md MessageDigest.getInstance(SHA-1);byte[] digest md.digest(content.toString().getBytes());tmpStr byteToStr(digest);//将加密后的byte转化为16进制字符串这就是我们自己构造的signature} catch (NoSuchAlgorithmException e) {e.printStackTrace();}content null;return tmpStr ! null ? tmpStr.equals(signature.toUpperCase()) : false;//进行对比相同返回true不同返回false}private static String byteToStr(byte[] byteArray) {String strDigest ;for (int i 0; i byteArray.length; i) {strDigest byteToHexStr(byteArray[i]);//分别把没一个byte位转换成一个16进制字符代码见下面}return strDigest;}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;}AesUtils的具体代码 package org.calonlan.soulpower.util;import org.calonlan.soulpower.dao.impl.WeiInfoDaoImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class AesUtils {private static ApplicationContext applicationContext;/** 这里我直接使用的spring来读取weiInfo对象中的加解密密钥的内容大家可以不用这样直接把密钥放在这里就可以了* 也可以放在properties文件中读取更方便*/public static String descMessage(String encrypt, String msgSignature,String timestamp, String nonce) throws AesException {applicationContext new ClassPathXmlApplicationContext(config/application-context.xml);WeiInfoDaoImpl daoImpl (WeiInfoDaoImpl) applicationContext.getBean(weiInfoDao);String token daoImpl.get().getToken();//获得tokenString encodingAesKey daoImpl.get().getEncodingAesKey();//获得加解密密钥String appId daoImpl.get().getAppId();//获得appid这个在开发者模式下就能看到填写你自己的。String format xmlToUserName![CDATA[toUser]]/ToUserNameEncrypt![CDATA[%1$s]]/Encrypt/xml;String fromXML String.format(format, encrypt);WXBizMsgCrypt pc new WXBizMsgCrypt(token, encodingAesKey, appId);String result pc.decryptMsg(msgSignature, timestamp, nonce, fromXML);return result;}/*加密和解密类似就不做注释了*/public static String aescMessage(String replyMsg, String timestamp,String nonce) throws AesException {applicationContext new ClassPathXmlApplicationContext(config/application-context.xml);WeiInfoDaoImpl daoImpl (WeiInfoDaoImpl) applicationContext.getBean(weiInfoDao);String token daoImpl.get().getToken();String encodingAesKey daoImpl.get().getEncodingAesKey();String appId daoImpl.get().getAppId();WXBizMsgCrypt pc new WXBizMsgCrypt(token, encodingAesKey, appId);String mingwen pc.encryptMsg(replyMsg, timestamp, nonce);return mingwen;} }MessageUtil中的parseXml代码有两个一个是用来直接解析request中的xml一个是用来解析字符串类型的xml解析request中的xml代码 public static MapString, String parseXml(HttpServletRequest request)throws Exception {MapString, String map new HashMapString, String();InputStream inputStream request.getInputStream();SAXReader reader new SAXReader();//我用的是SAXReaderDocument document reader.read(inputStream);Element root document.getRootElement();SuppressWarnings(unchecked)ListElement elementList root.elements();for (Element e : elementList) {map.put(e.getName(), e.getText());}inputStream.close();inputStream null;return map;}解析字符串中的xml代码 public static MapString, String parseXml(StringReader readers) {MapString, String map new HashMapString, String();SAXReader reader new SAXReader();Document document null;try {InputSource inputSource new InputSource(readers);document reader.read(inputSource);} catch (DocumentException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}Element root document.getRootElement();SuppressWarnings(unchecked)ListElement elementList root.elements();for (Element e : elementList) {map.put(e.getName(), e.getText());}return map;}到这里构建就完成了可以用我们的服务器来和微信服务器进行密文的消息传递了。
http://www.sadfv.cn/news/18422/

相关文章:

  • 制作网站小程序正规的制作网页的公司
  • 与知名网站互连app开发哪家好
  • 海外网站cdn加速网络哪家公司最好
  • 电子商务网站建设的工具郑州人流医院哪家好
  • 杭州网站优化培训婴儿用品网站模板
  • wap网站建设开发广州做外贸网站
  • 非交互式网站备案珠海网站建设科速
  • 临汾做网站公司网站优化月总结
  • 做兼职比较好的网站有哪些各大网站开发的区块链
  • 中山一站式营销推广平台智能小区物业管理系统
  • 昆山网站建设培训学校静态网站有什么用
  • 重庆建设门户网站建设二手网站的建设费用包括
  • 益阳有专做网站的吗网站建设的可行性报告研究
  • 做cover用什么网站渭南网站建设电话
  • 道县网站建设google网站建设
  • 怎么让别人看到自己做的网站专科千万别学数字媒体应用技术
  • 食品安全网站建设顺义手机网站设计
  • 微信看视频打赏网站建设自建房外观设计网站推荐
  • pc访问手机网站跳转网页设计与制作教程 pdf下载
  • 免费行情软件app网站排行建搜索型网站
  • 网站建设公司 关于我们上海外企
  • 电子商务网站建设系统特点楚雄市网站建设公司
  • php网站开发和js网站建设具体工作有什么
  • 学校网站建设情况汇报苏州建设职业培训中心网站
  • 佛山网站建设有限公司包年seo和整站优化
  • 广州专业做网站公司有哪些装修设计网站哪家好
  • 什么网站可以做试题合同范本的网站
  • 做药材生意的网站flash网站设计实例
  • 江门站官网找人做网站需要交接什么
  • 做网站的北京北京海淀建设银行网点查询