前言:
近期,团队需要做微信系列的东西。我表示是拒绝的。因为,因为微信文档真的辣鸡,就之前做微信支付接口的时候就已经让小编对微信表示彻彻底底的绝望。本着绝望的心态,不想理微信了。TMD,这学期居然学社交网络这就算了,上课老师说没有太多的书可以选择,就选了这个微信应用开发的书。心理--千万匹草泥马奔腾而过。。。哎,本着既来之则安之的想法,就做做这个微信开发吧!(主要是想给我"女儿"做下讲解)
开发前准备:
ngrok:
首先,小编穷,穷的响叮当,虽然有自己的云服务器。但是小编也懒,不喜欢改一下丢服务器。所以本着又穷又懒的我,选择了一个叫ngrok的玩意!
下载地址:https://ngrok.com/download (这时wind64位的。如果不是这个系统的也可以自行选择!)
下载好后直接解压后,放到随便一个盘下
小编放到了F盘的根目录下,win+r 输入cmd,进到我们分F盘目录下输入ngrok http 80 注意:80端口是小编把tomcat端口给改了的,如果是默认的就是8080
搞定后看一下如果是如下界面即为成功:
咳咳!讲一下~黄色那个是http的的连接,下面那个是https的连接。习惯用什么任君选择。小编就是用http做下测试玩玩。如果想具体了解请求的情况,可以第一个127那个连接放到浏览器里。
不废话了~
准备个测试号:
这个可以不讲了。。自己百度去。
反正进入测试号后找到这个
然后将上面你ngrok拿到的域名放进去,注意:别有http://这些玩意。如下是例子:
这个是回调的域名,一定要写。不填出问题小编不负责!!!
撸起来:
工具类,可以直接复制一下代码,然后将appid和appsecret改成自己的就可以了。。。
package com.wen.wx;
import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.omg.CORBA.PUBLIC_MEMBER;
import java.io.IOException;
/**
* @author 文
*/
public class wxUtils {
public static final String APPID = "wx068ded9aff3629cf";
public static final String AppSecret = "4055db14763c41a75b968b00cb4214d8";
/**
* 发请求啦。。专门做这些脏活
* @param url
* @return
* @throws IOException
*/
public static JSONObject dogetUrl(String url) throws IOException {
JSONObject jsonObject = null;
DefaultHttpClient client = new DefaultHttpClient();
HttpPost httpGet = new HttpPost(url);
HttpResponse response = client.execute(httpGet);
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
String result = EntityUtils.toString(httpEntity, "UTF-8");
jsonObject = JSONObject.fromObject(result);
}
httpGet.releaseConnection();
return jsonObject;
}
}
下面是处理微信发来的回调:就是用户点击授权后来做的!
package com.wen.wx;
import net.sf.json.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
/**
* @author 文
*/
public class callBackUrl {
/**
* 回调之类的
* @param request
* @param response
* @throws IOException
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public static void callBackUrl1(HttpServletRequest request, HttpServletResponse response) throws IOException, InvocationTargetException, IllegalAccessException {
String code = request.getParameter("code");
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +wxUtils.APPID+
"&secret=" +wxUtils.AppSecret+
"&code=" +code+
"&grant_type=authorization_code";
JSONObject jsonObject=wxUtils.dogetUrl(url);
System.out.println(jsonObject);
String token = jsonObject.getString("access_token");
String openid = jsonObject.getString("openid");
String userInfoUrl= "https://api.weixin.qq.com/sns/userinfo?access_token=" +token+
"&openid=" +openid;
JSONObject json=wxUtils.dogetUrl(userInfoUrl);
System.out.println(json);
}
}
最后一个就是处理请求类了。。。就用了springmvc来接,servlet也可以。
package com.wen.servlet;
import com.wen.wx.WXLogin;
import com.wen.wx.callBackUrl;
import com.wen.wx.wxUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import sun.applet.Main;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.URLEncoder;
@Controller
public class UserAction {
@RequestMapping(value = "login")
public void userlogin(HttpServletResponse response) throws Exception {
System.out.println("开始了");
String callBackUrl = "http://ea421a3b.ngrok.io/test/callBack.action";
String urls = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + wxUtils.APPID
+ "&redirect_uri=" + URLEncoder.encode(callBackUrl)
+ "&response_type=code" +
"&scope=snsapi_userinfo" +
"&state=STATE#wechat_redirect";
response.sendRedirect(urls);
}
@RequestMapping(value = "callBack")
public void callBack(HttpServletRequest request, HttpServletResponse response) throws IllegalAccessException, IOException, InvocationTargetException {
System.out.println("------------------------------------------我来啦");
callBackUrl.callBackUrl1(request, response);
}
}
都搞好后,启动服务器吧。。。哦~差点忘了。应该还要个微信
可以了就输入网址吧。。。没什么问题了!!!
总结:
本来还想继续写的,结果发现写的太长了。挺适合初学者,但是对老司机不太适合。无所谓了,只要能收获到,一切就值得了。小编可能在这篇有点敷衍的存在。不过具体只是在各种工具上准备上,代码少而且可以实现。后面小编会做具体优化。--谢谢大家
程序人生,与君共勉