Controller层
package org.springblade.modules.system.controller;/**
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springblade.core.tool.api.R;
import org.springblade.modules.system.service.WeChatService;
import org.springframework.web.bind.annotation.*;
@RestController
@AllArgsConstructor
@RequestMapping("/weChat")
@Api(value = "微信", tags = "微信")
public class WeChatController {
private final WeChatService watchService;
@ApiOperation(value = "通过微信获取手机号码")
@GetMapping ("/getPhoneNumber")
//phoneCode 前端通过微信组件获取手机号唯一code
public R getPhoneNumber(String phoneCode) {
return R.data(watchService.getPhoneNumber(phoneCode));
}
}
Service层
package org.springblade.modules.system.service;
public interface WeChatService {
/**
* 通过微信获取手机号码
* @param phoneCode
* @return
*/
String getPhoneNumber(String phoneCode);
}
ServiceImpl层
package org.springblade.modules.system.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springblade.modules.system.service.WeChatService;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.util.Map;
@Service
@Slf4j
public class WeChatServiceImpl implements WeChatService {
private String appid = "微信小程序appid";
private String app_src = "微信小程序app_src";
@Override
public String getPhoneNumber(String phoneCode) {
String phoneNumber = "";
String apiUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + app_src + "";
String session = get(apiUrl);
Map map = JSON.parseObject(session);
String accessToken = ((JSONObject) map).getString("access_token");
//获取用户认证手机号
String postUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken + "";
String post = httpPost(postUrl, phoneCode);
Map map1 = JSON.parseObject(post);
Object object = map1.get("phone_info");
Map entity = (Map) object;
log.info("entity{}", entity);
if (!ObjectUtils.isEmpty(entity)) {
phoneNumber = entity.get("phoneNumber").toString();
}
return phoneNumber;
}
/**
* get请求接口
*
* @param uri
* @return
*/
private String get(String uri) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet get = new HttpGet(uri);
CloseableHttpResponse response = null;
try {
response = httpClient.execute(get);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "UTF-8");
return result;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* post请求
*
* @param url 请求地址
* @return 返回接口字符串
* @throws Exception
*/
private String httpPost(String url, String code) {
// 返回body
JSONObject param = new JSONObject();
param.put("code", code);
JSONObject result = new JSONObject();
// 1、创建一个htt客户端
CloseableHttpClient httpClient = HttpClients.createDefault();
// 2、创建一个HttpPost请求
HttpPost httpPost = new HttpPost(url);
//请求参数转JOSN字符串
StringEntity entity = new StringEntity(param.toString(), "UTF-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
try {
HttpResponse response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
result = JSON.parseObject(EntityUtils.toString(response.getEntity(), "UTF-8"));
return result.toString();
}
} catch (IOException e) {
e.printStackTrace();
result.put("error", "连接错误!");
}
return result.toString();
}
}