停止访问网页问题已解决,但是扫码又出现scope不能为空的错误。。。。。
来源:14-14 店铺授权之部署以及远程调试
慕田峪2884171
2018-02-07
老师,我扫码停止访问网页的问题已经解决了,但是现在扫码又出现了一个问题,我搜索了一个答案,但不是特别明白那个意思。。我找另外一个同学扫码出现的结果是和我一样的错误
写回答
5回答
-
同学可以把短地址利用百度在线的解析服务还原成长地址看看跟预期相符不 具体可以参照以下链接
https://jingyan.baidu.com/article/4ae03de3268b953eff9e6b2f.html
062018-03-05 -
翔仔
2018-02-07
请同学对比一下,
这是我生成二维码的代码
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是啥 就能调试出来了
0192018-02-07 -
慕田峪2884171
提问者
2018-02-07
我在想因为我们二维码传入的是生成的短URL,而我直接使用生成的短URL访问会出现错误,那我的错误点会不会是生成的短URL有问题,导致我的二维码生成也是有问题的?
00 -
慕田峪2884171
提问者
2018-02-07
不懂为什么最后一步就直接变成null了
00 -
翔仔
2018-02-07
那是因为同学的二维码里没有包含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是多少。一定要锻炼出调试动手解决问题,定位的能力!
0102018-02-07
相似问题