知识点

相关文章

更多

最近更新

更多

微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java

2019-03-02 00:44|来源: 网路

欢迎加入群:347245650   345531810 进行讨论相互交流  我的微信号:572838485

我的微信公众账号  我的微社区欢迎关注 索取源码请点击

 

图床:没有服务器 拖拽图片 外网即可访问
http://2.crazyflower.duapp.com/home

微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在“高级功能”里进行配置,点击“高级功能”,将看到如下界面

从上图中可以看到,高级功能包含两种模式:编辑模式和开发模式,并且这两种模式是互斥关系,即两种模式不能同时开启。那两种模式有什么区别呢?

编辑模式:主要针对非编程人员及信息发布类公众帐号使用。开启该模式后,可以方便地通过界面配置“自定义菜单”(认证的订阅号、服务号)和“自动回复的消息”。

开发模式:主要针对具备开发能力的人使用。开启该模式后,能够使用微信公众平台开放的接口,通过编程方式实现自定义菜单的创建、删除、用户消息的交互。这种模式更加灵活,建议有接触过开发的人员用该模式。

编辑模式与开发模式 二者只能开启一个

1、编辑模式请看:http://www.cnblogs.com/zyw-205520/p/3516495.html

2、开发模式 

  1)PHP开发者接入:http://www.cnblogs.com/zyw-205520/p/3500761.html
 
 2)Java开发者接入如下 详细的接口文档说明:微信接口文档

   创建一个Java Web工程,命名任意, 代码如下 

 1 package com.javen.course.servlet;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 import com.javen.course.service.CrazyService;
12 import com.javen.course.util.SignUtil;
13 
14 /**
15  * 核心请求处理类 
16  * @author 简爱微萌
17  * @Email zyw205@gmail.com
18  * 
19  */
20 public class CrazyServlet extends HttpServlet {
21 
22     private static final long serialVersionUID = -5021188348833856475L;
23     @Override
24     protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
25         // 微信加密签名  
26         String signature = request.getParameter("signature");  
27         // 时间戳  
28         String timestamp = request.getParameter("timestamp");  
29         // 随机数  
30         String nonce = request.getParameter("nonce");  
31         // 随机字符串  
32         String echostr = request.getParameter("echostr");  
33         PrintWriter out = response.getWriter();  
34         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  
35         if (SignUtil.checkSignature(signature, timestamp, nonce)) {  
36             out.print(echostr);  
37         }  
38         out.close();
39         out = null;
40     }
41     
42     
43     @Override
44     protected void doPost(HttpServletRequest request, HttpServletResponse response)
45             throws ServletException, IOException {
46         // TODO 消息的接收、处理、响应  
47     }
48 }

代码中只完成了doGet方法,它的作用正是确认请求是否来自于微信服务器;而doPost方法这里验证不需要我们先放着。

在doGet方法中调用了SignUtil.java 实现代码如下 1 package com.javen.course.util;

 

 1 package com.javen.course.util;
 2 
 3 import java.security.MessageDigest;
 4 import java.security.NoSuchAlgorithmException;
 5 import java.util.Arrays;
 6 
 7 /**
 8  * 请求校验工具类
 9  * 
10  * @author 简爱微萌
11  * @Email zyw205@gmial.com
12  * 
13  */
14 public class SignUtil {
15     // 与接口配置信息中的Token要一致
16     private static String token = "Javen";
17 
18     /**
19      * 验证签名
20      * 
21      * @param signature
22      * @param timestamp
23      * @param nonce
24      * @return
25      */
26     public static boolean checkSignature(String signature, String timestamp,
27             String nonce) {
28         String[] arr = new String[] { token, timestamp, nonce };
29         // 将token、timestamp、nonce三个参数进行字典序排序
30         //Arrays.sort(arr);
31         sort(arr);
32         StringBuilder content = new StringBuilder();
33         for (int i = 0; i < arr.length; i++) {
34             content.append(arr[i]);
35         }
36         MessageDigest md = null;
37         String tmpStr = null;
38 
39         try {
40             md = MessageDigest.getInstance("SHA-1");
41             // 将三个参数字符串拼接成一个字符串进行sha1加密
42             byte[] digest = md.digest(content.toString().getBytes());
43             tmpStr = byteToStr(digest);
44         } catch (NoSuchAlgorithmException e) {
45             e.printStackTrace();
46         }
47 
48         content = null;
49         // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
50         return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
51     }
52 
53     /**
54      * 将字节数组转换为十六进制字符串
55      * 
56      * @param byteArray
57      * @return
58      */
59     private static String byteToStr(byte[] byteArray) {
60         String strDigest = "";
61         for (int i = 0; i < byteArray.length; i++) {
62             strDigest += byteToHexStr(byteArray[i]);
63         }
64         return strDigest;
65     }
66 
67     /**
68      * 将字节转换为十六进制字符串
69      * 
70      * @param mByte
71      * @return
72      */
73     private static String byteToHexStr(byte mByte) {
74         char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
75                 'B', 'C', 'D', 'E', 'F' };
76         char[] tempArr = new char[2];
77         tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
78         tempArr[1] = Digit[mByte & 0X0F];
79 
80         String s = new String(tempArr);
81         return s;
82     }
83 
84     public static void sort(String a[]) {
85         for (int i = 0; i < a.length - 1; i++) {
86             for (int j = i + 1; j < a.length; j++) {
87                 if (a[j].compareTo(a[i]) < 0) {
88                     String temp = a[i];
89                     a[i] = a[j];
90                     a[j] = temp;
91                 }
92             }
93         }
94     }
95 }

 

 

 

