根据官方文档,wx.login()的回调函数中,需要我们传递生成的用户登录凭证到code2accessToken的接口中
code2accessToken的方法中要求传入如下参数
获取Appid与appSecret,登录微信公众平台,知道你申请的小程序,开发者设置中有appid,然后生成secret即可
官方文档:
https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
微信公众平台:
首先,要在微信开发者工具中,修改utils下app.js中的wx.login()方法
// 登录
wx.login({
success: function (res) {
if (res.code) {
// 发起网络请求
wx.request({
// 这里是接口地址,建议部署配置域名为https,否则可能会出问题,nginx加密证书配置见文章尾
url: 'http://127.0.0.1:8099/api/v1/minipro/login',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
微信小程序登录接口的书写
@Controller
@RequestMapping("/api/v1/minipro")
public class MainController implements Serializable {
private static final long serialVersionUID = 1L;
private static Logger logger = LoggerFactory.getLogger(MainController.class);
/**
* 登录
* @param
*/
@ResponseBody
@GetMapping(value="/login")
public Result login(String code) {
// 微信小程序ID
String appid = "";
// 微信小程序秘钥
String secret = "";
// 根据小程序穿过来的code想这个url发送请求
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
// 发送请求,返回Json字符串
String str = WeChatUtil.httpRequest(url, "GET", null);
// 转成Json对象 获取openid
JSONObject jsonObject = JSONObject.parseObject(str);
// 我们需要的openid,在一个小程序中,openid是唯一的
String openid = jsonObject.get("openid").toString();
// 然后书写自己的处理逻辑即可
}
微信小程序工具类
/**
* 微信工具类
*/
public class WeChatUtil {
public static String httpRequest(String requestUrl,String requestMethod,String output){
try{
URL url = new URL(requestUrl);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
if(null != output){
OutputStream outputStream = connection.getOutputStream();
outputStream.write(output.getBytes("utf-8"));
outputStream.close();
}
// 从输入流读取返回内容
InputStream inputStream = connection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null){
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
connection.disconnect();
return buffer.toString();
}catch(Exception e){
e.printStackTrace();
}
return "";
}
}
因为审核上线的小程序接口都必须要https开头,也就是说必须开启加密证书才可以使用。
Nginx配置SSL证书,请移步:https://www.jianshu.com/p/4cbf644b34a1