首页 > 技术文章 > 微信开发基于springboot

anlegou 2018-10-12 14:10 原文

0.申请一个微信公众号,记住他的appId,secret,token,accesstoken

1.创建一个springboot项目。在pom文件里面导入微信开发工具类

<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>3.1.0</version>
</dependency>
2.编写controller
package com.weixin.demo.demo.web.back.controller;

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutImageMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@Controller
public class weixinController {

    @Autowired
    private WxMpService wxMpService;

    /**
     * 1.接入公众号:公众号服务器配置的接口地址为这个
     * @param signature
     * @param timestamp
     * @param nonce
     * @param echostr
     * @return
     */
    @RequestMapping(value= "/wechart/index",method = RequestMethod.GET)
    @ResponseBody
    public String checkSignature(String signature, String timestamp, String nonce, String echostr)
    {
        System.out.println("————————微信接入——————————");
        if (wxMpService.checkSignature(timestamp,nonce,signature))
        {
            return  echostr;
        }else
            {
                return null;
            }
    }

    /**
     * 消息的接收和回复
     */
    @PostMapping("/wechart/index")
    @ResponseBody
    public void sendWxMessage(HttpServletRequest request, HttpServletResponse response) throws IOException {
        System.out.println("————————微信消息接收和发送——————————");
        //获取消息流
        WxMpXmlMessage message=WxMpXmlMessage.fromXml(request.getInputStream());
        //消息的处理:文本 text
        String msgType = message.getMsgType();//消息的类型
        String fromUser = message.getFromUser();//发送消息用户的账号
        String toUser = message.getToUser();//开发者账号
        String content = message.getContent();//文本内容
        String msg = message.getMsg();

        //回复文本消息
        if("text".equals(msgType))
        {
            //创建文本消息内容
            WxMpXmlOutTextMessage text=WxMpXmlOutTextMessage.TEXT().
                    toUser(message.getFromUser()).
                    fromUser(message.getToUser()).
                    content("你好,很高心认识你").build();
            //转化为xml格式
            String xml=text.toXml();
            System.out.println(xml);
            //返回消息
            response.setCharacterEncoding("UTF-8");
            PrintWriter out=response.getWriter();
            out.print(xml);
            out.close();
        }
    }



    /**
     * 首页访问
     * @return
     */
    @RequestMapping(value= "/",method = RequestMethod.GET)
    @ResponseBody
    public String index()
    {
        return "hello";
    }


}
weixinController

3.编写初始化文件:从application.yml配置文件中获取 appId,secret,token,accesstoken,这几个值来自公众号

package com.weixin.demo.demo.web.common.config;

import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@ConfigurationProperties("siping")
@Configuration
public class WechatConfig {

    //从配置文件中获取字段,需要设置get,set方法
    private String appId;
    private String secret;
    private String token;
    private String accesstoken;

    /**
     * 初始化微信service
     *
     * @return
     */
    @Bean
    public WxMpService getWxMpService() {
        WxMpService wxMpService = new WxMpServiceImpl();
        WxMpInMemoryConfigStorage wxMpInMemoryConfigStorage = new WxMpInMemoryConfigStorage();
        wxMpInMemoryConfigStorage.setAppId(appId);
        wxMpInMemoryConfigStorage.setSecret(secret);
        wxMpInMemoryConfigStorage.setToken(token);
        wxMpInMemoryConfigStorage.setAccessToken(accesstoken);
        wxMpService.setWxMpConfigStorage(wxMpInMemoryConfigStorage);
        return wxMpService;
    }

    public String getAppId() {
        return appId;
    }

    public void setAppId(String appId) {
        this.appId = appId;
    }

    public String getSecret() {
        return secret;
    }

    public void setSecret(String secret) {
        this.secret = secret;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public String getAccesstoken() {
        return accesstoken;
    }

    public void setAccesstoken(String accesstoken) {
        this.accesstoken = accesstoken;
    }
}
WechatConfig

3.注意:

在回复消息的时候需要注意:toUser,和fromUser的主体是谁,一般时候微信端传递过来的值反着的。

4.通过natapp配置内网穿透映射127.0.0.1:8080端口,让微信端能够访问到:
登录注册natapp,下载natapp的客户端,运行,在命令行输入:natapp -authtoken=自己登录后分配的natapptoken号

5.和公众号平台对接自己的服务器

6.结果

 



推荐阅读