先看官方的流程图
分为小程序,开发者服务器(java端),微信接口服务(获取openid的接口)
小程序端:
var that = this
wx.login({
success: function (res) {
var code = res.code;//发送给服务器的code
if (code) {
wx.request({
url: that.globalData.ip+'/GetOpenId',//自己的java后台地址
data: {
code: code
},
header: {
'content-type': 'application/json'
},
success: function (res) {
console.log(res);
console.log("获取openid",res)
}
})
}
else {
console.log("获取用户登录态失败!");
}
},
fail: function (error) {
console.log('login failed ' + error);
}
})
java端:
这里分为两个部分 :1,一个工具类(GetOpenIdUtil.java):将获取到的code 和 session以及appid 按要求结合在一起并查询openid
2,实际处理类(GetOpenId):接受数据,进行处理,返回小程序数据。
工具类(GetOpenIdUtil.java)
package com.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
/**
*
*/
public class GetOpenIdUtil {
public String getopenid(String appid,String code,String secret) {
BufferedReader in = null;
//appid和secret是开发者分别是小程序ID和小程序密钥,开发者通过微信公众平台-》设置-》开发设置就可以直接获取,
String url="https://api.weixin.qq.com/sns/jscode2session?appid="
+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code";
try {
URL weChatUrl = new URL(url);
// 打开和URL之间的连接
URLConnection connection = weChatUrl.openConnection();
// 设置通用的请求属性
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 建立实际的连接
connection.connect();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception e1) {
throw new RuntimeException(e1);
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
实际处理类(GetOpenId)
采用Servlet(java web 技术)和 小程序通信 (不知道可以学习下再用)
/**
* Servlet implementation class GetOpenId
*/
@WebServlet("/GetOpenId")
public class GetOpenId extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public GetOpenId() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub GetOpenId
response.setContentType("text/html;charset=utf-8");
/*设置响应头允许ajax跨域访问*/
response.setHeader("Access-Control-Allow-Origin", "*");
/* 星号表示所有的异域请求都可以接受, */
response.setHeader("Access-Control-Allow-Methods", "GET,POST");
//获取微信小程序get的参数值并打印
String code = request.getParameter("code");
//参数
String appid = "";//自己找自己的
// 记得发给别人前删掉这个
String secret = "";//自己找自己的
// 调用方位微信服务器工具方法
GetOpenIdUtil getopenid=new GetOpenIdUtil();
//调用访问微信服务器工具方法,传入三个参数获取带有openid、session_key的json字符串
String jsonId=getopenid.getopenid(appid,code,secret);
JSONObject jsonObject = JSONObject.fromObject(jsonId);
//从json字符串获取openid和session_key
String openid=jsonObject.getString("openid");
String session_key=jsonObject.getString("session_key");
System.out.println("openid"+openid);
//返回值给微信小程序
response.setCharacterEncoding("UTF-8");
Writer out = response.getWriter();
//out.write("进入后台了"+json);
out.write(jsonObject.toString());
out.flush();
}
}
就OK了,有什么不了解的地方请留言 我看到了会第一时间回复。