wxjava开发工具包的用法

文档地址: https://github.com/Wechat-Group/WxJava/tree/master/spring-boot-starters/wx-java-mp-spring-boot-starter

首先创建一个springboot的项目

1.引入依赖

	<!--微信公众号-->
    <dependency>
        <groupId>com.github.binarywang</groupId>
        <artifactId>wx-java-mp-spring-boot-starter</artifactId>
        <version>3.6.0</version>
    </dependency>

2.添加配置(application.yml)

wx:
  mp:
    app-id: wxda9310f1c0856d02
    secret: 0ebeaf8669ea726bc4e4140149c8572c
    token: xiaomin
    aes-key:

接入微信公众号开发

用的是测试的账号,登录微信公众平台,进入测试账号
在这里插入图片描述
在将你的服务器接入到微信平台的时候,以及每次微信推送消息给你的服务器的时候,你都应该按照微信的要求对推送过来的消息进行校验,确保这些消息是从微信平台发送过来的。

wxMpService.checkSignature()方法是做校验的

package com.xiaomin.wechat_brn.controller;

import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WxVerifyController {

    @Autowired
    private WxMpService wxMpService;


    @GetMapping("/welcome")
    public String welcome(String signature, String timestamp, String nonce, String echostr) throws Exception {
        if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
            // 消息签名不正确,说明不是公众平台发过来的消息
            return null;
        }
        // 消息合法
        return echostr;
    }
}

配置成功,那么就说明接入成功

被动回复用户消息

@Autowired
private WxMpService wxMpService;

基本的实现都在这个接口里面,熟悉这个接口就行了

package com.xiaomin.wechat_brn.controller;

import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.File;

/**
 * 同步回复消息(被动回复)
 */
@RestController
public class WxMsgController {

    @Autowired
    private WxMpService wxMpService;


    @PostMapping("/welcome")
    public String welcome(HttpServletRequest request) throws Exception {
        //获取消息流,并解析xml
        WxMpXmlMessage message=WxMpXmlMessage.fromXml(request.getInputStream());
        System.out.println(message.toString());
        //消息类型
        String messageType=message.getMsgType();
        System.out.println("消息类型:"+messageType);
        //发送者帐号
        String fromUser=message.getFromUser();
        System.out.println("发送者账号:"+fromUser);
        //开发者微信号
        String touser=message.getToUser();
        System.out.println("开发者微信:"+touser);
        //文本消息  文本内容
        String text=message.getContent();
        System.out.println("文本消息:"+text);

        //获取微信服务器的IP地址
        /*String[] callbackIP = wxMpService.getCallbackIP();
        for(int i=0;i<callbackIP.length;i++){
            System.out.println("IP地址"+i+":"+callbackIP[i]);
        }*/

        /**
         * 文本消息
          */
        if(messageType.equals("text")){
            WxMpXmlOutTextMessage texts=WxMpXmlOutTextMessage
                    .TEXT()
                    .toUser(fromUser)
                    .fromUser(touser)
                    .content("欢迎光临,热烈欢迎")
                    .build();
            String result = texts.toXml();
            System.out.println("响应给用户的消息:"+result);
            return result;
        }

        /**
         * 图片消息
         */
        if(messageType.equals("image")){
            //创建file对象
            File file=new File("lyf.jpg");
            //上传多媒体文件
            WxMediaUploadResult wxMediaUploadResult = wxMpService.getMaterialService().mediaUpload(WxConsts.MediaFileType.IMAGE, file);
            WxMpXmlOutImageMessage images = WxMpXmlOutMessage.IMAGE()
                    .mediaId(wxMediaUploadResult.getMediaId())//获取上传到微信服务器的临时素材mediaid.
                    .fromUser(touser)
                    .toUser(fromUser)
                    .build();
            String result = images.toXml();
            System.out.println("响应给用户的消息:"+result);
            return result;
        }
        /**
         * 音乐
         */
        if(messageType.equals("misic")){
            //创建file对象
            File file=new File("E:\\music\\qx.mp3");
            //上传多媒体文件
            WxMediaUploadResult wxMediaUploadResult = wxMpService.getMaterialService().mediaUpload(WxConsts.MediaFileType.VOICE, file);
            WxMpXmlOutMusicMessage musics = WxMpXmlOutMessage.MUSIC()
                    .fromUser(fromUser)
                    .toUser(touser)
                    .title("枪声")
                    .description("最强震撼枪声")
                    .hqMusicUrl("高质量音乐链接,WIFI环境优先使用该链接播放音乐")
                    .musicUrl("缩略图的媒体id,通过素材管理中的接口上传多媒体文件,得到的id")
                    .thumbMediaId(wxMediaUploadResult.getMediaId())
                    .build();
            String result = musics.toXml();
            System.out.println("响应给用户的消息:"+result);
            return result;
        }
        return null;
    }
}

在这里插入图片描述

网页授权

构造网页授权url

核心代码

//构造网页授权url
String redirect_uri="http://xiaomin.xiaomy.net/getCode";//回调的url
String url = wxMpService.oauth2buildAuthorizationUrl(redirect_uri, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
         /**
         * 文本消息
          */
        if(messageType.equals("text")){
            //如果用户输入的是登录,那么进行网页授权
            if(text.equals("登录")){
                //构造网页授权url
                String redirect_uri="http://xiaomin.xiaomy.net/getCode";//回调的url
                String url = wxMpService.oauth2buildAuthorizationUrl(redirect_uri, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
                WxMpXmlOutTextMessage texts=WxMpXmlOutTextMessage
                        .TEXT()
                        .toUser(fromUser)
                        .fromUser(touser)
                        .content("点击<a href=\""+url+"\">这里</a>登录")
                        .build();
                String result = texts.toXml();
                System.out.println("响应给用户的消息:"+result);
                return result;
            }
            WxMpXmlOutTextMessage texts=WxMpXmlOutTextMessage
                    .TEXT()
                    .toUser(fromUser)
                    .fromUser(touser)
                    .content("欢迎光临,热烈欢迎")
                    .build();
            String result = texts.toXml();
            System.out.println("响应给用户的消息:"+result);
            return result;
        }

在这里插入图片描述

用户点击后会来到回调的url上来

package com.xiaomin.wechat_brn.controller;

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author 晓敏
 * @create 2020-04-03 14:44
 */
@Controller
public class WxAuthorController {

    @Autowired
    private WxMpService wxMpService;

    /**
     * 网页授权
     * 1 第一步:用户同意授权,获取code
     * <p>
     * 2 第二步:通过code换取网页授权access_token
     * <p>
     * 3 第三步:刷新access_token(如果需要)
     * <p>
     * 4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
     *
     * @param code
     * @return
     */
    @GetMapping("/getCode")
    @ResponseBody
    public String getCode(String code)throws Exception{
        //1 第一步:用户同意授权,获取code
        System.out.println(code);
        //2 第二步:通过code换取网页授权access_token
        WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
        //4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
        WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken,null);
        return wxMpUser.toString();
    }
}

截图:
在这里插入图片描述
代码下载:
链接:https://pan.baidu.com/s/1qQm9Lqh6TYWFhM_KXfDr0A
提取码:8ev6
复制这段内容后打开百度网盘手机App,操作更方便哦

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