大体流程是小程序通过登录获取code(用户登录凭证,官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/wx.login.html ),然后访问自己的服务器,注意是自己的服务器,在服务器端按照code2Session的说明返回从服务器端获得的openid给小程序前端(官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/code2Session.html)
小程序端代码:
//***.js
wx.login({
success(res) {
if (res.code) {
wx.request({
url: '自己的服务器地址',
data: {
code: res.code
},
success: function(res) {
console.log(res.data.openid)
//服务器端获得是openid就是一个键值对,这里没有在服务器端处理直接
//返回前端处理,可以先在服务器端处理只返回openid也是可以的
},
fail: function() {
console.log("请求失败")
}
})
} else {
console.log('登录失败!')
}
}
})
服务器端(javaweb):
//code就是小程序从前端传过来的
private String login(String code) throws Exception {
String AppID = "自己的AppID";
String AppSecret="自己的AppSecret";//这两个都可以从微信公众平台中查找
String url = "https://api.weixin.qq.com/sns/jscode2session?appid="
+ AppID + "&secret=" + AppSecret + "&js_code="
+ code + "&grant_type=authorization_code";
URL reqURL = new URL(url);
HttpsURLConnection openConnection = (HttpsURLConnection) reqURL
.openConnection();
openConnection.setConnectTimeout(10000);
//这里我感觉获取openid的时间比较长,不过也可能是我网络的问题,
//所以设置的响应时间比较长
openConnection.connect();
InputStream in = openConnection.getInputStream();
StringBuilder builder = new StringBuilder();
BufferedReader bufreader = new BufferedReader(new InputStreamReader(in));
for (String temp = bufreader.readLine(); temp != null; temp = bufreader
.readLine()) {
builder.append(temp);
}
String result = builder.toString();
in.close();
openConnection.disconnect();
return result;
//result就是包含openid的键值对,返回给小程序前端即可
}