上次讲到了如何开发微信公众平台和关于内网穿透的一些知识点,那个是开发微信公众号的重要一步。
书接上一回,把基本的东西搞好之后就可以准备开发微信公众号,在开发的过程中我们先要测试,当打开电脑,第一步就是把之前的东西准备号,请看关于开发公众号平台的测试与运营 上。
登录公众号,打开设置与开发>开发者工具>公众平台测试账号,
之后你就能看见测试号信息,记住appID、appsecret,还有接口配置信息的URL、token在后面在开发工具中会用到
在接口配置信息中,打开消息接口信息使用指南, 下滑找到用户管理,点击进入用户标签管理,会看到接口调用请求协议,我们先找到,后面会用到。
铺垫准备就绪后,我们打开开发软件,我用的是MyEclipse,打开创建两个.java文件,放入两个插件、MyRequest.java、SHA1.java
上面说创建两个.java文件,打开其中一个,我这里是Test.java,编写代码
package cn.gd;
import com.alibaba.fastjson.JSONObject;
public class Test {
public static String getToken(){
//接口请求四要素
//一、地址(URL)
String url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
//二、请求参数
String appid="wx1bf8211edc20bf77";
String appsecret="235fa1d985d938bce40d659e5ffae1e7";
url=url.replace("APPID",appid).replace("APPSECRET",appsecret);
//3请求方式(GET/POST)
String r=MyRequest.get(url);
JSONObject json=JSONObject.parseObject(r);//把json格式的字符串转化为json对象
String at=json.getString("access_token");//
//4返回值
//System.out.println(at);
return at;
}
public static void main(String[]args){
//用接口四要素构建请求获取所有关注用户的功能
String url="https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID";
String at=getToken();
url=url.replace("ACCESS_TOKEN",at).replace("NEXT_OPENID","");
String r=MyRequest.get(url);
JSONObject json=JSONObject.parseObject(r);//把JSON格式的字符串转化为JSON对象
System.out.println(json);
//输出openid列表
}
把上面提到的公众号的appID、appsecret、url(请求协议)填写在其中,文件lib中的五个插件放到,WebRoot中
打开weixin.java编写源代码
package cn.gd;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Weixin")
public class Weixin extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Enumeration<String> names=request.getParameterNames();//拿到全部的信息名称集合
while(names.hasMoreElements()){
String key=names.nextElement();
System.out.println(key+"\t"+request.getParameter(key));
}
//验证过程Start***********************************************
String signature=request.getParameter("signature");//从网络上传来的
String echostr =request.getParameter("echostr");//从网络上传来
String timestamp=request.getParameter("timestamp");
String nonce=request.getParameter("nonce");
String token="goodgoodstudy";//注意,这个字符串不是在网络上传过来的,而是在后台设置好的,必须一致
boolean result=true;//假设是微信来的信息
//1)将token,timestamp,nonce三个参数进行字典排序
ArrayList<String> list=new ArrayList<String>();//准备一个空的字符串列表,用作排序的容器
list.add(token);list.add(timestamp);list.add(nonce);//把三个准备排序的字符串装入容器
Collections.sort(list);//执行排序
//2)将三个参数字符串拼接成一个字符串进行sha1加密
String sorted=list.get(0)+list.get(1)+list.get(2);//按顺序拼接
String s2=SHA1.encode(sorted);//加密生成签名s2
//3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
result=s2.equals(signature);
//验证过程stop**************************************************
PrintWriter out =response.getWriter();
if(result){//如果验证成功,则返回echostr
out.print(echostr);
}else{//否则说明这不是来自微信的请求
System.out.println("参数不对");
out.print("非法来源,已经被记录,ip="+request.getRemoteAddr());
}
//out.print(request.getParameter("echostr"));
out.flush();
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
编写代码的过程中注意书写规范,不然很容易出错,这期文章到这里,下期见。