采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,我扫码停止访问网页的问题已经解决了,但是现在扫码又出现了一个问题,我搜索了一个答案,但不是特别明白那个意思。。我找另外一个同学扫码出现的结果是和我一样的错误
生成的短URL有问题,正确是shortUrl应该是http://www.dwz.cn/7nHkM7 但是我生成的短地址是:http://suo.im/2X8W9E 那我是不是应该去检查生成短地址的类
百度的还原回来是这样https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe632f99c390123a2&redirect_uri=http://o2o.myfirsto2o.cn/o2o/shopadmin/addshopauthmap&role_type=1&response_type=code&scope=snsapi_userinfo&state=%7BaaashopIdaaa%3A28%2CaaacreateTimeaaa%3A1518006202127%7D#wechat_redirect 直接用来访问调试看看?百度短地址能用了,根据同学的问题排查水平,建议先改回和教程一样再定位
请同学对比一下,
这是我生成二维码的代码
CodeUtil.java
public static BitMatrix generateQRCodeStream(String content, HttpServletResponse resp) { // 给响应添加头部信息,主要是告诉浏览器返回的是图片流 resp.setHeader("Cache-Control", "no-store"); resp.setHeader("Pragma", "no-cache"); resp.setDateHeader("Expires", 0); resp.setContentType("image/png"); // 设置图片的文字编码以及内边框距 Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); hints.put(EncodeHintType.MARGIN, 0); BitMatrix bitMatrix; try { // 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数 bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 300, 300, hints); } catch (WriterException e) { e.printStackTrace(); return null; } return bitMatrix; }
这是生成逻辑二维码的代码
@RequestMapping(value = "/generateqrcode4shopauth", method = RequestMethod.GET) @ResponseBody private void generateQRCode4ShopAuth(HttpServletRequest request, HttpServletResponse response) { // 从session里获取当前shop的信息 Shop shop = (Shop) request.getSession().getAttribute("currentShop"); if (shop != null && shop.getShopId() != null) { // 获取当前时间戳,以保证二维码的时间有效性,精确到毫秒 long timpStamp = System.currentTimeMillis(); // 将店铺id和timestamp传入content,赋值到state中,这样微信获取到这些信息后会回传到授权信息的添加方法里 // 加上aaa是为了一会的在添加信息的方法里替换这些信息使用 String content = "{aaashopIdaaa:" + shop.getShopId() + ",aaacreateTimeaaa:" + timpStamp + "}"; try { // 将content的信息先进行base64编码以避免特殊字符造成的干扰,之后拼接目标URL String longUrl = urlPrefix + authUrl + urlMiddle + URLEncoder.encode(content, "UTF-8") + urlSuffix; // 将目标URL转换成短的URL String shortUrl = ShortNetAddressUtil.getShortURL(longUrl); // 调用二维码生成的工具类方法,传入短的URL,生成二维码 BitMatrix qRcodeImg = CodeUtil.generateQRCodeStream(shortUrl, response); // 将二维码以图片流的形式输出到前端 MatrixToImageWriter.writeToStream(qRcodeImg, "png", response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } }
同学替换或者对比一下看看。
同时shortUrl看看是啥 调试的时候生成的啥,直接赋值出来粘贴到浏览器上看看解析出来的longUrl是啥 就能调试出来了
一样的结果,生成的shortUrl解析出来的是:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe632f99c390123a2&connect_redirect=1&uin=MTUzNjczNDMwOA%3D%3D&key=05e7c1cae342e1020d63ed84c115a0553e3cf980941ce6bacc70b5e13b1048734da6bd6f2aad25afe3e2319fdb9567af&pass_ticket=3cfj5CfkRd69fhpqkRVgumbVzUvL3eGtY0T/PGp8rl3PmmcJlExoDcGkIWlO6fixNi0VTNXcq0ZGEmqRh6SYYw== 然后访问的时候出现的错误是:redirect_uri参数错误 这是之前的longUrl:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe632f99c390123a2&redirect_uri=http://o2o.myfirsto2o.cn/o2o/shopadmin/addshopauthmap&role_type=1&response_type=code&scope=snsapi_userinfo&state=%7BaaashopIdaaa%3A28%2CaaacreateTimeaaa%3A1518005485352%7D#wechat_redirect 直接使用longUrl不会出错,但是最后一步要转为实体类就变为null了
我有点糊涂了,同学你现在我理解是不是两个问题 1.短网址解析跟预期不符 2.即便长url正确但是qCodeInfo为空?
而我想问的是: 1.同学你的String shortUrl = ShortNetAddressUtil.getShortURL(longUrl);里shortUrl调试的时候生成的是什么,这个是针对你短网址的问题 2.用的是长url直接访问的话,你调试到的qCodeInfo是什么,不要等进入到catch才看,catch的时候所有值几乎都是null的
那是因为同学的二维码里没有包含scope信息导致,请确保二维码解析后生成类似以下的链接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxd7f6c5b8899fba83&redirect_uri=http://o2o.yitiaojieinfo.com/o2o/wechatlogin/logincheck&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirectredirect_uri=同学的api
但是注意就是因为uri太长,所以需要把它压缩成短网址再解析成二维码,跟视频里一样,所以请确保你的二维码的值是正确的,你可以调试一下,看看你的URL是多少。一定要锻炼出调试动手解决问题,定位的能力!
我对比了下和老师的二维码URL,我微信生成的URL是正常的:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe632f99c390123a2&redirect_uri=http://o2o.myfirsto2o.cn/o2o/shopadmin/addshopauthmap&role_type=1&response_type=code&scope=snsapi_userinfo&state=%7BaaashopIdaaa%3A28%2CaaacreateTimeaaa%3A1517986582860%7D#wechat_redirect 我要去哪里排查scope的问题呢?
登录后可查看更多问答,登录/注册
SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需
了解课程