没有合适的资源?快使用搜索试试~ 我知道了~
首页Java微信公众号开发教程:实战与技巧分享
本篇文章主要针对Java开发者提供微信公众号开发教程,适合有一定编程基础的读者。作者拥有丰富的实战经验,已经开发并维护了个人和企业级别的公众账号,包括文本、图文、音乐、语音和位置消息的处理,以及菜单的实现。教程旨在分享技术细节和实践经验,帮助新手快速上手。 教程内容分为几个部分: 1. 微信公众帐号概述:介绍微信公众帐号的分类,如服务号和订阅号的特点,以及两种模式的区别,同时涵盖开发模式的配置和使用。 2. API深入解析:涵盖各种消息类型(如文本、图文、语音等)的API使用,并提及作者已经封装好的jar包,可能会提供下载资源。 3. 实用技巧集锦:涉及编码技巧,如如何在代码中实现换行、发送表情,以及解决跨平台兼容性问题,比如在Android和iOS上的差异。 4. 业务系统集成:探讨如何将微信公众平台与公司内部业务系统(如链接、短信)有效对接,并进行功能对比分析。 5. 常用功能开发示例:包括人机对话、天气预报、定位服务(结合百度地图)、音乐搜索和语音识别等功能的实现。 文章作者的个人公众账号"xiaoqrobot"不仅是一个学习工具,也是生活的实用助手,已经吸引了370多位关注者,其功能包括精准定位、周边搜索、路线导航和聊天功能。作者承诺,后续连载教程将深入挖掘这些功能背后的开发细节,以满足读者的学习需求。 本文档为Java开发者提供了一份详实的微信公众号开发指南,结合实践经验和案例分析,帮助读者提升技能,应对实际项目开发。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/9576518/bgb.jpg)
可以看到,代码中只完成了 doGet 方法,它的作用正是确认请求是否来自于微信服务器;
而 doPost 方法不是我们这次要讲的内容,并且完成接口配置也不需要管 doPost 方法,就
先空在那里。
在 doGet 方法中调用了 org.liufeng.course.util.SignUtil.checkSignature 方法,SignUtil.java
的实现如下:
[java] view plaincopyprint?
1. packageorg.liufeng.course.util;
2.
3. importjava.security.MessageDigest;
4. importjava.security.NoSuchAlgorithmException;
5. importjava.util.Arrays;
6.
7. /**
8. *请求校验工具类
9. *
10. *@authorliufeng
11. *@date2013-05-18
12. */
13. publicclassSignUtil{
14. //与接口配置信息中的 Token 要一致
15. privatestaticStringtoken="weixinCourse";
16.
17. /**
18. *验证签名
19. *
20. *@paramsignature
21. *@paramtimestamp
22. *@paramnonce
23. *@return
24. */
25. publicstaticbooleancheckSignature(Stringsignature,Strin
gtimestamp,Stringnonce){
26. String[]arr=newString[]{token,timestamp,nonce};
27. //将 token、timestamp、nonce 三个参数进行字典序排序
28. Arrays.sort(arr);
29. StringBuildercontent=newStringBuilder();
30. for(inti=0;i<arr.length;i++){
31. content.append(arr[i]);
32. }
33. MessageDigestmd=null;
34. StringtmpStr=null;
35.
36. try{
![](https://csdnimg.cn/release/download_crawler_static/9576518/bgc.jpg)
37. md=MessageDigest.getInstance("SHA-1");
38. //将三个参数字符串拼接成一个字符串进行 sha1 加密
39. byte[]digest=md.digest(content.toString().getByte
s());
40. tmpStr=byteToStr(digest);
41. }catch(NoSuchAlgorithmExceptione){
42. e.printStackTrace();
43. }
44.
45. content=null;
46. //将 sha1 加密后的字符串可与 signature 对比,标识该请求来源于微信
47. returntmpStr!=null?tmpStr.equals(signature.toUpperC
ase()):false;
48. }
49.
50. /**
51. *将字节数组转换为十六进制字符串
52. *
53. *@parambyteArray
54. *@return
55. */
56. privatestaticStringbyteToStr(byte[]byteArray){
57. StringstrDigest="";
58. for(inti=0;i<byteArray.length;i++){
59. strDigest+=byteToHexStr(byteArray[i]);
60. }
61. returnstrDigest;
62. }
63.
64. /**
65. *将字节转换为十六进制字符串
66. *
67. *@parammByte
68. *@return
69. */
70. privatestaticStringbyteToHexStr(bytemByte){
71. char[]Digit={'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F'};
72. char[]tempArr=newchar[2];
73. tempArr[0]=Digit[(mByte>>>4)&0X0F];
74. tempArr[1]=Digit[mByte&0X0F];
75.
76. Strings=newString(tempArr);
77. returns;
![](https://csdnimg.cn/release/download_crawler_static/9576518/bgd.jpg)
78. }
79. }
这里唯一需要注意的就是 SignUtil 类中的成员变量 token,这里赋予什么值,在接口配置信
息中的 Token 就要填写什么值,两边保持一致即可,没有其他要求,建议用项目名称、公
司名称缩写等,我在这里用的是项目名称 weixinCourse。
最后再来看一下 web.xml 中,CoreServlet 是怎么配置的,web.xml 中的配置代码如下:
[html] view plaincopyprint?
1. <?xmlversion="1.0"encoding="UTF-8"?>
2. <web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
6. <servlet>
7. <servlet-name>coreServlet</servlet-name>
8. <servlet-class>
9. org.liufeng.course.servlet.CoreServlet
10. </servlet-class>
11. </servlet>
12.
13. <!--url-pattern 中配置的/coreServlet 用于指定该 Servlet 的访问路径
-->
14. <servlet-mapping>
15. <servlet-name>coreServlet</servlet-name>
16. <url-pattern>/coreServlet</url-pattern>
17. </servlet-mapping>
18.
19. <welcome-file-list>
20. <welcome-file>index.jsp</welcome-file>
21. </welcome-file-list>
22. </web-app>
到这里,所有编码都完成了,就是这么简单。接下来就是将工程发布到公网服务器上,如
果没有公网服务器环境,可以去了解下 BAE、SAE 或阿里云。发布到服务器上后,我们在
浏览器里访问 CoreServlet,如果看到如下界面就表示我们的代码没有问题:
剩余63页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/54d5044c56b6486da5764b2379e0780c_u014599792.jpg!1)
木槿花_开
- 粉丝: 0
- 资源: 12
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 多模态联合稀疏表示在视频目标跟踪中的应用
- Kubernetes资源管控与Gardener开源软件实践解析
- MPI集群监控与负载平衡策略
- 自动化PHP安全漏洞检测:静态代码分析与数据流方法
- 青苔数据CEO程永:技术生态与阿里云开放创新
- 制造业转型: HyperX引领企业上云策略
- 赵维五分享:航空工业电子采购上云实战与运维策略
- 单片机控制的LED点阵显示屏设计及其实现
- 驻云科技李俊涛:AI驱动的云上服务新趋势与挑战
- 6LoWPAN物联网边界路由器:设计与实现
- 猩便利工程师仲小玉:Terraform云资源管理最佳实践与团队协作
- 类差分度改进的互信息特征选择提升文本分类性能
- VERITAS与阿里云合作的混合云转型与数据保护方案
- 云制造中的生产线仿真模型设计与虚拟化研究
- 汪洋在PostgresChina2018分享:高可用 PostgreSQL 工具与架构设计
- 2018 PostgresChina大会:阿里云时空引擎Ganos在PostgreSQL中的创新应用与多模型存储
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)