微信公众号开发环境搭建的那些事

在这里插入图片描述
导读
小伙伴们,在前面的博客中.我们做了微信公众号开发的准备工作.今天我们来搭架微信公众号项目,并且将本地项目通过穿透工具和微信服务器调通.

一.搭架微信公众号项目

在我的微信开发中好用的开源项目这篇文章中,我介绍了一款开源的微信开发SDK。我们的项目就是基于文中所提到的demo项目来搭建。

由于时间缘故,在这里我们就不花时间来介绍项目搭架的步骤。我已经将项目搭建好传到码云,请大家下载即可。

项目地址:https://gitee.com/milogenius/milogenius-wechat

在这里插入图片描述
项目下载完毕,目录结构如下图:
在这里插入图片描述
接下来,我们需要在application.yml配置文件中,配置自己微信测试公众号的相关信息。
在这里插入图片描述
注明:假如没有自己的测试公众号,可以阅读申请微信公众账号测试号这篇文章,申请自己的测试公众号,然后获得微信公众号的相关信息。
在这里插入图片描述
综上所述,我们的微信公众号项目搭建完毕,然后启动项目。

二.启动cpolar穿透工具

在这里插入图片描述
大家在application.yml配置文件中可以发现,我们项目的端口是9998,因此我们需要开启穿透工具的9998端口号。

开启命令:
cpolar http 9998

注明:如果你还没有安装cpolar穿透工具,请参见我的另一篇博客windows下安装cpolar

我们开看看正常启动的界面:
在这里插入图片描述

三.微信测试公众号配置相关信息

我们知道,当我们开发机联调外网,通过一些操作,就可以调用微信的接口获取想要的信息。那么微信服务器如何调用我方服务器?大家都知道我们开发机一般都是内网,微信服务器无法直接调用我们的服务,这个难题在我们利用穿透工具之后迎刃而解。现在打通了网络,但是我们要告诉微信服务器去请求谁,这就是我们接下来要做的配置。

1.接口配置信息

微信公众号项目认证入口类WxPortalController

@RestController
@RequestMapping("/wx/portal/{appid}")
public class WxPortalController {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    private WxMpService wxService;

    private WxMpMessageRouter messageRouter;

    @Autowired
    public WxPortalController(WxMpService wxService, WxMpMessageRouter messageRouter) {
        this.wxService = wxService;
        this.messageRouter = messageRouter;
    }

    @GetMapping(produces = "text/plain;charset=utf-8")
    public String authGet(@PathVariable String appid,
                          @RequestParam(name = "signature", required = false) String signature,
                          @RequestParam(name = "timestamp", required = false) String timestamp,
                          @RequestParam(name = "nonce", required = false) String nonce,
                          @RequestParam(name = "echostr", required = false) String echostr) {

        this.logger.info("\n接收到来自微信服务器的认证消息:[{}, {}, {}, {}]", signature,
            timestamp, nonce, echostr);
        if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) {
            throw new IllegalArgumentException("请求参数非法,请核实!");
        }

        if (!this.wxService.switchover(appid)) {
            throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置,请核实!", appid));
        }

        if (wxService.checkSignature(timestamp, nonce, signature)) {
            return echostr;
        }

        return "非法请求";
    }

通过查看认证入口类,我们可以获得配置的路径

域名/wechat/wx/portal/测试公众号的appid

例如:https://6dd0c0b1.cpolar.io/wechat/wx/portal/wx5862395d992d

接下来,我们将路径配置到测试公众号相关位置(token随便填)之后,点击认证。

假如失败,会如下图所示:
在这里插入图片描述
如果我们出现上述情况,多点几次认证,就会成功,可能和穿透工具不稳定有关。
假如成功,会如下图所示;
在这里插入图片描述
配置完成如下图所示:
在这里插入图片描述

2.JS接口安全域名

配置方式同上:
在这里插入图片描述

3.网页授权获取用户基本信息

在这里插入图片描述
友情提示:这里配置域名不带https://,请大家格外注意。

四.总结

通过上面的步骤,我们就完成了微信公众号项目的搭建和本地服务器与微信服务器网络策略的调试,接下来,我们就可以学习微信公众号的各个功能。

返回专栏目录
### Java 微信公众号开发本地测试环境搭建 #### 1. 准备工作 为了设置Java微信公众号开发的本地测试环境,需要安装并配置一些必要的工具和服务。 - **JDK 安装** 确保已安装 JDK 并设置了 JAVA_HOME 环境变量。可以通过命令 `java -version` 来验证是否成功安装[^3]。 - **IDE 配置** 推荐使用 IntelliJ IDEA 或 Eclipse 进行项目开发。这些 IDE 提供了良好的调试支持和插件生态。 - **Maven 构建工具** 用于管理依赖项和构建项目。通过 Maven 可以轻松引入所需的库文件,如 WeChat SDK 和其他第三方包。 #### 2. 获取开发者凭证 前往微信公众平台官网注册成为开发者,并获取 AppID 和 AppSecret。这两个参数对于后续接口调用至关重要。 #### 3. 设置服务器地址 由于微信服务器无法直接访问内网 IP 地址,在本地环境中需借助 ngrok 工具来创建隧道映射外部可访问 URL 到本机服务端口上运行的应用程序实例。 下载并启动 ngrok 后执行如下命令: ```bash ./ngrok http 8080 ``` 这会生成一个公网可用链接,将其作为回调URL提交给微信后台审核备案。 #### 4. 开发框架集成 选择合适的开源框架简化开发流程,比如 Weixin-java-tools 库提供了丰富的 API 封装,能够快速实现消息处理逻辑等功能模块。 添加 Maven 依赖到 pom.xml 文件中: ```xml <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>LATEST_VERSION_HERE</version> </dependency> ``` 注意替换 LATEST_VERSION_HERE 为最新版本号。 #### 5. 编写核心业务代码 基于所选框架编写接收件推送、发送被动回复以及主动发起请求等相关功能的具体实现方式。 例如定义控制器类监听来自微信的消息通知路径 `/wechat/callback`: ```java @RestController @RequestMapping("/wechat") public class WeChatController { private final WxMpService wxMpService; @Autowired public WeChatController(WxMpService wxMpService) { this.wxMpService = wxMpService; } @GetMapping("/callback") public String handleGet(@RequestParam(name="signature", required=false) String signature, @RequestParam(name="timestamp", required=false) String timestamp, @RequestParam(name="nonce", required=false) String nonce, @RequestParam(name="echostr", required=false) String echostr){ try{ if(wxMpService.checkSignature(timestamp, nonce, signature)){ return echostr; // 返回随机字符串完成对接验证 } }catch(Exception e){ log.error(e.getMessage(),e); } return "error"; } } ``` 以上展示了 GET 请求处理器方法用来响应首次接入时的安全校验过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值