使用JAVA开发微信公众平台(一)——环境搭建与开发接入

一、 初始微信公众平台

微信公众平台,即我们平时所说的“公众号”,曾用名“官方平台”、“媒体平台”,但最终命名为“公众平台”。从微信的命名我可以发现,公众平台不只是官方、媒体使用的平台,而是对所有公众都开放的统一平台。

微信公众平台地址:https://mp.weixin.qq.com/

微信公众平台公分4大板块:订阅号、服务号、小程序、企业号。按照微信2016年公开课规划,企业号后续将与企业微信合并,因此我们主要针对前三部分开始讲解:

简单的对比一下前三者的区别以及本次课程即后续课程的讲解重点:

1、 订阅号和服务号均为传统意义的“公众号”,具有消息群发能力,详细区别可在官方平台查看:http://kf.qq.com/faq/140806zARbmm140826M36RJF.html 我们将注重于服务能力开发,而在服务方面,两者开发模式完全相同,只不过服务号可以使用更多的服务接口,而订阅号则是“阉割版”的服务号。因此,后续课程我们将使用服务号为案例进行操作。

2、 微信小程序,原本为“微信应用号”,即一个根植在微信生态系统内的APP。因苹果和谷歌的限制,“应用号”未上线便已夭折,取而代之的是适度阉割功能的“微信小程序”,而其堪比原生APP的操作体验,也使得小程序成为时下大火的开发方向。而杰瑞教育 全新的H5开发课程,也将加入时下火爆的微信小程序开发。

二、 开发账号准备

1、 账号注册

进入微信公众平台https://mp.weixin.qq.com ,点击右上角立即注册,选择“服务号”或“订阅号”注册(服务号仅限机构用户注册,个人用户只能选择订阅号)

注册时需填写一系列信息,根据提示填写即可,此处不做赘述。

2、 测试账号申请

如果暂时不想注册账号,或者无法注册服务号,可选择官方提供的测试账号申请。申请地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 点击后扫描二维码,即可获得一个测试账号,拥有服务号全部权限。

三、 开发环境准备

1、 外网映射工具

微信公众平台在访问后台时,必须提供能够正确访问的外网地址,微信平台对后台URL的要求有两点:

① 必须能够用公网访问    ② 必须使用80端口

要实现以上两点,我们可以选择购买外网服务器,例如:阿里云、百度云、腾讯云…都是不错的选择。如果没有服务器,可以选择用外网映射工具,将我们的内网链接映射为公网,比较不错的映射软件有:花生壳、ngrok、nat123等…

这几款软件都可以百度很容易搜索到并下载,下面简单讲解一下用法:

① Ngrock:

进入dos环境,切换到ngrock所在盘符,输入ngrock 8080 回车:

回车后等待一会,即可得到公网链接,下图所示阴影区域给出的链接,即可直接访问本机127.0.0.1:8080下的链接内容,分别是http协议和https协议对应的地址:

② 花生壳、nat123,均可安装软件后,在软件中操作,详情可查看百度经验:http://jingyan.baidu.com/article/363872ec361d3f6e4ba16ff9.html 此处不做赘述

四、 微信公众平台数据交互原理

搭建好公网访问地址后,我们自己开发的后台代码就可以放到公网地址了,那么用户是怎么样访问到我们的代码呢?

下面我们来看一下微信公众平台的数据交互原理:

从上图可以看到,微信公众平台实际只是起到一个桥梁作用,实际处理业务、提供服务的代码,依然是放在我们自己的服务器或者公网映射上面。

那么,我们就可以在我们自己的电脑(服务器)上面编写后台代码,并通过映射工具提供公网能够访问的URL,然后将此URL绑定到微信后台即可。

五、 开发模式接入

下面将进入实际开发过程,我们可以参考官方提供的开发文档:https://mp.weixin.qq.com/wiki

1、 填写服务器配置

进入微信公众平台,点击左侧【开发——基本配置】,选择【服务器配置】。即可进入配置页面:

其中:

