微信小程序/微信网页-----获取openid(一)

微信小程序


    wx.login({
      success (res) {
        if (res.code) {
          console.log(res,);
          //发起网络请求
          wx.request({
            url: '服务端获取,
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

服务端

/**
     * 前端开发的小程序id必须和appid一致
     * @param code
     * @return
     */
    @SneakyThrows
    @ApiOperation(value="微信小程序登录", notes="微信登录")
    @GetMapping("getwxCode")
    public Result<?> getwxCode(String code){

        Auser ausersass = (Auser)redisUtils.get(code);
        if (ausersass!=null){
            return Result.OK(ausersass);
        }

        String appid = "";
        String secret = "";



        //第二步
        //get请求
        RequestBuilder builder =
                RequestBuilder.get("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code");
        JSONObject getJson = IdmApiClient.executessss(builder);
        System.out.println("================================");
        System.out.println(getJson);
        System.out.println("================================");

        return  Result.OK();
    }






  @SneakyThrows
    @ApiOperation(value="微信公众号(网页)登录获取openid", notes="微信登录")
    @GetMapping("authorize")
    public void authorize(HttpServletResponse response){
        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+Wxpojo.wxwy_appId+"&redirect_uri=" +
                WeChatConstants.wx_redirect_uri+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
        response.sendRedirect(url);
    }












 @SneakyThrows
    @ApiOperation(value="微信公众号(网页)登录获取openid", notes="微信登录")
    @GetMapping("getgzhCode")
    public Result<?> getgzhCode(String code){

		//判断code重复使用
        Auser ausersass = (Auser)redisUtils.get(code);
        if (ausersass!=null){
           return Result.OK(ausersass);
        }





//        https://api.weixin.qq.com/sns/jscode2session?appid=wxfa94e1666a63a373&secret=44096031970bd463496dd87518434372&js_code=JSCODE&grant_type=authorization_code



        //第二步
        //get请求
        RequestBuilder builder =
                RequestBuilder.get("https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Wxpojo.appId+"&secret="+Wxpojo.secret+"&code="+code+"&grant_type=authorization_code");
        JSONObject getJson = IdmApiClient.executessss(builder);
        System.out.println("================================");
        System.out.println(getJson);
        System.out.println("================================");

        String accessToken = getJson.get("access_token").toString();
        String expiresIn = getJson.get("expires_in").toString();
        String refreshToken = getJson.get("refresh_token").toString();
        String openid = getJson.get("openid").toString();
        String scope = getJson.get("scope").toString();


        Wxcode wxcodes = new Wxcode();
        wxcodes.setAccesstoken(accessToken);
        wxcodes.setExpiresin(expiresIn);
        wxcodes.setRefreshtoken(refreshToken);
        wxcodes.setOpenid(openid);
        wxcodes.setScope(scope);
        wxcodes.setId(1);
        wxcodes.setTime(DateUtil.now());
        wxcodeService.save(wxcodes);


//        https://chuxing.zcwjvr.com/mp/?appid=wxfa94e1666a63a373&redirect_uri=chuxing.zcwjvr.com&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect


        System.out.println("第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步");
        //第三步
        //get请求
        RequestBuilder builders =
                RequestBuilder.get("https://api.weixin.qq.com/sns/oauth2/refresh_token?appid="+Wxpojo.appId+"&grant_type=refreshToken"+"&refresh_token="+refreshToken);
        JSONObject getJsons = IdmApiClient.executessss(builders);

        System.out.println("11111111111111111111111111111111111111111111111");
        System.out.println(getJsons);
        System.out.println("11111111111111111111111111111111111111111111111");
        System.out.println("第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步第三步");






        //第四步
        //get请求
        RequestBuilder builderssi =
                RequestBuilder.get("https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openid+"&lang=zh_CN");
        JSONObject getJsonssi = IdmApiClient.executessss(builderssi);


        System.out.println("用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息");
        System.out.println(getJsonssi);
        System.out.println("用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息用户信息");


        String openiduser = getJsonssi.get("openid").toString();
        String nickname = getJsonssi.get("nickname").toString();
        String sex = getJsonssi.get("sex").toString();
        String headimgurl = getJsonssi.get("headimgurl").toString();


        QueryWrapper<Auser> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("openid",openiduser);
        Auser ausers = auserService.getOne(queryWrapper);

        Auser auser = new Auser();
        auser.setOpenid(openiduser);
        try {
            String username =  new String(nickname.getBytes("ISO-8859-1"), "UTF-8");
            auser.setUsername(username);

        }catch (Exception e) {

        }
        auser.setXb(Integer.parseInt(sex));
        auser.setImg(headimgurl);

        if (ausers == null) {
            auser.setInstime(DateUtil.now());
            auserService.save(auser);
            logger.info("进行添加新的用户");
        }else{
            auser.setId(ausers.getId());
            auser.setUpdatetime(DateUtil.now());
            auserService.updateById(auser);
            logger.info("修改老用户");
        }

        QueryWrapper<Auser> queryWrapperuser = new QueryWrapper<>();
        queryWrapperuser.eq("openid",openiduser);
        Auser ausersqueryWrapperuser = auserService.getOne(queryWrapperuser);

        if (ausersqueryWrapperuser.getUsername()==null){
            ausersqueryWrapperuser.setUsername(ausersqueryWrapperuser.getName());
        }

        redisUtils.set(code,ausersqueryWrapperuser);

        return  Result.OK(ausersqueryWrapperuser);
    }

pox

 <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.8</version>
        </dependency>
package com.demo.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;

/**
 Http和https原生请求,绕过https
 */
public class IdmApiClient {
    private static Logger LOGGER = LoggerFactory.getLogger(IdmApiClient.class);
      private  String appUser;
    private  String privateKey;
    private  String prefix;


    public static JSONObject executessss(RequestBuilder builder) {
        try {
            CloseableHttpClient client = buildHttpClient();
            HttpUriRequest request = builder.build();
            LOGGER.debug("请求接口:{}", request);
            CloseableHttpResponse response = client.execute(request);
            String result = EntityUtils.toString(response.getEntity());
            LOGGER.debug("接口响应:{}", result);
            HttpClientUtils.closeQuietly(response);
            HttpClientUtils.closeQuietly(client);
            return JSON.parseObject(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }




    public static String executs(RequestBuilder builder) {
        try {
            CloseableHttpClient client = buildHttpClient();
            HttpUriRequest request = builder.build();
            LOGGER.debug("请求接口:{}", request);
            CloseableHttpResponse response = client.execute(request);
            String result = EntityUtils.toString(response.getEntity());
            LOGGER.debug("接口响应:{}", result);
            HttpClientUtils.closeQuietly(response);
            HttpClientUtils.closeQuietly(client);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    private String buildSign(RequestBuilder builder) {
        String uri = StringUtils.substringAfter(builder.build().getURI().toString(), prefix);
        String content = "";
        String method = builder.getMethod();
        if (StringUtils.equals(method, "PUT") || StringUtils.equals(method, "POST")) {
            try {
                HttpEntity entity = builder.getEntity();
                if (Objects.nonNull(entity)) {
                    content = EntityUtils.toString(entity);
                }
            } catch (IOException ignored) {
            }
        }
        String text = StringUtils.join(new String[]{uri, content, privateKey}, "&");
        return DigestUtils.md5Hex(text);
    }

    private static CloseableHttpClient buildHttpClient() throws Exception {
        //忽略掉对服务器端证书的校验
        SSLContext sslcontext = SSLContexts.custom()
                .loadTrustMaterial((TrustStrategy) (chain, authType) -> true)
                .build();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
                sslcontext,
                new String[]{"TLSv1"},
                null,
                SSLConnectionSocketFactory.getDefaultHostnameVerifier());
        return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值