微信公众号开发(二)

微信公众号开发(二)

​ 咳咳,间隔了这么久,现在终于有时间继续了。废话不多说,接上篇微信公众号开发引言

说明:博主使用的开发工具为IntelliJ IDEA,开发语言为JAVA。

​ 环境搭建部分就不在这里多说什么了。使用IDEA创建一个SpringBoot项目,之后我们就进入开发阶段吧~

1.修改公众号的服务器配置

填写公众号服务器配置

​ URL处填写能从公网访问到你本机的一个地址,博主在这里选用的是花生壳内网穿透版,但是由于最近实名认证,博主还没有来得及认证[因为博主的花生壳是14年就购置的,好久不用了。在最近才知道要认证]。具体使用方式,博主过些日子认证一下在介绍吧。反正很容易的~

​ Token处填写的是自定义字符串,不过要注意!!!此处填写的Token一定要和程序中所设置的一样!此处博主写的是“DeveloperHome”。

​ 然后不要点提交~因为此时提交是肯定会说Token验证失败的~~接下来请看:

2.验证消息来自微信服务器

首先,从官网的文档中可以看到,验证大约分为三个步骤。

  • 将token,timestamp,nonce三个参数进行字典排序。
  • 将三个参数字符串拼接成一个字符串进行SHA-1加密。
  • 使用加密后提到的字符串与参数中的signature进行对比。
  • 若能确认此GET请求来自微信服务器,则原样返回echor参数内容。

验证消息来自微信服务器

步骤知道了,现在就开始撸代码吧。

​ 在项目中添加一个类ValidateWeChat

ValidateWeChat.java代码

package org.yyx.study.wechat.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.yyx.study.config.WeChatConfig;

import javax.annotation.Resource;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**
 * 验证工具类
 * Created by 叶云轩 on 2017/6/20-11:50
 * Concat ycountjavaxuan@outlook.com
 */
@Component
public class ValidateWeChat {

    private Logger logger = LoggerFactory.getLogger(ValidateWeChat.class);
    /**
     * 1)将token、timestamp、nonce三个参数进行字典序排序
     * 2)将三个参数字符串拼接成一个字符串进行sha1加密
     * 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
     */
    @Resource
    private WeChatConfig weChatConfig;

    /**
     * 对参数进行排序与加密
     *
     * @param timestamp 时间戳
     * @param nonce     随机字符串
     */
    private String sortParams(String timestamp, String nonce) {
        logger.info("排序....");
        String[] array = new String[]{weChatConfig.getDeafultAccessToken(), timestamp, nonce};
        StringBuffer sb = new StringBuffer();
        // 字符串排序
        Arrays.sort(array);
        for (int i = 0, length = array.length; i < length; i++) {
            sb.append(array[i]);
        }
        String sortString = sb.toString();
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.update(sortString.getBytes());
            byte[] digest = md.digest();
            StringBuffer hexstr = new StringBuffer();
            String shaHex;
            for (int i = 0; i < digest.length; i++) {
                shaHex = Integer.toHexString(digest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexstr.append(0);
                }
                hexstr.append(shaHex);
            }
            logger.info("排序完成...");
            return hexstr.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

    public boolean validate(String signature, String timestamp, String nonce) {
        String s = sortParams(timestamp, nonce);
        return signature.equals(s);
    }

}

​ 之后呢,在controller包中创建一个类,用于验证消息.

AccessEntrance.java代码

package org.yyx.study.wechat.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.yyx.study.wechat.util.ValidateWeChat;

import javax.annotation.Resource;

/**
 * 接入微信服务器入口
 * Created by 叶云轩 on 2017/6/20-10:59
 * Concat ycountjavaxuan@outlook.com
 */
@RestController
public class AccessEntrance {

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

    /**
     * 验证工具类
     */
    @Resource
    private ValidateWeChat validateWeChat;

    /**
     * 验证消息来自微信服务器方法
     *
     * @param signature 微信加密签名
     * @param timestamp 时间戳
     * @param nonce     随机数
     * @param echostr   随机字符串
     * @return 验证结果
     */
    @GetMapping("/")
    public String accessGet(@RequestParam String signature, @RequestParam String timestamp,
                            @RequestParam String nonce, @RequestParam String echostr) {
        logger.info("method invoke...");
        logger.info("参数[signature]={},[timestamp]={},[nonce]={},[echostr]={}", signature, timestamp, nonce, echostr);
        boolean validate = validateWeChat.validate(signature, timestamp, nonce);
        if (validate) {
            logger.info("验证成功...");
            return echostr;
        }
        logger.info("验证失败...");
        return "wrong";
    }
}

​ 在AccessEntrance类中,有一个accessGet方法用于接收从微信服务器转发的GET请求,其中有四个必填参数,符合微信公众号开发文档的要求。现在启动我们的项目。

​ 此时,我们回到微信公众号的服务器配置界面,点击提交按钮,则会在页面上方弹出提交成功的字样,如下图:

提交服务器配置

​ 而我们的开发服务器则会输出如下图所示的日志信息:

IDE输出日志信息

​ 至此,微信公众号接入三方服务器成功。

​ 项目包结构见下图:

项目目录结构

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
微信公众号开发源码Java是用Java语言编写的用于开发微信公众号的源代码。微信公众号开发是指通过开发者账号申请成为微信公众号开发者,利用微信提供的开发接口和SDK来开发和管理公众号Java作为一种广泛应用于企业级开发的编程语言,在微信公众号开发中也得到了广泛应用。通过使用Java开发微信公众号,可以实现公众号的业务逻辑,包括用户管理、消息推送、菜单设置、素材管理等功能,以及与其他系统的对接、数据的处理和存储等。 对于开发微信公众号的源码来说,Java源码通常包括了处理微信服务器与开发者服务器之间的消息通信和交互的代码,以及各类功能模块的实现代码。开发者可以根据自己的需求和业务逻辑,使用Java语言编写各种业务逻辑代码,并通过开发工具集成微信提供的SDK库来实现与微信服务器之间的交互。 在Java源码的基础上,开发者还可以根据需要进行定制和扩展,以满足更具体的业务需求。可以添加自定义的功能模块或者对现有功能进行修改和优化,以适应不同的应用场景和业务要求。 总之,微信公众号开发源码Java是用于开发微信公众号的源代码,通过使用Java语言和相应的开发工具,开发者可以自定义和实现具体的业务功能,满足不同用户的需求,并与微信服务器进行消息交互,为用户提供更好的微信公众号服务。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值