结合百度云平台和微信公众平台进行开发(一)

时间:2022-09-22 19:30:32

    套话大话我就不说了,网上一大堆,我们就直接进入正题吧,相信对百度云平台和微信公众平台没有了解的也不会关注这篇文章。

上面的标题到底是个什么意思呢?下面让我们一步一步来完成一个测试小项目。

结合百度云平台和微信公众平台进行开发(一)两者是怎样结合的?

利用百度云平台运行我们自己的服务端项目,在平台上线运行。利用这个项目对应的域名将其配置到微信公众平台,并填写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 = "<xml>"+  
                        "<ToUserName><![CDATA[%1$s]]></ToUserName>"+  
                        "<FromUserName><![CDATA[%2$s]]></FromUserName>"+  
                        "<CreateTime>%3$s</CreateTime>"+  
                        "<MsgType><![CDATA[%4$s]]></MsgType>"+  
                        "<Content><![CDATA[%5$s]]></Content>"+  
                        "<FuncFlag>0</FuncFlag>"+  
                        "</xml>";               
            
            
            //发送消息类型
            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 < bytes.length; i++) {  
            if (((int) bytes[i] & 0xff) < 0x10) {  
                buf.append("0");  
            }  
            buf.append(Long.toString((int) bytes[i] & 0xff, 16));  
        }  
        return buf.toString().toUpperCase();  
	}

	//
    public String ArrayToString(String [] arr){  
        StringBuffer bf = new StringBuffer();  
        for(int i = 0; i < arr.length; i++){  
         bf.append(arr[i]);  
        }  
        return bf.toString();  
    }  
  
    //流中读取数据
    public String readStreamParameter(ServletInputStream in){  
        StringBuilder buffer = new StringBuilder();  
        BufferedReader reader=null;  
        try{  
            reader = new BufferedReader(new InputStreamReader(in));  
            String line=null;  
            while((line = reader.readLine())!=null){  
                buffer.append(line);  
            }  
        }catch(Exception e){  
            e.printStackTrace();  
        }finally{  
            if(null!=reader){  
                try {  
                    reader.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
        return buffer.toString();  
    }  
}
这里是一个最基本的骨架代码,大家可以在上面进行跟多丰富的扩展。接着我们将项目导出为war包。接着就是刚刚说到的上传war包了,这里就不再讲了。上传成功后点击上线(哦这里有个下提示,当然这里不存在,免费用户每次只能上传50M以内哦),等待提示“代码已生效”后,出现:

结合百度云平台和微信公众平台进行开发(一)

接着我们就应该配置微信公众平台了:(申请注册微信公众平台要求比较严格,需要审核几天到N天不等)。https://mp.weixin.qq.com/

前不久我是借用别个的账号进行测试的,我的公众号都几天了还没有通过,哎~所以这里没法给大家截图。其实微信里边配置很简单,就是一个访问项目的域名,和一个token值,填正确这两个后就可以确定了,(选择功能---高级功能---开发者模式---成为开发者----填写---提交(成功)---开启)

然后就是关注账号进行测试了。我的上一个测试用的是return这个号,大家关注后发送time试下效果(相同代码)

这里的域名就是你创建web项目时写的http://mytestserverforweixin.duapp.com/MainServer注意这里并不是完全正确的域名,还需要在前面加上你的版本号:http://1.mytestserverforweixin.duapp.com/MainServer

填写后并提交成功,然后开启。

谢谢大家!结合百度云平台和微信公众平台进行开发(一)





mytestserverforweixin.duapp.com
mytestserverforweixin.duapp.com