puhanshu
2022-01-14 d77a5909232ec1829548fff01915a0ca7dc2269f
微信授权登录修改
2个文件已修改
83 ■■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/MicroCommercialStreetApi.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/config/WxMaConfiguration.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/MicroCommercialStreetApi.java
@@ -1,6 +1,9 @@
package com.panzhihua.shop_backstage.api;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import javax.validation.Valid;
@@ -66,15 +69,11 @@
import com.panzhihua.shop_backstage.model.request.LoginRequest;
import com.panzhihua.shop_backstage.model.vos.LoginBody;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.regex.Pattern;
/**
 * @title: MicroCommercialStreetApi
@@ -106,23 +105,10 @@
            return R.fail("缺少登录参数");
        }
        log.info(code);
        WxMaService maService = wxMaConfiguration.getMaH5Service();
        WxMaJscode2SessionResult sessionInfo = null;
        try {
            sessionInfo = maService.jsCode2SessionInfo(code);
        } catch (Exception e) {
            log.error("微信登录失败【{}】", e.getMessage());
            if (code.equals("22")) {
                sessionInfo = new WxMaJscode2SessionResult();
                sessionInfo.setOpenid("88888888");
                sessionInfo.setSessionKey("9999999");
            } else {
                return R.fail("微信登录失败");
            }
        String openid = wxMaConfiguration.retrieveOpenId(code);
        if (isNull(openid)) {
            return R.fail("登录失败");
        }
        log.info("微信登录成功【{}】", JSONObject.toJSONString(sessionInfo));
        log.info("loginRequest参数【{}】", JSONObject.toJSONString(loginRequest));
        String openid = sessionInfo.getOpenid();
        R r = userService.getMcsUserByOpenId(openid);
        if (R.isOk(r) && nonNull(r.getData())) {
            McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), McsLoginUserInfoVO.class);
springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/config/WxMaConfiguration.java
@@ -1,12 +1,18 @@
package com.panzhihua.shop_backstage.config;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.utlis.HttpUtils;
import lombok.extern.slf4j.Slf4j;
/**
@@ -19,16 +25,45 @@
@Component
public class WxMaConfiguration {
    private static final String OAUTH2_URL = "https://api.weixin.qq.com/sns/oauth2/access_token";
    @Resource
    private WxH5Properties wxH5Properties;
    public WxMaService getMaH5Service() {
        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
        config.setAppid(wxH5Properties.getAppid());
        config.setSecret(wxH5Properties.getSecret());
        config.setMsgDataFormat(wxH5Properties.getMsgDataFormat());
        WxMaService wxMaService = new WxMaServiceImpl();
        wxMaService.setWxMaConfig(config);
        return wxMaService;
    public String retrieveOpenId(String code) {
        HashMap<String, String> params = new HashMap<>();
        params.put("appid", wxH5Properties.getAppid());
        params.put("secret", wxH5Properties.getSecret());
        params.put("code", code);
        params.put("grant_type", "authorization_code");
        String result = HttpUtils.sendGet(OAUTH2_URL, createLinkStringByGet(params));
        try {
            JSONObject parseObject = JSONObject.parseObject(result);
            if (parseObject.containsKey("openid")) {
                String openid = parseObject.get("openid").toString();
                log.info("网页授权获取到openId:【{}】", openid);
                return openid;
            }
        } catch (Exception e) {
            log.error("网页授权失败");
            e.printStackTrace();
        }
        return null;
    }
    private static String createLinkStringByGet(Map<String, String> params) {
        List<String> keys = new ArrayList<>(params.keySet());
        Collections.sort(keys);
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            String value = params.get(key);
            if (i == keys.size() - 1) {
                stringBuilder.append(key).append("=").append(value);
            } else {
                stringBuilder.append(key).append("=").append(value).append("&");
            }
        }
        return stringBuilder.toString();
    }
}