debug js错误 微信开发_debug微信开发工具 - CSDN
精华内容
参与话题
  • 这周做的一个活动有微信分享的功能,本来看微信JS-SDK说明文档代码一copy以为就大功告成了,可是调试-_-#,于是乎写个文章纪念下? 分享的调试 1. 下载微信开发者工具 2. 微信公众平台接口测试帐号申请 申请账号 ...
        

    背景

    这周做的一个活动有微信分享的功能,本来看微信JS-SDK说明文档代码一copy以为就大功告成了,可是调试-_-#,于是乎写个文章纪念下?

    分享的调试

    1. 下载微信开发者工具

    2. 微信公众平台接口测试帐号申请

    申请账号

    进入如下页面:
    图片描述

    3. 在第2步中的页面中会看到类似的测试号二维码,关注即可

    图片描述

    4. 获取access token

    获取access token

    将打开的链接地址上的APPID和APPSECRET替换成对应的第2步中获取的测试账号信息,回车获取access_token

    5. 用上一步拿到的access_token 采用http GET方式请求获得jsapi_ticket

    获得jsapi_ticket

    6. 用上一步拿到的jsapi_ticket获得signature

    获得signature

    7. 在第2步中进入的测试号管理页面设置JS接口安全域名

    1. 一级域名,非80端口需要带端口号;
      2: 域名设置不要带http://或者https://,末尾不要带"/";
      例如:abc.com

    8. 查看分享是否成功

    以上设置好之后,打开开发者工具,登录后,打开页面,切换到console下面,如果显示如下说明可以愉快的调试分享了:

    clipboard.png

    这块经常会报invalid url domaininvalid signature,出现前者错误就是第7步没有设置对啦,后者这个错误原因有好多,常犯的错误就是签名生成的不对;

    展开全文
  • 微信开发-JS接口微信定位

    千次阅读 2019-01-22 10:39:44
    微信不支持服务端定位,只有JS接口进行实现定位,在这里面记录一下 二、注意 微信定位使用access_token是普通access_token 下图的标红的位置记住必须要写这两个 二、微信定位代码实例 服务端代码 下方需要的...

    一、介绍

    微信不支持服务端定位,只有JS接口进行实现定位,在这里面记录一下

    二、注意

    1. 微信定位使用access_token是普通access_token
    2. 下图的标红的位置记住必须要写这两个

    二、微信定位代码实例

    服务端代码

    下方需要的类cardSignature:https://blog.csdn.net/cl11992/article/details/86589656

    /**
     * 定位
     */
    @ProductException
    @RequestMapping(value = "location")
    public ModelAndView location(HttpServletRequest request, HttpServletResponse response) throws Exception {
    	ModelAndView mv = new ModelAndView("wx/location");// 微信定位页面
    	// 定位
    	String appid = "XXXXXXXXX";//公众号appid
    
    	mv.addObject("config", cardSignature.getSignature(request, appid));
    	return mv;
    }

    location.html

    进入页面自动调用微信定位,查看控制台可以看到微信经度和微信纬度

    <body>
    	<script type="text/javascript" src="${ctx}/js/common/jquery-1.11.3.min.js"></script> 
    	<script type="text/javascript" src="${ctx}/js/JS-SDK.js"></script>
    	<script>
    		wxobj.getLocation(function(longitude, latitude) {
    		    console.log("微信经度:"+longitude);
    		    console.log("微信纬度:"+latitude);
    	    });
    	</script>
    </body>

    JS-SDK.js

    ##  微信接口
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <script type="text/javascript">
    	var wxobj = {
    		//位置服务
    		getLocation : function(callback){
    			//判断当前客户端版本是否支持指定JS接口
    			wx.ready(function(){
    			    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    				wx.checkJsApi({
    					jsApiList: ['getLocation'],
    					success: function(res) {
    						// 以键值对的形式返回,可用的api值true,不可用为false
    						//如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
    						if (res.checkResult.scanQRCode == false) {
    							alert('你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!');
    				            return;
    						}
    						if (res.checkResult.getLocation == false) {
    				            alert('你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!');
    				            return;
    						}
    						wx.getLocation({
    							type: 'wgs84',						// 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
    						    success: function (res) {
    								try{
    							    	console.log("微信data"+res);
    									var latitude = res.latitude; 	// 纬度,浮点数,范围为90 ~ -90
    									var speed = res.speed; 			// 速度,以米/每秒计
    									var accuracy = res.accuracy; 	// 位置精度
    									var longitude = res.longitude;  // 经度,浮点数,范围为180 ~ -180。
    									
    									console.log("微信经度:"+longitude);
    									console.log("微信纬度:"+latitude);
    									
    									callback(longitude, latitude);
    						   		}catch(error){
    						   			alert('解析地理位置错误');
    						   		}
    							},
    							cancel: function (res) {
    						       	alert('用户拒绝授权获取地理位置');
    							},
    							fail:function(res) {
    							    //alert(JSON.stringify(res));
    							    alert("未能获取地理位置,首先检查手机是否启用微信定位");
    							}
    						});
    				       
    				   }
    				});
    			});
    		}
    	};
    	jQuery(function(){ 
    		wx.config({
    		  //  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    		    appId: '$config.appId', // 必填,公众号的唯一标识
    		    timestamp: '$config.timestamp', // 必填,生成签名的时间戳
    		    nonceStr: '$config.nonceStr', // 必填,生成签名的随机串
    		    signature: '$config.signature',// 必填,签名,见附录1
    		    jsApiList: ['openLocation','getLocation'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    		});
    		//wx.ready(function(){
    		    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    		//});
    		//wx.error(function(res){
    		    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    		//});
    		//判断当前客户端版本是否支持指定JS接口
    		//wx.checkJsApi({
    		//    jsApiList: ['chooseImage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
    		 //   success: function(res) {
    		        // 以键值对的形式返回,可用的api值true,不可用为false
    		        // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
    		  //  }
    		//});
    		
    	});
    </script>
    

     

    展开全文
  • 1、在js中开启debug:true调试,调试提示{“errMsg”:"config:ok"}。 *开启后,在分享时,会提示alert出调试信息; *获取的签名正常时,会提示{“errMsg”:"config:ok"}, 分享朋友圈时,会有对应的suc...

    一、问题描述

    微信分享时,分享失败,没有标题和图片;

    *开启debug:true调试,调试提示正常;

    *使用微信开发者工具调试,分享页正常;

    *但使用微信分享,出现分享失败的情况。

     

    二、问题解析

    1、在js中开启debug:true调试,调试提示{“errMsg”:"config:ok"}。

          *开启后,在分享时,会提示alert出调试信息;

          *获取的签名正常时,会提示 {“errMsg”:"config:ok"},

           分享朋友圈时,会有对应的success提示;

          *切记这个debug调试只是能判断获取的签名是否正常,如果后续引用的js中的赋值出现问题,同样会导致分享失败;这就是为什么调试正常,但是却分享失败。

    2  使用微信开发者工具调试,分享页正常;

     微信开发者工具中会提示分享开始和结束的所有信息,详见下图:

    3 经最后调试发现问题,提供的分享链接link(如2中截图),没有"http://"导致最后的分享失败。

    三 总结

    1、分享失败的原因

         *获取的签名错误,可以通过打开调试和微信开发者工具,对获取签名的代码进行一步步调试,比如确定传值获取签名的url要包括http://,并且是动态url;确定微信公众号的appid和appsecret是否一致;确定是否生成了有效的access_token;

    详细排查详见:

    https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62附录5-常见错误及解决方法

    2 如果在生成签名正确的前提下,分享仍然失败,就要考虑js中的link分享链接,js中的分享链接要包括http://,否则会分享失败

    分享的链接必须是js安全域名里中所包含的,如果传参时,没有对link进行赋值,那执行时会默认为当前路径,同样可以分享成功。

    4、最新版的微信分享有所更新,旧版的一些接口即将废弃,可以引用新版微信js和使用新版的方法分享

    5、开发者工具 每个版本的调试效果不同,有的版本的调试效果不给力,可以更换版本看效果。

    展开全文
  • 手把手教你springboot企业微信开发(二)1、企业微信开发第一步2、weixin-java-cp-demo-master1)、引入thymeleaf改造项目2)增加Configuration3)回到企业号4)穿透内外网5)完善 从这一篇开始,开始从实际项目探索...


    从这一篇开始,开始从实际项目探索企业微信开发。

    1、企业微信开发第一步

    看一下企业微信的开发者文档: 企业微信开发者文档.

    在开发文档的首页中,我们看到:企业&定制化服务商开发流程

    1. 获取企业号CorpID&Secret: 企业管理员建立管理组,获取CorpID&Secret
    2. 开发对接相关接口: 开发测试应用,对接企业号接口,接口文档qydev.weixin.qq.com

    企业号的CorpID和Secret,在上一篇已经讲解了,这里不赘述。对接接口的内容,在后面也会使用,暂时按下不表。

    看【主动调用】,文档中有个醒目的获取AccessToken而且备注是:你应该审慎配置管理组的权限,够用即好,权限过大会增加误操作可能性及信息安全隐患。对于我们开发者而言:做好缓存、注意有时间限制7200s。下面还说频率的问题等等,这个也做到心中有数吧。

    我们先把关注点集中在获取access_token上。在项目中,使用get请求获取access_token,请求地址为:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect

    【回调模式】在开发中用的也很多,使用的时候按照文档来吧。

    我在一个项目中,写了一个微信开发的WeixinUtil,java写的未必那么完美。它的作用就是基于主动调用的,来看一下,这里一个推送的实现:

    /**
    	 * 企业号推送文章
    	 */
    sentPushMsg(List<String> userIds , PushMsgEntity pushMsg) {
    		String appid = sysConfigService.getWeixinAppid();
        	String secret = sysConfigService.getWeixinSecret();
    		String agentId = sysConfigService.getParamValue("agentId");
    		
    		String qytoken = apiRedis.getWeAccessToken(appid); //从缓存中获取token
    		if(qytoken == null) {
    			TokenResponse tokenResponse = WeixinUtil.token(appid,secret);
    			try {
    				qytoken = tokenResponse.getAccessToken();
    				apiRedis.setWeAccessToken(appid , qytoken);
    			}catch(Exception e) {
    				return R.error(ErrorCode.WEIXIN_API_GET_TOKEN_ERROR, "微信获取AccessToken失败,请重新获取!");
    			}
    		}
    		MessageCustomArticle article = new MessageCustomArticle();
    		
    		article.setTitle(pushMsg.getTitle());
    		article.setDescription(pushMsg.getMessage());
    		article.setUrl(pushMsg.getUrl());
    		article.setPicurl(pushMsg.getPicurl());
    		
    		MessageCustomSendRequest  messageCustomSendRequest  = WeixinUtil.getMessageCustomSendRequest(userIds , article);
    		if(!StringUtil.isBlank(agentId)) {
    			messageCustomSendRequest.setAgentid(new Integer(agentId));
    		}
    		
    		Response res = WeixinUtil.messageCustomSend(qytoken , messageCustomSendRequest);
    		if(res == null) {
    			//....略去了业务代码
    			return R.error( ErrorCode.SENT_TEMPLATE_MSG_ERROR, "消息发送失败");
    		}else {
    			//....略去了业务代码
    			return R.ok(res.getErrMsg()).put("code", res.getErrCode());
    		}
    		
    	}
    

    大家在自己的项目中,也一定会有自己封装的方式。

    接着上一篇,这里用的是什么呢?我在上一篇里说到,引入weixin-java-cp的Jar包了,这个jar包有非常强悍的作用。

    2、weixin-java-cp-demo-master

    1)、引入thymeleaf改造项目

    在pom.xml中引入spring-boot-starter-thymeleaf

    		<dependency>
    		    <groupId>org.springframework.boot</groupId>
    		    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    		</dependency>
    

    引入之后,application.yml中配置解析html:

    spring:
      thymeleaf:
        prefix: classpath:/templates/
        suffix: .html
        mode: HTML5
        encoding: UTF-8
        servlet:
            content-type: text/html
        cache: false
    

    稍微解释一下,前缀prefix是地址,工程的相对路径,这边是404错误的根据地了吧,哈哈哈,得注意编译和请求得路径啊;后缀suffix需要spring解析的模板后缀,这里是html。mode、encoding、wevlet、cache就不说了哦。

    在thymeleaf目录下,新建一个文件夹,thymeleaf,在文件夹中,新建一个first.html

    <!DOCTYPE HTML>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>first</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    </head>
    <body>
    <p th:text="'Url:' + ${Url}"/>
    <p th:text="'Error:' + ${Error}"/>
    <p th:text="'Message:' + ${Message}"/>
    <p th:text="'Exception:' + ${Exception}"/>
    <p th:text="'Path:' + ${Path}"/>
    <p th:text="'Status:' + ${Status}"/>
    <p th:text="'Timestamp:' + ${Timestamp}"/>
    </body>
    </html>
    

    看一下文件目录结构:

    在这里插入图片描述
    新建一个ThemleafController.java,内容是:

    package com.github.binarywang.demo.wx.cp.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    @RequestMapping("/thymeleaf")
    public class ThemleafController {
    
    	  @GetMapping(value = "/first")
    	  public String first(Model model) {
    		model.addAttribute("Url", "thymeleaf/first");
    		model.addAttribute("Error", "0");
    		model.addAttribute("Path", "");
    		model.addAttribute("Message", "");
    		model.addAttribute("Exception", "");
    		model.addAttribute("Status", "");
    		model.addAttribute("Timestamp", System.currentTimeMillis());
    	    return "/thymeleaf/first";
    	  }
    
    }
    

    改一手application.yml

    server:
      port: 8080
    

    debug模式启动WxCpDemoApplication.java
    在浏览器中输入http://localhost:8080/thymeleaf/first

    在这里插入图片描述
    出来它就可以了。

    2)增加Configuration

    springboot在很多配置项简洁得让人摸不着头脑,这里是基于springboot不得不说的就是这个,先上代码,然后解释:

    package com.github.binarywang.demo.wx.cp.config;
    
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    public class WebMvcConfig implements WebMvcConfigurer{
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        }
    }
    

    这个Java文件的意思是以静态资源的形式访问/static/文件夹下的所有文件。
    /static/**使用了**作为通配符。但是,并没有static文件夹,对吗?建立一个static文件夹,看一下项目结构:
    在这里插入图片描述

    在里面放个txt文件文件名叫who_love_who.txt,文件里面写上自己喜欢的人的名字,文件名的话用我们的代码来试试看TA对你是否有意,哈哈哈。我的文件里面写的是:天赐我爱-love-天赐我爱。写好了测试文件,现在的项目结构是:
    在这里插入图片描述

    重新debug
    WxCpDemoApplication.java
    启动好了之后,在浏览器输入:
    http://localhost:8080/who_love_who.txt
    我这边的是:
    在这里插入图片描述
    看到是乱码,我就放心了,她是爱谁谁,与我这单身技术狗无关!差不多了哦!配置起作用了。

    3)回到企业号

    回到企业号。找到上篇手把手教你springboot企业微信开发(一)中的应用配置页:
    在这里插入图片描述
    拉到下面:
    【开发者接口】–》点开【网页授权及JS-SDK】
    在这里插入图片描述
    点,【 下载文件】的链接,下载了一个txt文件吧?好!这个文件,放到我之前说的那个static文件夹!现在的static文件夹:
    在这里插入图片描述
    是否疑问,我在大费周章在搞thymeleaf、txt静态资源是为了什么呢?下面细细说这个。

    4)穿透内外网

    访问链接: https://natapp.cn/login.
    注册~~~购买,不不不申请免费隧道:
    在这里插入图片描述
    天底下最好的东西,一定的免费的,阳光是免费的、空气是免费的,爱也是免费的。点开刚刚申请的隧道:
    在这里插入图片描述
    端口用个8080;authtoken复制备用。下载客户端:
    在这里插入图片描述
    自己选择吧。
    下载完了,自己创建一个文件夹,就叫natapp得了,在里面放个文件,文件名config.ini在里面的配置:

    #将本文件放置于natapp同级目录 程序将读取 [default] 段
    #在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
    #命令行参数 -config= 可以指定任意config.ini文件
    [default]
    authtoken=myauthtoken                     #对应一条隧道的authtoken
    clienttoken=                    #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
    log=none                        #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
    loglevel=ERROR                  #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
    http_proxy=                     #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
    

    刚才我说复制的authtoken,粘贴在这里。打开natapp.exe有木有什么?
    在这里插入图片描述
    有类似这个吗?如果是那行的意思是:现在这个域名,已经穿透到了你本地的8080端口。
    好,把我画线的部分复制到浏览器:
    是不是有这样的画面:
    在这里插入图片描述
    有的话,说明穿透成功了。把http://域名/thymeleaf/first复制下来,编码:
    链接: url编码.把编码后的这段复制备用。把域名(不带http://的)复制下来备用。

    5)完善

    在pom.xml中引入jar包:

    		<dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.45</version>
            </dependency>
    

    引入这个fastjson是为了解析返回的字符串。

    自动注入:

    @Autowired
    WxCpProperties wxCpProperties;
    

    修改first方法:

     @GetMapping(value = "/first")
    	  public String first(ServletRequest request, ServletResponse response, Model model) {
    		  
    		  HttpServletRequest servletRequest = ((HttpServletRequest) request);
    		  String userAgent = servletRequest.getHeader("user-agent");
    		  
    		  final WxCpService wxCpService = WxCpConfiguration
    					.getCpService(wxCpProperties.getAppConfigs().get(0).getAgentId());
    
    			
    			String queryString = servletRequest.getQueryString();
    			String backString = "";
    			try {
    				backString = HttpRequest.sendGet("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token="
    						+ wxCpService.getAccessToken() + "&" + queryString, null);
    			} catch (WxErrorException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			JSONObject json_test = JSONObject.parseObject(backString);  
    		  
    		model.addAttribute("Url", "thymeleaf/first");
    		model.addAttribute("Error", "0");
    		model.addAttribute("Path", "");
    		model.addAttribute("Message", "");
    		model.addAttribute("Exception", "");
    		model.addAttribute("Status", "");
    		model.addAttribute("Timestamp", System.currentTimeMillis());
    	    return "/thymeleaf/first";
    	  }
    

    这里用的HttpRequest.java是我自己写的:

    package com.github.binarywang.demo.wx.cp.utils;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLSession;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class HttpRequest {
    	
    	public static Logger logger = LoggerFactory.getLogger(HttpRequest.class);
    	
    	/**
    	 * 向指定URL发送GET方法的请求
    	 * 
    	 * @param url
    	 *            发送请求的URL
    	 * @param param
    	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    	 * @return URL 所代表远程资源的响应结果
    	 */
    	public static String sendGet(String url, Map params) {
    		return sendGet(url,"", params);
    	}
    	/**
    	 * 向指定URL发送GET方法的请求
    	 * 
    	 * @param url
    	 *            发送请求的URL
    	 * @param param
    	 *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    	 * @return URL 所代表远程资源的响应结果
    	 */
    	public static String sendGet(String url,String interfaceName, Map params) {
    		String result = "";
    		BufferedReader in = null;
    		StringBuffer strBufParamsSet = new StringBuffer();
    		
    		if(params!=null) {
    			Set<String> paramsSet = params.keySet();
    			
    			for(String parma:paramsSet) {
    				if(strBufParamsSet.length()>0) {
    					strBufParamsSet.append("&").append(parma).append("=").append(params.get(parma));
    				}else {
    					strBufParamsSet.append("?").append(parma).append("=").append(params.get(parma));
    				}
    			}
    		}else {
    			strBufParamsSet.append("");
    		}
    		
    		
    		try {
    			String urlNameString = "";
    			if(interfaceName==null || "".contains(interfaceName.trim())) {
    				urlNameString = url + strBufParamsSet.toString();
    			}else {
    				urlNameString = url +"/"+ interfaceName + strBufParamsSet.toString();
    			}
    			urlNameString = urlNameString.replaceAll("\r\n", "");
    			trustAllHttpsCertificates();
    			logger.info("请求路径:" + urlNameString);
    			URL realUrl = new URL(urlNameString);
    			// 打开和URL之间的连接
    			URLConnection connection = realUrl.openConnection();
    			// 设置通用的请求属性
    			connection.setRequestProperty("accept", "*/*");
    			connection.setRequestProperty("connection", "Keep-Alive");
    			connection.setRequestProperty("Accept-Charset", "UTF-8");
    			connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    			// 建立实际的连接
    			connection.connect();
    			// 获取所有响应头字段
    			Map<String, List<String>> map = connection.getHeaderFields();
    //			// 遍历所有的响应头字段
    //			for (String key : map.keySet()) {
    //				System.out.println(key + "--->" + map.get(key));
    //			}
    			// 定义 BufferedReader输入流来读取URL的响应
    			in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    			String line;
    			while ((line = in.readLine()) != null) {
    				result += line;
    			}
    		} catch (Exception e) {
    			logger.debug("发送 get请求出现异常!获取文件流失败:" + e);
    			
    		}
    		// 使用finally块来关闭输入流
    		finally {
    			try {
    				if (in != null) {
    					in.close();
    				}
    			} catch (Exception e2) {
    				logger.debug("发送 get请求出现异常!获取文件流失败:" + e2);
    			}
    		}
    		return result;
    	}
    
    	
    
    	private static void trustAllHttpsCertificates() throws Exception {  
            javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];  
            javax.net.ssl.TrustManager tm = new miTM();  
            trustAllCerts[0] = tm;  
            javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext  
                    .getInstance("SSL");  
            sc.init(null, trustAllCerts, null);  
            javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc  
    				                .getSocketFactory());
    
    		HostnameVerifier hv = new HostnameVerifier() {
    			public boolean verify(String urlHostName, SSLSession session) {
    				System.out.println("Warning: URL Host: " + urlHostName + " vs. "
    								   + session.getPeerHost());
    				return true;
    			}
        	};
    		HttpsURLConnection.setDefaultHostnameVerifier(hv);
        }  
    			  
        static class miTM implements javax.net.ssl.TrustManager,
    			            javax.net.ssl.X509TrustManager {  
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {  
                return null;  
            }  
      
            public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
                return true;  
            }  
      
            public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
                return true;  
            }  
      
            public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
                    throws java.security.cert.CertificateException {  
                return;  
            }  
      
            public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
                    throws java.security.cert.CertificateException {  
                return;  
            }  
        }  
    }
    

    到了这一步,把
    再回企业微信应用配置的页面,复制这个:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=appIdf&redirect_uri=编码后的域名&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    复制到:【工作台应用主页】里面去。
    复制域名到【网页授权及JS-SDK】:
    在这里插入图片描述
    勾选【已上传域名归属校验文件】,【确定】!
    点:【企业微信授权登录】已启用–》Web网页–》
    在这里插入图片描述
    编辑填入域名
    好了之后,debug重启:WxCpDemoApplication.java并且在这行打断点:
    在这里插入图片描述

    在企业微信中打开:
    在这里插入图片描述
    点进去自己的应用,如果进断点,看backString,是不是与我类似:
    在这里插入图片描述
    如果看到返回值与我类似的,恭喜,已经完成了!!!如果有疑问或者需要讨论,或者报错的不好解决的话,给我留言即可。
    附上我这边最终的画面:
    在这里插入图片描述
    另外,稍微看一下natapp的情况,那里有请求的情况:
    在这里插入图片描述
    好了,这一篇也结束了。

    展开全文
  • 微信开发(二)--上传图片和附件

    千次阅读 2018-06-22 11:11:36
    今天整理一下微信开发中遇到的图片和附件的上传问题。 开发环境参考:微信开发(一)--分享接口 点击打开链接 由于是基于weixin-java-tools 封装的java sdk,所以在微信底层处理上我们可以直接调用WxMpService. ...
  • 调用config 接口的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息。以下为常见错误及解决方法: 1、 invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,...
  • 项目里面需要用到用户通过网址来进行授权 需要用到微信的扫码(请用微信...微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选
  • 微信网页开发JS-SDK初使用

    千次阅读 2019-02-21 15:23:05
    最近需要做一个页面,该页面使用微信浏览器打开,功能如下: 1、用户打开链接之后获取到用户的openId,用于支付、获取后台数据等场景 2、自定义分享链接、标题、图标、描述等 3、隐藏微信页面中的某些菜单项列表 ...
  • 最近项目中的网页通过微信分享朋友或朋友圈等功能出现了无法显示分享图片等信息,后经过排查发现是微信版本升级导致,采用js-sdk完成分享接口,为了快速实现该功能效果,于是我打算通过前台js进行实现来看看分享效果...
  • 微信小程序debug

    2019-10-25 09:09:09
    微信小程序开始学习与开发的过程中,总有一些东西,想看看它跑起来的内容与我们编程时想的是否一致,于是就想到了能不能单步调试或者打出一些我们想要的变量的内容,以便我们做进一步的开发和调整,现在我就要介绍...
  • 微信JSSDK引入微信开发

    千次阅读 2016-07-15 11:08:47
    微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券...
  • js使用微信分享功能

    千次阅读 2019-03-26 16:43:55
    在使用微信分享(包括微信api里的其他方法)之前,需要有一些准备、比如要准备 appId、timestamp、nonceStr、signature 这四个数据,只有在有这四个字段后,我们才可以去使用微信的一些方法和功能, 但这些东西是不能...
  • 本问主要介绍微信网页webapp开发过程中引入微信jssdk的坑 1.基本配置 毫无疑问,请参照官方文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;amp;id=mp1421141115 注:一般最容易出现问题的是步骤...
  • 微信开发者工具调试大法

    万次阅读 2019-01-24 11:44:29
    于是开始学习微信小程序开发文档,下载微信开发者工具,进行开发了。开发过程中需要调试,开始只是打日志或者断言,觉得很不方便,希望跟IDEA一样的调试器,于是摸索如下: 第一步:打断点,我们必须在我们想要它停下来的...
  • 1.概述 企业微信上是这样介绍的。不过经本人的研究测试,该工作流引擎的功能是比较有限的。 首先只有移动端才能发起,...2.企业微信开发基础 文档链接: https://work.weixin.qq.com/api/doc#90000/90135/90665...
  • 首先请阅读微信JS-SDK说明文档,了解微信JS的相关说明。 根据官方的使用步骤,关键的有以下几步绑定域名(很关键)引入JS文件(很简单)通过config接口注入权限验证配置(很重要)通过ready接口处理成功验证(还...
  •  微信JS-SDK说明文档 。 二、编辑模式嵌入网页 在公众号平台下,自定义菜单,添加菜单,并选择菜单内容跳转到指定页面地址即可(需认证后方可添加页面地址,个人账号暂不支持认证)。 三、开发者模式嵌入网页...
  • 前段时间由于工作需要有几个H5活动页要在微信上分享到朋友圈,分享给朋友,但是发现分享出去的都是系统默认的图片和默认的document.title,那么想要自定义这部分内容,就需要看微信公众平台的开发文档 点击打开微信...
  • 一般涉及和第三方的开发调试,都会比较麻烦些。不过,像微信这样的大公司呢,产品技术是过硬的,所以,基本上只要自己把文档看仔细了,弄好了,基本就没有问题了。  对于后端接口一类的调试,主要就是通过打印访问...
1 2 3 4 5 ... 20
收藏数 4,549
精华内容 1,819
关键字:

debug js错误 微信开发