@Value("${wx.appId}")
private String appId;
@Value("${wx.secret}")
private String secret;
@Resource
private HPatientMapper hPatientMapper;
@Resource
private HSharePersonMapper sharePersonMapper;
@RabbitListener(queues = "TTL_DOCTOR")
@RabbitHandler
public void infoConsumption(String message) {
log.info("开始消费");
String urlToke = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret;//微信公众号的
try {
Response response = OkHttpUtil.get(urlToke);
if (response.isSuccessful()) {
String string = response.body().string();
Map<String, String> map = JSONObject.parseObject(string, Map.class);
String access_token = map.get("access_token");
String next_openid = "";
String urlOpenid = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + access_token + "&next_openid=" + next_openid;
Response responseOpenId = OkHttpUtil.get(urlOpenid);
if (responseOpenId.isSuccessful()) {
String stringOpenId = responseOpenId.body().string();
Map<String, String> mapOpenId = JSONObject.parseObject(stringOpenId, Map.class);
Object dataS = mapOpenId.get("data");
Map<String, String> mapStr = JSONObject.parseObject(dataS.toString(), Map.class);
Object openid = mapStr.get("openid");
//log.info("这是{}",mapStr.get("openid"));
JSONArray objects = JSONArray.parseArray(openid.toString());
for (Object object : objects) {
String openId = object.toString();
//log.info("openid{}", openId);
if ("1".equals(message)) {//患者登录
addPatientPublicId(openId,access_token);
}else {
//分享人登录
addSharePublicId(openId,access_token);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void addPatientPublicId(String openId,String access_token){
try {
List<HPatient> hPatientList = hPatientMapper.selectAllPatient();
HPatient hPatient = hPatientMapper.selectPatientByPublicOpenId(openId);
if (hPatient == null) {
String urlPerson = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=" + openId + "&lang=zh_CN";
Response responsePerson = OkHttpUtil.get(urlPerson);
if (responsePerson.isSuccessful()) {
String stringPerson = responsePerson.body().string();
Map<String, String> mapPerson = JSONObject.parseObject(stringPerson, Map.class);
//log.info("数据{}", mapStr.get("openid"));
if (ObjectUtils.isNotEmpty(hPatientList)) {
for (HPatient patient : hPatientList) {
if (mapPerson.get("unionid").equals(patient.getUnionId())) {
patient.setPublicId(mapPerson.get("openid"));
hPatientMapper.updateHPatientDevice(patient);
}
}
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
public void addSharePublicId(String openId,String access_token){
try {
List<HSharePerson> hSharePersonList = sharePersonMapper.selectAllShare();
HSharePerson sharePerson = sharePersonMapper.selectShareByPublicOpenId(openId);
if (sharePerson == null) {
String urlPerson = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=" + openId + "&lang=zh_CN";
Response responsePerson = OkHttpUtil.get(urlPerson);
if (responsePerson.isSuccessful()) {
String stringPerson = responsePerson.body().string();
Map<String, String> mapPerson = JSONObject.parseObject(stringPerson, Map.class);
//log.info("数据{}", mapStr.get("openid"));
if (ObjectUtils.isNotEmpty(hSharePersonList)) {
for (HSharePerson hSharePerson : hSharePersonList) {
if (mapPerson.get("unionid").equals(hSharePerson.getUnionId())) {
hSharePerson.setPublicId(mapPerson.get("openid"));
sharePersonMapper.updateHSharePerson(hSharePerson);
}
}
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
原理:
小程序登录会产生一个unionid,微信公众号和开发平台做绑定后用户关注公众号后也会产生一个unionid,二者的unionid是一致的,相应的就可以找到用户公众号的openid
注意事项:
1:小程序在该公众号下
2:公众号要与微信开放平台做绑定(不绑定的话获取不到用户unionid)