淘东电商项目(12) -搭建企业级微信公众号

简介: 淘东电商项目(12) -搭建企业级微信公众号

引言

在上一节《淘东电商项目(11) -Apollo分布式配置中心管理Swagger》,主要讲解了把微服务项目的Zuul配置托管到Apollo分布式配置中心,以及Apollo管理接口文档。

代码已提交至Github(版本号:47a352637a12e9b8ad080f58336bddcc36262c77),有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop

本文开始讲解如何搭建企业级微信公众号以及如何使用WxJava框架来进行开发。

本文目录结构:

l____引言

l____ 1. 微信公众号开发原理

l____ 2. 外网映射工具

l____ 3. 微信公众平台环境搭建

l________ 3.1 微信公众平台配置介绍

l____ 4. WxJava框架

l________ 4.1 WxJava源码介绍

l________ 4.2 微信服务器访问本地服务器

l____ 5. 鹦鹉学舌案例

l____总结

1. 微信公众号开发原理

下面贴的是微信公众号开发原理图。其实站在我们开发者的角度来讲,微信服务器相当于是客户端,请求我们开发者服务器获取信息,并把信息反馈给微信用户,需要注意的几点如下:

  1. 微信服务器需要访问开发者服务器,必须把开发者服务器暴露在外网(下面讲的NatApp来实现
  2. 开发者服务器的代码需要满足微信服务器请求的规则(下面讲的WxJava框架来实现

2. 外网映射工具

外网访问工具,我这里使用的外网工具是NatApp,之前也在《Nginx系列课程》里写过文章来讲解过搭建与使用过程,大家可以参考文章《Nginx系列教程(03) - 外网映射(NatApp)》

如果启动成功后,控制台会有如下信息:

其中上面涂上红色的URL就是外网的访问地址了,映射内网本地80端口。

3. 微信公众平台环境配置

搭建好外网了,那么我们需要先在微信公众平台配置好我们的外网信息。

关于微信公众号的搭建和相关知识,之前也曾在《微信公众号》专栏写过,大家可以参考:

3.1 微信公众平台配置介绍

step1:登录微信公众平台https://mp.weixin.qq.com/,输入账号密码登录

step2:登录成功后,扫码进入主页面,点击左侧菜单的 「开发者工具」,并选择“公众平台测试账号”。

step3:进入后,会让我们填写测试的URL以及Token,这里先不填,讲到WxJava框架案例的时候将会填写。

4. WxJava框架

4.1 WxJava源码

WxJava微信公众号框架已经开源了,地址: https://github.com/Wechat-Group/WxJava

如果想看源码的同学,可以从Github clone到本地:

导入工程,可以看到有很多模块,从Github的文档里面,可以看到微信公众号的模块是weixin-java-mp

4.2 微信服务器访问本地服务器

微信服务器访问本地服务器具体是如何实现的呢?其实微信公众号开发的Demo已经上传到了Github,地址:https://github.com/binarywang/weixin-java-mp-demo-springboot

现在按照官方的教程,一步一步来操作:

step1: 克隆项目到本地,并打开

step2: 复制/src/main/resources/application.yml.template 或修改其扩展名生成 application.yml文件,根据自己需要填写相关配置(需要注意的是:yml文件内的属性冒号后面的文字之前需要加空格,可参考已有配置,否则属性会设置不成功)

step3: 配置application.yml

wx:
  mp:
    configs:
      - appId: wx2????95 #(一个公众号的appid)
        secret: bb4??????2e1c3 #(公众号的appsecret)
        token: ylw666 #(接口配置里的Token值)
        #aesKey:  111(接口配置里的EncodingAESKey值)

appId、secret可以从公众平台测试账号里获取:

step4: 打开项目的WxPortalController类,可以看到验证的URL格式为 {暴露的外网地址+/wx/portal/{appid}},需要填写到微信公众号平台:

step5: 运行WxMpDemoApplication

step6: 微信公众平台点击提交,可以看到进入了本机的断点(注意超时),以及在界面可以看到配置成功:

5. 鹦鹉学舌案例

现在想实现一个功能,用户发送消息,服务器回复相同的消息。下面来看看过程:

step1: 在「测试号管理模块」首先用手机关注测试号的二维码,可以在用户列表看到已经关注成功:

image.png

step2: 使用手机发送消息,在项目中的WxPortalController类里面的post方法代码里断点,可以看见接收到了消息:

手机发送 服务器代码断点内容

step3: 修改服务器回复的内容,需要修改MsgHandler里面的内容,把回复的内容修改,修改后的代码如下:

@Component
public class MsgHandler extends AbstractHandler {
    @Override
    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
                                    Map<String, Object> context, WxMpService weixinService,
                                    WxSessionManager sessionManager) {
        if (!wxMessage.getMsgType().equals(XmlMsgType.EVENT)) {
            //TODO 可以选择将消息保存到本地
        }
        //当用户输入关键词如“你好”,“客服”等,并且有客服在线时,把消息转发给在线客服
        try {
            if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "客服")
                && weixinService.getKefuService().kfOnlineList()
                .getKfOnlineList().size() > 0) {
                return WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE()
                    .fromUser(wxMessage.getToUser())
                    .toUser(wxMessage.getFromUser()).build();
            }
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
        //TODO 组装回复消息
        //String content = "收到信息内容:" + JsonUtils.toJson(wxMessage);
        String content = wxMessage.getContent();
        return new TextBuilder().build(content, wxMessage, weixinService);
    }
}

