利用百度云平台运行我们自己的服务端项目,在平台上线运行。利用这个项目对应的域名将其配置到微信公众平台,并填写token值。(这里的token值是我们自定义的一个字符串,它配置在服务端项目)在手机微信客户端搜索你的微信公众平台公众号(订阅号),当然通过二维码会更快速准确,呵呵。
下面我们先重服务器端开始。
进入百度云平台的管理控制台(请大家进入旧版--右上角):http://developer.baidu.com/dev点击创建应用,并创建一个手机web应用。
出现以下页面后,点击云环境:
创建域名,选择开发语言(我用的是Java),选着版本管理器(我用的是svn),点击确定:
等待后弹出提示创建成功后,点击确定,跳转到如下页面---------创建版本:
点击创建版本后,会出现两种选择,一种是在线创建项目,然后在线编辑发布,本人还是觉得第二种顺手,上传war包,即将本地建好的web项目发布为war包,然后上传,在上线,我们就以上传war包方式为例:这里我们就暂且停下:开始来编辑我们需要的web项目。
在eclipse中心建一个web项目(tomcat服务器)新建MainServer.java
需要导入的jar包:大家没有的可以到我的云盘去下载:点击打开链接
- package com.weixin.zfeng.server;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.security.MessageDigest;
- import java.util.Arrays;
- import java.util.Date;
- import javax.servlet.ServletException;
- import javax.servlet.ServletInputStream;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.dom4j.Document;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import com.weixin.zfeng.utils.Weather;
- public class MainServer extends HttpServlet{
- //这里是你定义的token值
- private final String TOKEN = "haha";
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- //取出随机字符串
- String echostr=req.getParameter("echostr");
- if(null==echostr||echostr.isEmpty()){
- responseMsg(req,resp);
- }else{
- if(this.checkSignature(req)){
- resp.getWriter().print(echostr);
- }else{
- resp.getWriter().print("");
- }
- }
- }
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- doPost(req, resp);
- }
- //回复
- public void responseMsg(HttpServletRequest req,HttpServletResponse resp) throws IOException{
- String postStr=null;
- try{
- postStr=this.readStreamParameter(req.getInputStream());
- }catch(Exception e){
- e.printStackTrace();
- }
- //System.out.println(postStr);
- if (null!=postStr&&!postStr.isEmpty()){
- Document document=null;
- try{
- document = DocumentHelper.parseText(postStr);
- if(null==document){
- resp.getWriter().print("");
- return;
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- Element root=document.getRootElement();
- String fromUsername = root.elementText("FromUserName");
- String toUsername = root.elementText("ToUserName");
- String keyword = root.elementTextTrim("Content");
- String time = new Date().getTime()+"";
- String textTpl = ""+
- ""+
- ""+
- "%3$s"+
- ""+
- ""+
- "0"+
- "";
- //发送消息类型
- String msgType = "text";
- String contentStr = "";
- String resultStr="";//返回消息
- //关注订阅号后,返回的提示
- if(null==keyword||keyword.equals("")){
- contentStr = "hi,how are you! I'm server and with baiduyun";
- }
- //微信客户端发送time,服务器解析到后返回当前时间
- else if(keyword.equals("time")){
- contentStr = new Date().toString();
- }
- resultStr = String.format(textTpl, fromUsername, toUsername, time, msgType, contentStr+"---zhaofeng");
- resp.getWriter().print(resultStr);
- }else {
- resp.getWriter().print("");
- }
- resp.getWriter().flush();
- resp.getWriter().close();
- }
- //检查请求
- public boolean checkSignature(HttpServletRequest request){
- //这里是微信进行安全验证的四个值,由于token为明文,所以前用前三个值进行加密计算后的值与token对比(不具体描述)
- String signature = request.getParameter("signature");
- String timestamp = request.getParameter("timestamp");
- String nonce = request.getParameter("nonce");
- String token=TOKEN;
- String[] tmpArr={token,timestamp,nonce};
- Arrays.sort(tmpArr);
- String tmpStr=this.ArrayToString(tmpArr);
- tmpStr=this.SHA1Encode(tmpStr);
- if(tmpStr.equalsIgnoreCase(signature)){
- return true;
- }else{
- return false;
- }
- }
- public String SHA1Encode(String sourceString) {
- String resultString = null;
- try {
- resultString = new String(sourceString);
- MessageDigest md = MessageDigest.getInstance("SHA-1");
- resultString = byte2hexString(md.digest(resultString.getBytes()));
- } catch (Exception ex) {
- }
- return resultString;
- }
- private String byte2hexString(byte[] bytes) {
- StringBuffer buf = new StringBuffer(bytes.length * 2);
- for (int i = 0; i
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录