百度雲和微信賬號接入
利用百度雲平台運行我們自己的服務端項目,在平台上線運行。利用這個項目對應的域名將其配置到微信公眾平台,並填寫token值。(這裏的token值是我們自定義的一個字符串,它配置在服務端項目)在手機微信客戶端搜索你的微信公眾平台公眾號(訂閱號),當然通過二維碼會更快速準確,嗬嗬。
下麵我們先重服務器端開始。
進入百度雲平台的管理控製台(請大家進入舊版--右上角):https://developer.baidu.com/dev點擊創建應用,並創建一個手機web應用。
出現以下頁麵後,點擊雲環境:
創建域名,選擇開發語言(我用的是Java),選著版本管理器(我用的是svn),點擊確定:
等待後彈出提示創建成功後,點擊確定,跳轉到如下頁麵---------創建版本:
點擊創建版本後,會出現兩種選擇,一種是在線創建項目,然後在線編輯發布,本人還是覺得第二種順手,上傳war包,即將本地建好的web項目發布為war包,然後上傳,在上線,我們就以上傳war包方式為例:這裏我們就暫且停下:開始來編輯我們需要的web項目。
在eclipse中心建一個web項目(tomcat服務器)新建MainServer.java
需要導入的jar包:大家沒有的可以到我的雲盤去下載:點擊打開鏈接
- <span style="font-family:SimHei;font-size:12px;">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();
- }
- }
- </span>
接著我們就應該配置微信公眾平台了:(申請注冊微信公眾平台要求比較嚴格,需要審核幾天到N天不等)。https://mp.weixin.qq.com/
前不久我是借用別個的賬號進行測試的,我的公眾號都幾天了還沒有通過,哎~所以這裏沒法給大家截圖。其實微信裏邊配置很簡單,就是一個訪問項目的域名,和一個token值,填正確這兩個後就可以確定了,然後就是關注賬號進行測試了。我的上一個測試用的是return這個號,大家關注後發送time試下效果(相同代碼)
這裏的域名就是你創建web項目時寫的mytestserverforweixin.duapp.com注意這裏並不是完全正確的域名,還需要在前麵加上你的版本號:1.mytestserverforweixin.duapp.com。希望過幾天我的公眾號能夠通過,
到時候給大家截兩張圖更好。
最後更新:2017-04-03 12:53:44