• 因为自己平时开了Lantern代理,今天打开微信开发者工具突然显示网络连接失败,二维码也刷新不出来,如下图所示: 解决方法 1.点击"设置"->“代理设置”,如下图 2.软件默认代理设置为“使用系统代理”,如下图...

    问题描述

    因为自己平时开了Lantern代理,今天打开微信开发者工具突然显示网络连接失败,二维码也刷新不出来,如下图所示:

    解决方法

    1.点击"设置"->“代理设置”,如下图

    2.软件默认代理设置为“使用系统代理”,如下图

    将其修改为“不使用任何代理,勾选后直连网络”,如下图

    3.修改后点击屏幕上的刷新按钮即可,如下图

    如果还不能上网的话,就请关闭代理,然后重置系统网络配置:
    1.右键命令提示符,选择以管理员身份运行

    2.输入"netsh winsock reset",回车

    3.重启电脑,重新打开微信开发者工具即可。
    展开全文
  • 在使用微信小程序开发工具时,提醒我有版本更新,然后我就更新了,再然后······再然后就打不开了,刚开始显示未知错误,在网上找了很多办法都没有解决,于是卸载重新安装,重装也不行,如果不是因为电脑上有...

    在使用微信小程序开发工具时,提醒我有版本更新,然后我就更新了,再然后······再然后就打不开了,刚开始显示未知错误,在网上找了很多办法都没有解决,于是卸载重新安装,重装也不行,如果不是因为电脑上有好多应用再重装太麻烦,我就重装系统了(~~~~~~)

    重装了几遍之后,问题又成了网络连接失败,终于在一遍重装时发现安装提示,在安装过程中应该将其他程序关闭,于是重启了电脑,保证所有的程序都没有启动,然后重新安装,此次安装就成功了,可以正常运行

    展开全文
  • 微信开发之难点解析

    2015-12-13 21:57:03
    微信开发就是调用接口。这个难点就是调用接口时需要验证,必须按照微信要求的验证规则验证成功后才能调用接口。那么以我开发的微信小项目总结一下微信开发的难点。 1.微信开发属于web开发,要选合适的语言 尽管web...

    微信开发就是调用接口。这个难点就是调用接口时需要验证,必须按照微信要求的验证规则验证成功后才能调用接口。那么以我开发的微信小项目总结一下微信开发的难点。

    1.微信开发属于web开发,要选合适的语言

    尽管web开发有众多的语言,但是我觉得有必要提醒尽量选择主流、合适的语言。通过微信给的例子支持的语言就可以看出个一二三。PHP,jsp我觉得貌似比较主流,其他的语言也能做,可能没那么有优势吧。

    2.微信接口调用验证

    这个我觉得稍微有点难或者说繁,因为接口调用很好办,直接调用。而验证往往需要验证你的身份、权限各种(其实这也是微信为了安全起见、掌握控制权的体现)。解决这个问题我觉得直接阅读开发者文档最有效,文档里面也说的很明确。

    3.调试技巧

    如果你没有web程序的开发经验,你可能会忽视调试的作用。我曾经也想当然地回避调试,就各种看、想,硬把程序调对,后来发现web程序的调试很有技巧,如果掌握了会极大地加快开发速度。就比如我验证jssdk时,一直找不出错误。后来我运行网页,右键点击审查元素,就可以检查自己运行时的代码,进而找到了为什么验证不成功。

    微信开发其实并不难,开发者文档我觉得是最好的参考资料,同时注意网络程序的安全性,以及相关网络程序开发的技巧就可以了。

    展开全文
  • 手把手教你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的情况,那里有请求的情况:
    在这里插入图片描述
    好了,这一篇也结束了。

    展开全文
  • 微信开发的第一步就是要打通本地开发环境与微信服务器之间通道,所以我们在将内网(本地)端口映射到外网后,还要有一种特定的暗号来与微信服务器对接,就是加密认证。 在接口配置信息中填入自己的外网代理地址和自...

    微信开发的第一步就是要打通本地开发环境与微信服务器之间通道,所以我们在将内网(本地)端口映射到外网后,还要有一种特定的暗号来与微信服务器对接,就是加密认证。

    在接口配置信息中填入自己的外网代理地址和自定token后,点击确认提交按钮,实际上微信服务器会向我们发送一个认证请求,其中包含:signature,nonce,timestamp,echostr

    {
        signature: 'xxxxxxxxxxxxxxxxx',
        nonce: 'xxxxxxxxxxxxxxxxxx',
        timestamp: 'xxxxxxxxxxxxxxxxxxxxxx',
        echostr: 'xxxxxxxxxxxxxxxxxxx'
    }
    

    而要求我们返回的响应消息是echostr,微信接收到匹配的响应消息就表示接头成功。

    但是处于安全考虑,我们本地(内网)地址是暴露到外网的,谁都能进来溜溜,所以我们也需要判断这个请求是否属于微信服务器,判断逻辑如下:

    1 将token、timestamp(时间戳)nonce(随机数)三个参数进行字典排序
    2 将三个参数数字字符串拼接成一个字符串进行sha1加密
    3 将加密后的字符串与signature对比,如果相同,表示这个请求来源于微信

    代码如下:

    var str = [token,timestamp,nonce].sort().join('');
    var sha = Sha1(str);
    
    if (sha === signature) {
      this.body = echostr
    }else {
      this.body = 'wrong'
    }

    微信加密认证的过程其实非常简单,但我们要注意代码不能敲错,出现配置错误第一步是查看控制台,请求有没有发过来,然后检查代码拼写

    通常会把加密认证做成中间件来简化代码逻辑,这里不做阐述。

    展开全文
  • 本课程是一个系列入门教程,目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件、页面样式文件、JavaScript 的基本知识并以指南针为例对基本知识进行扩展,另外加上开发工具的安装...
  • csdn-微信开发

    2018-01-06 11:12:27
    1 .[025] 微信公众帐号开发教程第1篇-引言 2 .[028] 微信公众帐号开发教程第4篇-消息及消息处理工具的封装 ...微信开发 – 自定义菜单 7 .微信支付.NET版开发总结(JS API),好多坑,适当精简。 8 .一名An
  • 开发过程中,会遇到很多微信返回的状态码,鬼知道代表什么意思,现在好了,整理总结了一份状态码,方便大家。 转载:http://www.yiyongtong.com/archives/view-1856-1.html 微信小程序错误码参考 状态码...
  • 参数错误有四种情况: 1、url地址错误,检查地址前后是否有空格。 2、token错误,检查token口令是否正确,同时检查空格问题。 3、url地址被微信屏蔽,确诊方法是将地址复制到手机微信,然后点击访问。如果不能...
  • 微信开发sdk协议

    2019-05-22 15:12:50
    微信开发sdk协议,出自冬天不穿秋裤,天冷也要风度的程序猿之手,必属精品! 一、网络通讯协议 如上图,采用 datalength+databytes 的自定义长度的协议,其中: datalength:紧跟其后的databytes的数据长度(不...
  • 今天学习了一下微信小程序的入门开发,在使用网络请求时,发现根据微信官方的API的方法进行操作出现Invalid request 400错误,到底怎么回事呢? 首先我们来看微信API网络请求 示例代码: wx.request({ url: 'test....
  • 申请的SAE 用来微信开发,填写完URL TOKEN后总会莫名其妙的爆出配置失败 如下的错误 出现这种原因有如下的原因 ,,看你中招了没 。。。 (1)最基本的检查这两个地方是否正确(怎么检查 不用我说吧) (2)当发现上面的...
  • 利用微信开发者工具开发商城类微信小程序,开发微信支付必不可少,但微信支付api开发文档说明压根看不懂,自己摸索,运行报错找不到错误代码解决方法 先说说我的开发流程吧 小程序前端——小程序js网络请求php后台...
  • 本文来自作者 jerry 在 GitChat 上分享「如何通过微信开发实现财富自由」,「阅读原文」查看交流实录 「文末高能」 编辑 | 嘉仔 相信很多人看到这个标题会想,简直是哗众取宠,标题党。 为什么...
  • 微信公众号主要有以下几个步骤 微信公众号的通讯机制 微信公众号简介 1.注册微信公众号 2.注册测试公众号 3.搭建微信本地调试环境 1)下载客户端natapp: 2)安装natapp: 4.微信公众号接入(校验签名) 第1步中...
  • 微信与支付宝开发问题总结 1.先说微信 首先需要明确的问题是:微信公众号,微信开放平台...切记:微信开发,坑真的是很深很深,本人也是苦苦挣扎,经过了一段时间的摸索终于脱坑了。所以记下这段探索之路,给大家参考
  • 微信开发者工具首次登录,显示网络连接失败 首次打开是下面这样 电脑是64位的操作系统,所以一直下的是64位的版本,查看网上的解决办法:删除重新安装,换一个路径重新安装等等方法,均无效,就在解决无望的时候 ...
  • 在v0.14.140900版本的wechat小程序开发工具中做网络请求,直接使用微信网络请求代码debug过程中发生了400 (Bad request)错误。wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '' ...
  • 下载安装 Wireshark (我使用的是 Wireshark 0.9989) 1.下载地址:https://www.wireshark.org/download.html 2.需要注意: 选择安装选项时记得勾选 Tools --> Androiddump,其他直接下一步就可以了 ...
  • 本文节选自苏震巍撰写的《微信开发深度解析:微信公众号、小程序高效开发秘籍》一书,由电子工业出版社出版。 责编:陈秋歌,关注微信开发等领域,寻求报道或者投稿请发邮件至chenqg#csdn.net。 MessageHandler 是...
1 2 3 4 5 ... 20
收藏数 30,136
精华内容 12,054