本地开发微信公众号(测试号)--获取code、openid

1. 申请微信测试公众号

微信公众平台

2. 本地开发需下载内网穿透工具,此处推荐申请natapp免费通道

访问natapp官网下载工具,传送门:Natapp 教程/文档 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具

然后登陆natapp购买免费的内网穿透通道,没有账号的自己注册一个

自行配置

 

3. 在后端定义该方法用于配置填写接口配置信息,微信公众平台会调用该接口进行验证

 @GetMapping("/getWx")
    public void enter(HttpServletRequest request, HttpServletResponse response) throws IOException {
        /**
         参数	描述
         signature	微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
         timestamp	时间戳
         nonce	随机数
         echostr	随机字符串
         */
        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostr = request.getParameter("echostr");
        System.out.println("signature----" + signature + "--nonce-----" + nonce + "echostr----" + echostr);
        if (wxService.check(timestamp, nonce, signature)) {
            System.out.println("验证成功" + echostr);
            response.getWriter().print(echostr);
            response.getWriter().flush();
            response.getWriter().close();
        } else {
            System.out.println("验证失败");
        }
    }


    public  boolean check(String timestamp, String nonce, String signature) {
        //将 timestamp , nonce , signature 字典排序
        // 此处token应与上面图中的token对应
        String[] strs = new String[]{TOKEN, timestamp, nonce};
        System.out.println(strs);
        Arrays.sort(strs);
        //将三个拼接,加密
        String string = strs[0] + strs[1] + strs[2];
        String mysig = sha1(string);
        System.out.println(mysig);
        System.out.println(mysig);
        // 对比
        return mysig.equalsIgnoreCase(signature);
    }

4. 在微信测试公众平台填入上面接口的地址

 5. 配置域名,该域名就是开启内网穿透后的地址

 6. 获取code和openid需要添加配置如下

7.通过下面两个方法获取openid

private String GET_CODE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
private String GET_OPENID_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
/**
* 该方法会将构造的连接生成一个二维码,用户使用微信扫码后会自动获得code,并进去回调方法
*/
@RequestMapping("/getCode")
    public Result<?> getCode() throws IOException, WriterException {
        String url = GET_CODE_URL.replace("APPID", "你的appid").replace("REDIRECT_URI", "http://"+"填写的域名" + "回调的路由").replace("SCOPE", "snsapi_base");
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(url, BarcodeFormat.QR_CODE, 600, 600);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);
        Base64.Encoder encoder = Base64.getEncoder();
        String image = encoder.encodeToString(outputStream.toByteArray());
        return Result.OK(image);
    }
/**
* 回调方法
*/
    @RequestMapping("/REDIRECT_URI")
    public String REDIRECT_URI(HttpServletRequest request, String state) {
        
        String code = request.getParameter("code");
        String replace = GET_OPENID_URL.replace("APPID","自己的appid").replace("CODE", code).replace("SECRET","自己的secret");
        String result= Util.get(replace);
        JSONObject resultObject = JSONObject.parseObject(result);
        String openid = resultObject.getString("openid");
        return openid;
    }

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值