停止访问网页问题已解决,但是扫码又出现scope不能为空的错误。。。。。

来源:14-14 店铺授权之部署以及远程调试

慕田峪2884171

2018-02-07

老师,我扫码停止访问网页的问题已经解决了,但是现在扫码又出现了一个问题,我搜索了一个答案,但不是特别明白那个意思。。我找另外一个同学扫码出现的结果是和我一样的错误

//img.mukewang.com/szimg/5a7a76380001616d08780575.jpg

//img.mukewang.com/szimg/5a7a763800018f7706791233.jpg


写回答

5回答

翔仔

2018-02-07

同学可以把短地址利用百度在线的解析服务还原成长地址看看跟预期相符不 具体可以参照以下链接

https://jingyan.baidu.com/article/4ae03de3268b953eff9e6b2f.html

0
6
慕田峪2884171
非常感谢!
2018-03-05
共6条回复

翔仔

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是啥 就能调试出来了

0
19
慕田峪2884171
回复
翔仔
恩恩,那是肯定的,目前为止,我买过的课程当中老师的课讲的是最详细,坚持最久的一门了。希望老师后面也能出其他课程哈
2018-02-07
共19条回复

慕田峪2884171

提问者

2018-02-07

//img.mukewang.com/szimg/5a7ae7ee00017abd08190612.jpg

我在想因为我们二维码传入的是生成的短URL,而我直接使用生成的短URL访问会出现错误,那我的错误点会不会是生成的短URL有问题,导致我的二维码生成也是有问题的?

0
0

慕田峪2884171

提问者

2018-02-07

//img.mukewang.com/szimg/5a7ae92f0001e22911440418.jpg

//img.mukewang.com/szimg/5a7ae60f000127d609300442.jpg

//img.mukewang.com/szimg/5a7ae60f0001bba709160544.jpg

//img.mukewang.com/szimg/5a7ae61000017abd08190612.jpg

不懂为什么最后一步就直接变成null了


0
0

翔仔

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_redirect

redirect_uri=同学的api

但是注意就是因为uri太长,所以需要把它压缩成短网址再解析成二维码,跟视频里一样,所以请确保你的二维码的值是正确的,你可以调试一下,看看你的URL是多少。一定要锻炼出调试动手解决问题,定位的能力!


0
10
翔仔
回复
慕田峪2884171
这个应该是访问了之后微信转发变换成的url跟第一次从短URL解析出来的不是同一个
2018-02-07
共10条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程