700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信公众平台开发者模式(1)JAVA版接入

微信公众平台开发者模式(1)JAVA版接入

时间:2020-04-07 05:06:48

相关推荐

微信公众平台开发者模式(1)JAVA版接入

接入必须的参数

URL服务器地址用于接受微信消息和事件(http://……./servlet/MyServlet

servlet/MyServlet为web.xml中你配置的url-pattern)

<servlet><servlet-name>MyServlet</servlet-name><servlet-class>servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/servlet/MyServlet</url-pattern></servlet-mapping>

Token开发者任意填写,与服务器中设置的Token一致

EncodingAESKey 43位随机数可手动填写或随机生成用户消息的加密解密

服务器我用的阿里云ACE,免费的有百度和新浪BAE、SAE不过要实名认证不然很坑!

服务器代码

servlet.java代码

接入微信端时,微信端发送GET请求

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {logger.error("doget--接入微信校验------->:");// 微信加密签名String signature = request.getParameter("signature");// 时间戮String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");PrintWriter out = response.getWriter();// 通过检验 signature 对请求进行校验,若校验成功则原样返回 echostr,表示接入成功,否则接入失败if (SignUtil.checkSignature(signature, timestamp, nonce)) {out.print(echostr);}out.close();out = null;}

SignUtil.java

/*** 接入微信时的校验* * @author admin* */public class SignUtil {/*** 与接口配置信息中的 token 要一致,这里赋予什么值,在接口配置信息中的Token就要填写什么值,* 两边保持一致即可,建议用项目名称、公司名称缩写等,我在这里用的是项目名称weixinface*/private static String token = "weixin";/*** 验证签名* * @param signature* @param timestamp* @param nonce* @return*/public static boolean checkSignature(String signature, String timestamp, String nonce) {String[] arr = new String[] { token, timestamp, nonce };// 将 token, timestamp, nonce 三个参数进行字典排序Arrays.sort(arr);StringBuilder content = new StringBuilder();for (int i = 0; i < arr.length; i++) {content.append(arr[i]);}MessageDigest md = null;String tmpStr = null;try {md = MessageDigest.getInstance("SHA-1");// 将三个参数字符串拼接成一个字符串进行 shal 加密byte[] digest = md.digest(content.toString().getBytes());tmpStr = byteToStr(digest);} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}content = null;// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;}/*** 将字节数组转换为十六进制字符串* * @param digest* @return*/private static String byteToStr(byte[] digest) {String strDigest = "";for (int i = 0; i < digest.length; i++) {strDigest += byteToHexStr(digest[i]);}return strDigest;}/*** 将字节转换为十六进制字符串* * @param b* @return*/private static String byteToHexStr(byte b) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };char[] tempArr = new char[2];tempArr[0] = Digit[(b >>> 4) & 0X0F];tempArr[1] = Digit[b & 0X0F];String s = new String(tempArr);return s;}}

做完这些就配置成功啦

需注意微信接入的token和服务器代码中的token需一致

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。