注意:SignUtil类中的成员变量token,这里赋予什么值,在接口配置信息中的Token就要填写什么值,两边要保持一致

最后再来看一下CoreServlet是怎么配置的,web.xml中的配置代码如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 3   <display-name></display-name>
 4   <servlet>
 5     <servlet-name>CrazyServlet</servlet-name>
 6     <servlet-class>  
 7             com.javen.course.servlet.CrazyServlet 
 8         </servlet-class>
 9   </servlet>
15 
16   <servlet-mapping>
17     <servlet-name>CrazyServlet</servlet-name>
18     <url-pattern>/Javen</url-pattern>
19   </servlet-mapping>
20   
24   <welcome-file-list>
25     <welcome-file>index.jsp</welcome-file>
26   </welcome-file-list>
27 </web-app>

 

到目前为止,所有编码都完成了,就是这么简单。接下来就是将工程发布到公网服务器上,如果没有公网服务器环境,可以去了解下BAE、SAE或者租赁一个服务器。发布到服务器上后,我们在浏览器里访http://你服务器的Ip或者域名/Javen(项目名)/Javen,如果看到如下界面就表示我们的代码没有问题:

PS:在浏览器中直接访问就相当于提交的是GET请求,而我们什么参数都没有传,在验证的时候当然会报空指针异常。

 

最好在功能>>高级功能>>开发模式中填写对应的URL和Token即可  没有找到页面的可以参考  http://www.cnblogs.com/zyw-205520/p/3500761.html

 

我的微信公众账号 人脸识别、天气查询、公交查询、周公解梦、星座运势、手机归属地查询、聊天唠嗑等

 

 

 

  

 

 


转自:http://www.cnblogs.com/zyw-205520/p/3581250

相关问答

更多
  • JAVA的WEB开发、数据库开发等,,,,,,,,,,具体要看需求、构架等
  • 能使用的!微信 在安卓手机里可以使用,安装是用java 开发的,所以 可以用java开发
  • JAVA的WEB开发、数据库开发等,,,,,,,,,,具体要看需求、构架等
  • 首先订阅号要通过微信认证才可以成为拥有自定义菜单不通过验证成为开发者也无法获得自定义菜单其次成为开发者要有个能够公网访问的URL也就是通常使用的网址现常用的有新浪的sae平台或者百度的开发者平台然后在该网.址下部署微信提供的接口文件修改接口文件中的token然后在token一栏中填写修改过后的token即可。‘动拇指’的团队做的,需要的话可以问.问去
  • 微信公众平台开发注意事项: 一、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。 二、在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。 三、在开发过程中,可以使用接口调试工具来在线调试某些接口。 四、每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。 五、在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台 ...
  • 太多太多了,这么说吧,微信公众平台只有最简单的图片文字和视频,而且大小都是有限制的,如果你想更多的功能必须用开发模式。看这个视频,绑定第三方平台,就能开发了。
  • 新版微信公众平台去除了编辑模式和开发模式,让普通用户更方便地使用公众号,开发者也可以在开发者中心中,统一管理开发资源、权限和配置。微信公众平台开发者中心功能的使用方便了更多的微信用户,也方便了我们的生活。
  • 这个按照功能来算费用的。 有的功能比较简单开发费用就比较小,有些就会比较大。 一般情况下普通的开发3000-5000元足够满足了, 如果需要深度开发,那就要1万以上也是很正常的。