微信静默授权,利用花生壳在本地测试
2016-12-07 11:39
507 查看
本文章包括两个部分,第一部分是微信静默授权,第二部分利用花生壳在本地测试。
一、静默授权,用户无感知;
1、首先确定好请求哪个URL需要获取授权,然后在配置文件配置拦截器,拦截此请求,获取openid后传给control层;
2、静默授权分为两部分,一个是获取code,根据code获取openid,具体代码如下:
二、利用花生壳在本地测试;
1、进入花生壳官网,http://hsk.oray.com/download/,下载花生壳最新版3.0;2.8稳定版会出各种问题,进行实名认证;实名认证后会赠送一个免费域名;
注册完成,实名认证后,选择中间的内网穿透;填写本地ip地址;然后点击自诊断,是否成功;
2、在微信公众号后台,配置网页授权域名;配置在花生壳获取的免费域名;如图
在接口权限列表中;点击网页授权后的修改按钮;
将红框中的txt文件下载后放在服务器项目根目录下;
完成。
就可以在微信手机客户端访问了。http://1e613198u2.51mypc.cn/winterCamp/list。
一、静默授权,用户无感知;
1、首先确定好请求哪个URL需要获取授权,然后在配置文件配置拦截器,拦截此请求,获取openid后传给control层;
<mvc:interceptor> <mvc:mapping path="/winterCamp/myBaby"/> <mvc:mapping path="/winterCamp/new"/> <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 --> <bean class="com.redcooo.site.web.interceptors.WeChatInterceptor"/> </mvc:interceptor>
2、静默授权分为两部分,一个是获取code,根据code获取openid,具体代码如下:
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"; String redirectUrl = request.getRequestURL().toString(); String openid = (String) request.getSession().getAttribute("openid"); String code = request.getParameter("code"); log.debug("get openid start" + code); if (StringUtils.isNotBlank(code)) { try{ String newOpenid = WeixinUtil.getOpenIdByHtmlToken(code); request.getSession().setAttribute("openid", newOpenid); }catch (Exception e){ e.printStackTrace(); } } else if(StringUtils.isBlank(openid)){ String domain = redirectUrl; domain = URLEncoder.encode(domain, "UTF-8"); String requestUrl = url.replace("APPID", ConstantWeChat.APPID) .replace("REDIRECT_URI", domain); redirectUrl = requestUrl; log.debug("redirectUrl[{}]", redirectUrl); response.sendRedirect(redirectUrl); return false; } return true; }
/** * 发起https请求并获取结果 * * @param requestUrl * 请求地址 * @param requestMethod * 请求方式(GET、POST) * @param outputStr * 提交的数据 * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) */ public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = null; StringBuffer buffer = new StringBuffer(); try { // 创建SSLContext对象,并使用我们指定的信任管理器初始化 TrustManager[] tm = { new MyX509TrustManager() }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); // 从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection httpUrlConn = (HttpsURLConnection) url .openConnection(); httpUrlConn.setSSLSocketFactory(ssf); httpUrlConn.setDoOutput(true); httpUrlConn.setDoInput(true); httpUrlConn.setUseCaches(false); // 设置请求方式(GET/POST) httpUrlConn.setRequestMethod(requestMethod); if ("GET".equalsIgnoreCase(requestMethod)) { httpUrlConn.connect(); } // 当有数据需要提交时 if (null != outputStr) { OutputStream outputStream = httpUrlConn.getOutputStream(); // 注意编码格式,防止中文乱码 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // 将返回的输入流转换成字符串 InputStream inputStream = httpUrlConn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader( inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader( inputStreamReader); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } bufferedReader.close(); inputStreamReader.close(); // 释放资源 inputStream.close(); inputStream = null; httpUrlConn.disconnect(); jsonObject = JSONObject.fromObject(buffer.toString()); } catch (ConnectException ce) { log.error("server connection timed out."); } catch (Exception e) { log.error("https request error:", e); }finally{ // 讲发送内容及结果写入数据库 // TODO } return jsonObject; } /** * 将微信消息中的CreateTime转换成标准格式的时间(yyyy-MM-dd HH:mm:ss) * * @param createTime * 消息创建时间 * @return String */ public static String formatTime(String createTime) { // 将微信传入的CreateTime转换成long类型,再乘以1000 long msgCreateTime = Long.parseLong(createTime) * 1000L; DateFormat fo 4000 rmat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return format.format(new Date(msgCreateTime)); } public static String getOpenIdByHtmlToken(String code){ String openid = "ov5KSuHjtkGq2sMhVyC1s8mpJV-M"; if(StringUtils.isBlank(code)){ return openid; } String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; String requestUrl = url.replace("APPID", ConstantWeChat.APPID).replace("SECRET", ConstantWeChat.APPSECRET).replace("CODE", code); JSONObject rtnJson = httpsRequest(requestUrl, "POST", null); if(rtnJson.get("errCode") == null){ openid = rtnJson.get("openid").toString(); return openid; }else{ String errCode = rtnJson.get("errCode").toString(); String errmsg = rtnJson.get("errmsg").toString(); log.error("get openid error. errCode["+errCode+"], errmsg["+errmsg+"]"); return null; } }
二、利用花生壳在本地测试;
1、进入花生壳官网,http://hsk.oray.com/download/,下载花生壳最新版3.0;2.8稳定版会出各种问题,进行实名认证;实名认证后会赠送一个免费域名;
注册完成,实名认证后,选择中间的内网穿透;填写本地ip地址;然后点击自诊断,是否成功;
2、在微信公众号后台,配置网页授权域名;配置在花生壳获取的免费域名;如图
在接口权限列表中;点击网页授权后的修改按钮;
将红框中的txt文件下载后放在服务器项目根目录下;
完成。
就可以在微信手机客户端访问了。http://1e613198u2.51mypc.cn/winterCamp/list。
相关文章推荐
- 微信平台开发之利用本地环境加新花生壳解释做测试环境
- 微信公众平台申请测试接口URL和TOKEN的配置,怎么在本地让微信能通过80端口访问
- 微信公众平台申请测试接口URL和TOKEN的配置,怎么在本地让微信能通过80端口访问
- 微信 网页授权 本地开发配置
- 微信第三方登录与静默授权
- 利用本地服务器发布网站,IIS配置+花生壳映射服务(附带视频)
- firfox控制host文件插件,利用域名劫持测试本地测试线上网页代码
- 微信测试号的开发——网页授权
- 微信开发 网页应用 本地测试环境的搭建(多图)
- 微信如何搭建本地测试环境
- 端口映射工具:ngrok的使用(可用于本地测试微信)
- 微信公众平台申请测试接口URL和TOKEN的配置,怎么在本地让微信能通过80端口访问
- 【微信开发】一获取用户授权(静默授权方式)
- yershop商城系统Thinkphp开发(四)——微信篇1:微信公众号静默授权注册及获取用户信息
- 微信本地开发测试环境
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
- 微信公众平台申请测试接口URL和TOKEN的配置,怎么在本地让微信能通过80端口访问
- 微信网页静默授权(scope=snsapi_base),这种方式不需要用户手动同意
- 微信接口开发之高级篇系列【网页授权详细说明【提供测试账号使用】】
- 微信开发——本地测试环境搭建