配置微信公众号二次开发接口java代码
2016-06-15 00:00
585 查看
想做微信二次开发的朋友、看完这篇、配置接口应该没问题了。
微信公众平台开发概述
微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过阅读本接口文档来帮助开发。为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID,可以在用户管理-获取用户基本信息(UnionID机制)文档了解详情。
请开发者注意:
1、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。
2、在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。
3、在开发过程中,可以使用接口调试工具来在线调试某些接口。
4、每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。
5、在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台官网-开发者中心处可以设置接口报警),来发现和解决问题。
6、公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token,access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限,开发者需自行存储,详见获取接口调用凭据(access_token)文档。
7、公众平台接口调用仅支持80端口。
接入概述
接入微信公众平台开发,开发者需要按照如下步骤完成:1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑
下面详细介绍这3个步骤。
第一步:填写服务器配置
登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档。
servlet类
package com.wexin; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.czy.util.CheckUtil; /** * Servlet implementation class Test * @author 陈郑游 * 2016-05-14 */ public class Test extends HttpServlet { private static final long serialVersionUID = 1L; /** * 接口验证接口 * * */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); //获取属性:微信加密签名|时间戳|随机数|随机字符串 String signature = request.getParameter("signature"); String timestamp = request.getParameter("timestamp"); String nonce = request.getParameter("nonce"); String echostr = request.getParameter("echostr"); //判断输出字符串 if(CheckUtil.checkSignature(signature,timestamp,nonce)){ out.print(echostr); } } /** * 请求响应 * * */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 将请求、响应的编码均设置为UTF-8(防止中文乱码) request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 调用核心业务类接收消息、处理消息 String testservice = TestService.processRequest(request); // 响应消息 PrintWriter out = response.getWriter(); out.print(testservice); out.close(); //后台测试 System.out.println(testservice); } }
token、字符串排序
package com.czy.util; import java.util.Arrays; /** * 连接微信接口工具类: * 开发者通过检验signature对请求进行校验(下面有校验方式)。 * 若确认此次GET请求来自微信服务器,请原样返回echostr参数内容, * 则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下: * 1)将token、timestamp、nonce三个参数进行字典序排序 * 2)将三个参数字符串拼接成一个字符串进行sha1加密 * 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 * * */ public class CheckUtil { private static final String token = "chenzy"; //获取三个参数 public static boolean checkSignature(String signature,String timestamp,String nonce){ //数组 String[] arr=new String[]{token,timestamp,nonce}; //排序(将token、timestamp、nonce三个参数进行字典序排序) Arrays.sort(arr); //生成字符串 StringBuffer content = new StringBuffer(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } //sha1加密(将三个参数字符串拼接成一个字符串进行sha1加密) String temp = sha1Dom.getSha1(content.toString()); //返回signature(开发者获得加密后的字符串可与signature对比,标识该请求来源于微信) return temp.equals(signature); } }
sha1加密代码:工具包(网上都有下载就好了)
package com.czy.util.dom; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; //sha1加密代码:工具包 public class sha1Dom { //sha1加密 public static String getSha1(String str){ if (null == str || 0 == str.length()){ return null; } char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char[] buf = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } }
在介绍一个映射工具:ngrok
为给url做映射用的: http://www.tunnel.mobi/ 自己下载
在CMD命令中先切换到ngrok所在的位置再进行如下操作
方法一:ngrok 8080(该方法已被和谐掉了)
方法二:ngrok -config ngrok.cfg -subdomain example 80
说明:
example-自己任意设置;
8080-tomcat的端口号
相关文章推荐
- 仿微信"个人头像"
- 又一波经典小程序
- js api 微信支付 chooseWXPay:fail
- 类似QQ、微信、微博的WeiBoLayout
- 教你在微信公众号中加入订单、预约、登记、投诉和反馈等功能
- 微信支付集成
- 微信公众帐号开发-消息的接收与响应
- 微信端支付宝支付,iframe改造,解决微信中无法使用支付宝付款和弹出“长按地址在浏览器中打开”
- 微信公众号开发
- 微信企业号_开通企业客服功能实现
- 微信企业号开发总结
- 微信在线调试
- 如何有效的监控微信公众号发布的文章的阅读数和点赞数变化
- 微信扫码支付的坑(android)
- C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理
- [微信开发]打通微信公众平台到开发者服务器的第一道屏障
- 微信支付
- 微信处理类
- 微信消息类
- 【福利将至】iPhone用户可用Siri发微信了