URL:即我们上述所说的后台服务器公网访问地址

Token:开发者自定的验证口令

EncodingAESKey:随机字符串,如果消息加解密方式采用安全模式才需验证

2、 验证消息是否有效

当我们点击提交时,微信服务器将会发送一个Get请求,到我们上述地址,同时传递四个参数:

我们通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

下面,我们实现代码操作。

六、 开发接入后台代码

1、 使用MyEclipse创建Web项目,并新建一个servlet:

2、 在servlet的doGet方法中,获取上述四个校验参数:

3、 编写工具类,进行校验方法的操作:

校验步骤,参考上述【五-2】三大步操作流程

使用sha1加密方法↓

4、 Servlet中调用校验方法,并验证结果,如果检验成功,将得到的随机字符串eahostr原路返回结果给微信平台:

至此,Servlet及Check工具类,编写完成。

5、 启动Tomcat,将Servlet的本地地址(例如本机为:localhost:8080/WeiXin/servlet/WeiXinServlet )进行公网映射,参照上述第三大部分内容,进行公网映射,确定公网地址能够正确访问。

我将直接将将代码放到杰瑞教育 公网服务器进行访问。获得如下地址:http://www.jredu100.com/WeiXin/servlet/WeiXinServlet

七、 配置公众平台后台

进入微信后台配置相关信息:

点击提交,微信将发送Get指令到Servlet,并调用doGet方法,进行我们编写的验证操作,最后如果顺利返回随机字符串,则绑定成功。

八、 源码共享

1、 Servlet源码(只保留doGet部分):

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String signature = request.getParameter("signature");

String timestamp = request.getParameter("timestamp");

String nonce = request.getParameter("nonce");

String echostr = request.getParameter("echostr");

PrintWriter out = response.getWriter();

if(CheckUtil.checkSignature(signature, timestamp, nonce)){

//如果校验成功,将得到的随机字符串原路返回

out.print(echostr);

}

}

2、 CheckUtil源码(可直接Copy其中的getSha1加密方法):

package com.jredu.util;

import java.security.MessageDigest;

import java.util.Arrays;

public class CheckUtil {

public static final String  tooken = "jredu100"; //开发者自行定义Tooken

public static boolean checkSignature(String signature,String timestamp,String nonce){

//1.定义数组存放tooken,timestamp,nonce

String[] arr = {tooken,timestamp,nonce};

//2.对数组进行排序

Arrays.sort(arr);

//3.生成字符串

StringBuffer sb = new StringBuffer();

for(String s : arr){

sb.append(s);

}

//4.sha1加密,网上均有现成代码

String temp = getSha1(sb.toString());

//5.将加密后的字符串,与微信传来的加密签名比较,返回结果

return temp.equals(signature);

}

public static String getSha1(String str){

if(str==null||str.length()==0){

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 (Exception e) {

// TODO: handle exception

return null;

}

}

}

分类: JAVA技术分享,微信开发

微信公众号开发(JAVA)-环境搭建与开发接入相关推荐

  1. 微信公众号支付java前后端分离开发

    微信公众号支付java前后端分离开发 微信公众号支付java前后端分离开发 我们开发的是基于河北银行的支付,支付宝微信都做了,这里就介绍一下微信公众号支付,这个公众号支付需要配置的东西太多了,官方文档 ...

  2. 视频教程-微信公众号实战(Java版本,带前后台)-微信开发

    微信公众号实战(Java版本,带前后台) 2018年5月创办 威海科进网络科技有限公司,这里的视频主要是为了做个记录,方便员工提升自己的水平 陈健 ¥29.00 立即订阅 扫码下载「CSDN程序员学院 ...

  3. 微信公众号后台java开发实现自动回复机器人

