SpringBoot开发微信公众号(一)| 接入微信,成为微信开发者


没有公众号的可以使用微信测试号进行开发

申请测试号地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

ngrok下载地址:https://ngrok.com/

一、首先创建一个SpringBoot工程、这里使用idea进行开发:

1.1.file>New>Project  选择Spring Initializr :

1.2.点击next 填写相关信息,直接下一步就行

1.3.创建完成的项目结构为:

二、开发前准备:

2.1.申请测试号、准备ngrok,用来映射本地端口,访问到自己的项目,因为微信服务器不支持IP

三、通过开发文档可以看出,第一步需要填写服务器地址,也就是指的是项目地址,然后微信会发送请求到后台,我们验证消息是否来自微信

3.1.验证微信消息:

1.通过文档可以看到,通过第一步触发微信给后台发送请求,然后可以接收到的参数为:

signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串
2.接收到参数以后,我们需要验证signature
3.验证方式:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

3.2.代码实现:

微信常亮类:

package com.wechat.constant;

/**
 * @CreatUser : lsy
 * @CreatTime : 2019/1/8 16:30
 */
public class WxConstants {

    //这里写测试号的appid
    public static final String APP_ID="APP_ID";
    //这里写测试号的appsecret
    public static final String APP_SECRET="APP_SECRET";
    //这里写你自己定义的token
    public static final String TOKEN="TEST";

}

sha1加密工具类:

package com.wechat.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 加密工具类
 * @CreatUser : lsy
 * @CreatTime : 2019/1/8 16:41
 */
public class EncryptionUtil {

    private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    /**
     * 加密
     * @param algorithm 算法名称
     * @param body      加密的字符串
     * @return          加密过后的字符串
     */
    public static String encrypt(String algorithm,String body){
        if(algorithm==null||body==null){
            return null;
        }
        try {
            //这是java自带的加密工具
            MessageDigest digest = MessageDigest.getInstance(algorithm);
            digest.update(body.getBytes());
            return getFormattedText(digest.digest());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String getFormattedText(byte[] bytes) {
        int len = bytes.length;
        StringBuilder buf = new StringBuilder(len * 2);
        // 把密文转换成十六进制的字符串形式
        for (int j = 0; j < len; j++) {
            buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
            buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
        }
        return buf.toString();
    }

}

微信消息控制器(获取微信发的参数,然后加密验证):

package com.wechat.controller;

import com.wechat.constant.WxConstants;
import com.wechat.utils.EncryptionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * @CreatUser : lsy
 * @CreatTime : 2019/1/8 16:10
 */
@RestController
@RequestMapping(value = "wx")
public class WechatMsgController {

    private Logger logger=LoggerFactory.getLogger(WechatMsgController.class);

    /**
     * 验证微信消息
     *
     * @param request
     * @return
     */
    @GetMapping(value = "/check")
    public String checkWxMsg(HttpServletRequest request) {
        /**
         * 微信加密签名
         */
        String signature = request.getParameter("signature");
        /**
         * 随机字符串
         */
        String echostr = request.getParameter("echostr");
        /**
         * 时间戳
         */
        String timestamp = request.getParameter("timestamp");
        /**
         * 随机数
         */
        String nonce = request.getParameter("nonce");

        String[] str={timestamp,nonce,WxConstants.TOKEN};
        //将token、timestamp、nonce三个参数进行字典序排序
        Arrays.sort(str);
        StringBuffer sb = new StringBuffer();
        //将三个参数字符串拼接成一个字符串进行sha1加密
        for (String param:str) {
            sb.append(param);
        }
        //获取到加密过后的字符串
        String encryptStr = EncryptionUtil.encrypt("SHA1", sb.toString());
        //判断加密后的字符串是否与微信的签名一致
        if(signature.equalsIgnoreCase(encryptStr)){
            return echostr;
        }
        logger.error("这不是微信发来的消息!!");
        return null;
    }

}

四、代码写完了,接下来就是启动项目,项目端口设置为80端口,启动ngrok映射80端口(不知道ngrok的自行搜索一下,也可以用natapp,或者花生壳映射),映射成功以后,就可以在测试号上填写服务器信息了,如下图:

现在已经成为微信开发者了!!

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Spring Boot 是一种用于开发 Java 应用程序的框架,它简化了传统 Java 开发的繁琐过程,使开发人员可以更快速地构建高效的应用程序。UniApp 是一个跨平台的开发框架,它可以同时开发 Android、iOS 和 Web 应用程序,极大地提高了开发效率和项目的可维护性。 微信公众号开发是指基于微信平台的应用程序开发,通过微信公众号,我们可以实现与用户的互动交流、推送消息、提供各种服务等。 在使用 Spring Boot 和 UniApp 进行微信公众号开发时,可以采用前后端分离的开发模式。前端使用 UniApp 进行界面设计和用户交互的开发,后端使用 Spring Boot 进行业务逻辑的处理和数据的存储。 首先,我们需要在微信公众平台注册一个开发者账号,获取到相应的公众号信息和接口权限。 接下来,前端开发人员可以使用 UniApp 进行公众号的界面设计和交互逻辑的编写。UniApp 提供了丰富的组件和模板,可以方便地实现各种界面效果,并且可以使用 Vue.js 进行数据的绑定与处理。 后端开发人员使用 Spring Boot 进行接口的开发和业务逻辑的处理。可以使用 Spring Boot 提供的丰富的功能和插件来简化开发,比如使用 Spring Data JPA 来操作数据库,使用 Spring Security 来实现用户认证与权限控制等。 最后,前后端通过接口进行数据的传输和交互,前端将用户的操作发送到后端进行处理,并将后端返回的数据展示给用户。 通过采用 Spring Boot 和 UniApp 进行微信公众号开发,可以充分发挥两者的优势,快速构建高效的应用程序,实现与用户的互动和服务。同时,由于使用的是跨平台的开发框架,可以方便地同时开发多个平台的应用程序,提高开发效率和项目的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值