请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

//img1.sycdn.imooc.com//szimg/5a7a76380001616d08780575.jpg

//img1.sycdn.imooc.com//szimg/5a7a763800018f7706791233.jpg


正在回答

5回答

翔仔 2018-02-07 19:57:32

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 慕田峪2884171 #1
    生成的短URL有问题,正确是shortUrl应该是http://www.dwz.cn/7nHkM7
    但是我生成的短地址是:http://suo.im/2X8W9E
    那我是不是应该去检查生成短地址的类
    回复 有任何疑惑可以回复我~ 2018-02-07 20:26:57
  • 翔仔 回复 提问者 慕田峪2884171 #2
    百度的还原回来是这样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 直接用来访问调试看看?百度短地址能用了,根据同学的问题排查水平,建议先改回和教程一样再定位
    回复 有任何疑惑可以回复我~ 2018-02-07 20:39:23
  • 提问者 慕田峪2884171 回复 翔仔 #3
    生成短地址可以用了?那我重头再来一遍吧。。。。
    回复 有任何疑惑可以回复我~ 2018-02-07 20:44:04
翔仔 2018-02-07 19:53:15

请同学对比一下,

这是我生成二维码的代码 

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 回复 有任何疑惑可以回复我~
  • 提问者 慕田峪2884171 #1
    一样的结果,生成的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了
    回复 有任何疑惑可以回复我~ 2018-02-07 20:17:25
  • 翔仔 回复 提问者 慕田峪2884171 #2
    我有点糊涂了,同学你现在我理解是不是两个问题
    1.短网址解析跟预期不符
    2.即便长url正确但是qCodeInfo为空?
    回复 有任何疑惑可以回复我~ 2018-02-07 20:27:57
  • 翔仔 回复 提问者 慕田峪2884171 #3
    而我想问的是:
    1.同学你的String shortUrl = ShortNetAddressUtil.getShortURL(longUrl);里shortUrl调试的时候生成的是什么,这个是针对你短网址的问题
    2.用的是长url直接访问的话,你调试到的qCodeInfo是什么,不要等进入到catch才看,catch的时候所有值几乎都是null的
    回复 有任何疑惑可以回复我~ 2018-02-07 20:31:20
提问者 慕田峪2884171 2018-02-07 19:52:31

https://img1.sycdn.imooc.com//szimg/5a7ae7ee00017abd08190612.jpg

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

0 回复 有任何疑惑可以回复我~
提问者 慕田峪2884171 2018-02-07 19:43:26

https://img1.sycdn.imooc.com//szimg/5a7ae92f0001e22911440418.jpg

//img1.sycdn.imooc.com//szimg/5a7ae60f000127d609300442.jpg

//img1.sycdn.imooc.com//szimg/5a7ae60f0001bba709160544.jpg

//img1.sycdn.imooc.com//szimg/5a7ae61000017abd08190612.jpg

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


0 回复 有任何疑惑可以回复我~
翔仔 2018-02-07 12:08:43

那是因为同学的二维码里没有包含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 回复 有任何疑惑可以回复我~
  • 提问者 慕田峪2884171 #1
    好,知道了
    回复 有任何疑惑可以回复我~ 2018-02-07 12:38:53
  • 翔仔 #2
    不要迷茫和烦躁 解决问题是家常便饭 有时候很简单会卡一整天 学习是一个积累的过程!
    回复 有任何疑惑可以回复我~ 2018-02-07 12:52:42
  • 提问者 慕田峪2884171 回复 翔仔 #3
    我对比了下和老师的二维码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的问题呢?
    回复 有任何疑惑可以回复我~ 2018-02-07 15:12:15
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信