这两天,写了个微信小程序调用第三方支付的功能,第三方支付需要知道用户的openid等信息,我负责搞定java中获取用户openid,电话号码等信息的功能。
获取用户手机号码,必须要首先获取openid和session_key,代码如下:
//这个是微信小程序中获取openid和session_key的请求地址
private final static String URL = "https://api.weixin.qq.com/sns/jscode2session";
private static final String WE_CHAT_APPID= "你的appid";
private static final String WE_CHAT_APP_SECRET = "你的secret";
/**
* 获取用户openid和session_key
* @param request 请求
* @return res
*/
public ResultBean<Map<String, String>> getWeChatMiniProgramsUserInfo(HttpServletRequest request) {
//自己封装的返回结果类
ResultBean<Map<String, String>> resultBean = new ResultBean<>();
resultBean.setCode(-1);
resultBean.setMsg("获取信息失败!");
String code = request.getParameter("code");
String url = URL + "?appid=" + WE_CHAT_APPID + "&secret=" + WE_CHAT_APP_SECRET + "&js_code=" + code + "&grant_type=authorization_code";
try {
//公司前辈封装的http请求方法
HttpRequester request1 = new HttpRequester();
request1.setDefaultContentEncoding("utf-8");
HttpRespons hr = request1.sendGet(url);
//这可做一步验证,也可以不错
//用JSONObject转成map,也可以转成实体类,将Map.class换成你的实体类字节码就可以了
Map<String, String> map = JSONObject.parseObject(hr.getContent(), Map.class);
if (map.containsKey("openid")) {
String openid= map.get("openid");
System.out.println(openid);
}
resultBean.setCode(0);
resultBean.setData(map);
resultBean.setMsg("以获取到用户信息!");
return resultBean;
} catch (Exception e) {
e.printStackTrace();
}
return resultBean;
}
将结果返回给前端,剩下就是前端的事了,然后前端将必要的值传给我,我从中解析出手机号码;这个方法是抄的博客上的,JAVA 微信小程序获取用户信息和手机号码解密。
第三方支付,坑比较多,给的demo跟*一样,改动比较大,下午测通了,耗费了一天半时间,比上次那个电子发票稍微请那么点,哈哈。
下班了,也是放假了,祝大家五一快乐!