代码编织梦想

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,操作更方便哦

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_38555490/article/details/105297271

图片验证码-爱代码爱编程

前言 什么是图片验证码? 先参考一个某宝注册时的form表单(我们在一些网站注册的时候,经常需要填写以下图片的信息) 为什么要写图片验证码? 这种图片验证方式是我们最常见的形式,它可以有效的防范恶意攻击者采用恶意工具,调用“动态验证码短信获取”接口进行动态短信发送, 导致接入用户短信被刷,造成账号余额损失。同时这种动态发送方式会朝许多无关的手机用户,

SpringBoot2.x 整合 Swagger2-爱代码爱编程

文章目录 前言项目pom.xml核心配置类 Swagger2ConfigUser 类ApiResult 类UserController 类启动类application.properties另附: 前言 使用 SpringBoot 整合 Swagger ,得到 API 文档。 成果展示: 项目 pom.xml <?xml ver

springboot工程集成redis缓存-爱代码爱编程

一,Linux安装Redis 安装Redis的过程就不多说了,参考之前的文章即可。 https://www.cnblogs.com/fantongxue/p/12443575.html 二,Springboot工程集成Redis 1,加入springboot-redis依赖包 首先要新建一个springboot工程,然后加入整合Redis的依赖包

震精!Spring Boot内存泄露,排查竟这么难!-爱代码爱编程

作者 | 纪兵 来源 | http://suo.im/5MABXL 背景 为了更好地实现对项目的管理,我们将组内一个项目迁移到MDP框架(基于Spring Boot),随后我们就发现系统会频繁报出Swap区域使用量过高的异常。笔者被叫去帮忙查看原因,发现配置了4G堆内内存,但是实际使用的物理内存竟然高达7G,确实不正常。JVM参数配置是“

Spring Boot Elasticsearch 入门-爱代码爱编程

1. 概述 如果胖友之前有用过 Elasticsearch 的话,可能有过被使用的 Elasticsearch 客户端版本搞死搞活。如果有,那么一起握个抓。所以,我们在文章的开始,先一起理一理这块。 Elasticsearch(ES)提供了两种连接方式: transport :通过 TCP 方式访问 ES 。 对应的库是 org.e

Java人脸识别登录Demo(人脸考勤系统)-爱代码爱编程

最近好多小伙伴在做毕设,有人脸识别登录、人脸识别考勤系统、人脸支付(本文代码可以实现,但只限于识别逻辑,并不安全)等,跟人脸识别有关的项目。由于上一篇文章写了关于人脸识别登录的代码有很多小伙伴找我要源码。 文章地址: https://blog.csdn.net/youth_shouting/article/details/88804324 但

电脑上如何实现微信双开或者多开-爱代码爱编程

先在记得电脑桌面上创建一个txt文件。 然后双击打开,复制下面的文本放到TXT文件里面 TASKKILL /F /IM wechat.exe start "" "C:\Program Files (x86)\Tencent\WeChat\WeChat.exe" start "" "C:\Program Files (x86)\Tencent\WeChat

微信开发中遇到的access_token坑 ,access_token失效和刷新-爱代码爱编程

这真是一个巨大的坑,为了避免以后踩到同样的坑和帮助刚接触这块的同学快速脱坑,我花了些时间研究问题的来龙去脉,提供了一个不太完美的解决方案,以及未来规划的完美解决方案。 问题现象 在开发微信jssdk的图像接口功能时,测试环境和回归环境都ok。但是更新到预发布环境后,功能就异常了,一直报图片下载失败。最后快到发布时间时,功能又恢复正常了。于是按照常规流程

Ubuntu18.04安装deepin微信出现的问题及解决方法-爱代码爱编程

安装的deepin-wine与deepin-wechat版本冲突 安装的deepin-wine环境用这个:git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.git下载仓库,然后安装,流程如截图:安装的deepin-wechat用这个:deepin.com.wechat_2.6.2

Python操作微信群发消息检测僵尸粉-爱代码爱编程

""" 使用流程: 扫码登录微信网页版 https://wx.qq.com/ 若登录成功,则功能可使用,否则不可用 """ import time from threading import Timer import requests from wxpy import * bot = Bot() # 连接微信,会出现一个登陆微信的二维码 def

.Net Core API网站调用微信第三方API(实现微信授权登录)-爱代码爱编程

using _SCscHero.Base.Help; using _SCscHero.Model.System.Retrun; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using Sy

微信小程序入门第一步-爱代码爱编程

1、注册账号、创建小程序 去 www.mp.weixin.qq.com 注册账号,得用一个没和腾讯其他应用绑定的邮箱才行。 注册后创建小程序。作为个人开发,只能开发一个小程序,所以这里不用自作多情,以为可以随便写。刚才注册的这个账号,也就只能管理这一个小程序。 创建完成后,可以在“首页”的“小程序发布流程”的第1项“小程序信息”里查看。其实这里只是注