    1.注册微信公众号.(简单) 2.注册图灵机器人.(自己百度) 1)注册后可以拿到key  (注意  api接入里的钥匙不要打开,否则要加解密,麻烦) 3.配置微信公众号服务器验证. 1)在开发的基本 ...

  4. 微信公众号测试生产环境分离实践

    微信公众号测试生产环境分离实践 背景 最近开发微信公众号,部分功能上线后,为了保证不影响线上正常使用,新功能的开发测试遇到以及需要解决的问题如下: 调用微信公众号高级接口(授权,支付等)需要配置域名访 ...

  5. 当“低代码”遇上“微信公众号”,当“系统搭建”遇上“社交流量”

    微信作为一个社交媒体平台,人均单日使用时间达到了85.8分钟,其推出的公众平台凭借着便捷灵活的操作方式,受到广大企业宣传的青睐和重视,成为企业对外传播品牌文化,市场营销的重要途径. 腾讯最新财报显示: ...

  6. 微信公众号报修系统常见通用功能开发

    微信公众号报修系统常见通用功能开发 51报修系统是一款基于微信的用户报修.维修师傅接单.公司进行管理的一站式维修服务平台,实现报修.派单.接单.支付.评价.回访等功能.涵盖了各类生活维修服务,包括水电 ...

  7. java微信公众号支付开发平台_微信公众号支付demo,微信公众号支付Java DEMO

    1.5.4微信验证的控制方法: /** * 微信验证 * 请填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证 * 验证服务器地址的有效性 * 开发者提 ...

  8. 支付宝支付功能实现原理,微信公众号中实现支付宝支付功能开发流程

    这篇文章使用一些简单的代码例子来解释微信接入支付宝支付功能的操作步骤,即使新手也可以轻松参透的. 第三方支付是指具备一定实力和信誉保障的独立机构,采用与各大银行签约的方式,通过与银行支付结算系统接口对 ...

  9. 基于微信公众号的答题投票系统——项目开发心得体会记录

    项目背景 项目需求 后台管理功能 用户功能 页面展示 项目信息 开发语言 数据库 项目构想 获取幸运用户 用户答题 项目反思 项目进度的安排 团队合作沟通方面 项目的构建 技术 本地开发和上线的模式区 ...

最新文章

  1. android 官方默认动画,Android动画一:Activity过渡动画详细实现原理
  2. FTP资源下检测URL地址下文件大小
  3. Linux上安装Julia-1.1
  4. Docker Review - docker部署Tomcat Nginx
  5. 对图片对比度和亮度的理解
  6. 系统间账号认证系统同步方案
  7. 云效(原RDC)+ 容器服务完成持续集成
  8. mysql 获取每天的日期_mysql中获取一天、一周、一月时间数据的各种sql语句写法...
  9. 那些高曝光的Annotation(@ComponentScan、@PropertySource与@PropertySources、@Import与ImportResource)
  10. 什么是 DNS 劫持、投毒、解析?看这文就懂了!
  11. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-2. 输入控件)...
  12. Nuget私有服务搭建实战
  13. linux 安装 yum
  14. 【图文】origin画图软件10分钟学会所有基本操作,画出精美图形
  15. iOS iPhone设备判断大全,包含X系列和11
  16. 计算机工程系的文化是什么,计算机工程系科技文化节.doc
  17. 运动,今晚去跑步了。贵在坚持
  18. AD原理图右下角Title Block信息实时更新的方法(AD20)多图教程
  19. 达梦数据库(DM)的安装教程分享
  20. Portraiture全新4.0最新版人像磨皮插件更新内容

热门文章

  1. Python PEP
  2. 《CCNA学习指南:Cisco网络设备互连(ICND2)(第4版)》——1.1节理解VLAN 和VLAN Trunk 及排除相关故障...
  3. outlook使用笔记
  4. 朋友们都在用jpg转PDF免费软件有哪些?常用3款软件来分享
  5. 我在华清的嵌入式课程笔记(至2020.7.5)
  6. 520,冰河亲自整理的Git命令汇总升级版,悄悄努力,然后惊艳所有人(升级版)
  7. update in .net
  8. 编写自己的Acunetix WVS漏洞扫描脚本详细教程
  9. 原 Android自定义控件三部曲文章索引
  10. eclipse第十七课时