step4: 发送消息,可以看到如下结果:

总结

目录
相关文章
|
XML Java 应用服务中间件
【Java项目】SpringBoot项目完成微信公众号收到用户消息自动回复功能附带视频(超详细)(一)
【Java项目】SpringBoot项目完成微信公众号收到用户消息自动回复功能附带视频(超详细)
523 0
|
小程序
微信小程序开发-企业级商城实战
微信小程序开发-企业级商城实战
118 0
|
XML Java 数据格式
【Java项目】SpringBoot项目完成微信公众号收到用户消息自动回复功能附带视频(超详细)(二)
【Java项目】SpringBoot项目完成微信公众号收到用户消息自动回复功能附带视频(超详细)
296 0
|
缓存 开发框架 前端开发
SpringCloud微服务实战——搭建企业级开发框架(四十一):扩展JustAuth+SpringSecurity+Vue实现多租户系统微信扫码、钉钉扫码等第三方登录
  如果我们自己的系统需要调用第三方登录,那么我们就需要实现单点登录客户端,然后跟需要对接的平台调试登录SDK。JustAuth是第三方授权登录的工具类库,对接了国外内数十家第三方登录的SDK,我们在需要实现第三方登录时,只需要集成JustAuth工具包,然后配置即可实现第三方登录,省去了需要对接不同SDK的麻烦。   JustAuth官方提供了多种入门指南,集成使用非常方便。但是如果要贴合我们自有开发框架的业务需求,还是需要进行整合优化。下面根据我们的系统需求,从两方面进行整合:一是支持多租户功能,二是和自有系统的用户进行匹配。
4316 56
SpringCloud微服务实战——搭建企业级开发框架(四十一):扩展JustAuth+SpringSecurity+Vue实现多租户系统微信扫码、钉钉扫码等第三方登录
|
人工智能 Kubernetes 物联网
DockOne微信分享(一一八):容器技术在企业级服务里的实践
本文讲的是DockOne微信分享(一一八):容器技术在企业级服务里的实践【编者的话】邻盛在做面向中小微企业做服务的时候, 实际遇到很多情况, 比如对方IT基础过于薄弱, 比如基础设施过于简陋, 比如产品要解决行业需求, 企业个性需求等等,经过几年积累目前摸索出了一套完整的产品方案。
2338 0
|
监控 Kubernetes 中间件
DockOne微信分享(七十九):基于容器技术构建企业级PaaS云平台实践
本文讲的是DockOne微信分享(七十九):基于容器技术构建企业级PaaS云平台实践【编者的话】企业级容器化PaaS平台旨在为企业应用提供底层支撑能力,覆盖应用开发、应用交付、上线运维等环节,包括代码的管理、持续集成、自动化测试、交付物管理、应用托管、中间件服务、自动化运维、监控报警、日志处理等,本次分享主要介绍基于容器技术构建PaaS平台所采用的相关技术、涉及的核心功能模块以及相关方案。
2704 0
微信企业号即将来临 会取代企业级软件么?
  大伙都知道微信订阅号功能限制比较多,服务号每个月又只能群发4条消息,推出微信企业号看似迫在眉睫。没错,据透露,微信团队已经内测企业号这个功能几个月了,在微信的“通讯录”菜单部分公众号项目中,原有的订阅号和服务号之下,多出了一个“企业号”。
773 0
|
11月前
|
小程序 PHP
微信公众号开发(一)打通服务器与微信之间的通信
说来惭愧PHP做了这么久,好像就没有从头开发过一个微信公众号,这次刚好有机会从头接入开发一个完整的公众号,也不能说完整,但是这些微信的接口我基本上都试一试~看看大概是什么情况。 首先:打通服务器与微信之间的通信。
130 0
|
6月前
|
开发者
微信公众平台开发基本配置
微信公众平台开发基本配置
169 0
|
5月前
|
Java API
java进行微信公众号开发
java进行微信公众号开发
145 0