百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

微信公众号开发之配置和接入(二) 微信公众号配置接口

yuyutoo 2024-10-13 00:33 4 浏览 0 评论

从今天开始我们就正式开始微信公众号开发了,首先进入微信官网https://mp.weixin.qq.com/,注册或者登陆(如果已经注册了)你的微信公众号,登陆后需要管理员用个人微信扫码验证通过才行,这里直接贴出截图如下:

?

我们是开发者,重点关注上面最后一张图的红框内容,在接下来的开发过程中,我们几乎只会用到这四个地方的功能和文档说明

一、【启动开启开发者模式】

点击上面的【开发】---》【基本配置】,进入后如图:

?

这里我已经启动了开发者模式,关闭后如下图,重新启动即可:

?

二、【修改配置】

注意填写下面两个输入框URL和Token即可:

?

Token填写一个你喜欢的字符串,类似你自己设置的密码,随便填写一个你喜欢的英文字符串即可,这里重点说明以下URL;

URL是你跟微信公众号服务器之间通讯传输消息的唯一接口,这里需要重点说明以下微信开发者通讯传输消息的基本工作思路

?

当关注微信公众号的用户发送消息给腾讯公众号服务器之后,腾讯微信公众号服务器会通过这个URL将消息转发给你你自己的项目后台,你的项目可以自定义的做出你想要的任何回复响应,然后当你项目后台做出响应后,腾讯微信公众号服务器再通过这个URL接口收到你的项目后台发过来的消息,继而转发到关注微信公众号的用户手机上,以上就是微信公众号开发的基本思路流程,请读者务必明白,否则后续开发会遇到问题而不知道如何调试处理,接下来我们创建一个这样的可用的URL地址

三、【创建SpringBoot项目】

这里我们利用Java中的明星级IDE工具IDEA新建一个最简单的SpringBoot项目,之所以用SpringBoot就是因为SpringBoot创建和配置太简单了,我们把精力集中到开发业务和逻辑流程上,而不要把精力浪费到项目的冗繁的配置上,用IDEA创建一个最简单的SpringBoot项目,这里我不想细说,不清楚的请百度自行查找网上其他大神的资料,一下是我创建的SpringBoot项目缩略图:

?

这里我创建了一个Controller和新建了一个RestApi接口,结合上面截图和下面截图红框部分,你再看看我的URL地址http://r7fkc2.natappfree.cc/weChart/connect 你应该好像明白了点什么,对我们配置了这个接口,那问题来了,为什么我们配置的是这个接口而不是别的接口呢,因为我们配置的这个接口第一次提交保存时候,腾讯微信公众号会给你发送一些消息,你需要对这些消息接收后做出符合要求的逻辑处理并作出正确的回应,腾讯微信公众号才会成功认证他作为唯一的合法URL,否则你是无法腾讯微信服务器形成有效的通讯通道进行通讯的,你现在明白了吧;那么这个接口里的东西可不能乱写,下面我直接贴代码如下:

WechatController.java
package com.xu.wemall.controller.wechat;

import com.xu.wemall.commons.utils.CheckUtil;
import com.xu.wemall.commons.utils.UploadUtil;
import com.xu.wemall.commons.utils.MessageUtil;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Map;

/**
 * 类名称: LoginController
 * 类描述: 与微信对接登陆验证
 *
 * @author yuanjun
 * 创建时间:2017年12月5日上午10:52:13
 */
@Slf4j
@RestController
@Api(tags = "接入验证接口")
@RequestMapping(value = "/weChart")
public class WechatController {


    @RequestMapping(value = "/connect", method = RequestMethod.GET)
    public String connect(@RequestParam(value = "signature") String signature,
                          @RequestParam(value = "timestamp") String timestamp,
                          @RequestParam(value = "nonce") String nonce,
                          @RequestParam(value = "echostr") String echostr) {

        log.info("-----开始校验签名-----");
        PrintWriter out = null;
        if (CheckUtil.checkSignature(signature, timestamp, nonce)) {
            log.info("-----签名校验通过-----");
            return echostr;
        } else {
            log.info("-----校验签名失败-----");
            return null;
        }

    }

}
CheckUtil.java
package com.xu.wemall.commons.utils;

import java.util.Arrays;

public class CheckUtil {

    //自己设置,要与微信页面设置的一致
    private static final String token = "xulijun137";

    public static boolean checkSignature(String signature,String timestamp,String nonce){

        String[] str = new String[]{token,timestamp,nonce};
        //排序
        Arrays.sort(str);
        //拼接字符串
        StringBuffer buffer = new StringBuffer();
        for(int i =0 ;i<str.length;i++){
            buffer.append(str[i]);
        }
        //进行sha1加密
        String temp = SHA1.encode(buffer.toString());
        //与微信提供的signature进行匹对
        return signature.equals(temp);
    }

}
SHA1.java
package com.xu.wemall.commons.utils;

import java.security.MessageDigest;

/**
 * 类名称: SHA1
 * 类描述: sha1加密
 *
 * @author yuanjun
 * 创建时间:2017年12月5日上午11:10:01
 */
public final class SHA1 {
    private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    /**
     * Takes the raw bytes from the digest and formats them correct.
     *
     * @param bytes the raw bytes from the digest.
     * @return the formatted bytes.
     */
    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();
    }

    public static String encode(String str) {
        if (str == null) {
            return null;
        }
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
            messageDigest.update(str.getBytes());
            return getFormattedText(messageDigest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

?

上面的Token请换成自己的token,在你的【开发】--》【基本配置】中你之前自己配置过的Token,上面的接口的基本思路是获取腾讯服务器发送到四个参数你项目接口的,你对这四个参数做还有token一起5个参数按照公众号提供的文档说明处理后,满足条件后返回其中一个参数即可,具体请看我代码部分,注意这个接口是GET请求方式的,因此得到我们的项目RestAPI接口地址是:http:/localhost:80/weChat/connnect,再看我配置的地址http://r7fkc2.natappfree.cc/weChart/connect

这里显然我们配了一个域名地址http://r7fkc2.natappfree.cc/【这里默认设置的是80端口,80端口可以不写】这是我们利用NATAPP将本地的127.0.0.1映射成的一个外网可访问的域名地址【这里就是我们上一课讲的用NATAPP将本地地址映射成外网地址,不清楚的同学请先学习我的上一课,映射本地地址到外网的工具还有其他的,目前笔者最推荐是NATAPP】,通过这个外网的域名地址,腾讯的服务器可以成功连接到我们的项目,因为你开发的话你的本地地址localhost腾讯微信公众号服务器是不可能认识的( 后续你可以把项目部署到外网服务器上,比如阿里云,百度云,腾讯云服务器上),

至此我们就成功得到这个URL地址了,配置后保存即对我们的接口做合法性验证,验证成功会弹出弹窗框提示你验证成功,否则表示你的接口逻辑处理后返回的字符串不符合接口要求,请修改代码后重新配置验证接口,好了今天的课就讲到这里了,下节课再见,如有问题请给我留言。

相关推荐

自卑的人容易患抑郁症吗?(自卑会导致抑郁吗)

Filephoto[Photo/IC]Lowself-esteemmakesusfeelbadaboutourselves.Butdidyouknowthatovert...

中考典型同(近)义词组(同义词考题)

中考典型同(近)义词组...

WPF 消息传递简明教程(wpf messagebox.show)

...

BroadcastReceiver的原理和使用(broadcast-suppression)

一、使用中注意的几点1.动态注册、静态注册的优先级在AndroidManifest.xml中静态注册的receiver比在代码中用registerReceiver动态注册的优先级要低。发送方在send...

Arduino通过串口透传ESP 13板与java程序交互

ESP13---是一个无线板子,配置通过热点通信Arduino通过串口透传ESP13板与java程序交互...

zookeeper的Leader选举源码解析(zookeeper角色选举角色包括)

作者:京东物流梁吉超zookeeper是一个分布式服务框架,主要解决分布式应用中常见的多种数据问题,例如集群管理,状态同步等。为解决这些问题zookeeper需要Leader选举进行保障数据的强一致...

接待外国人英文口语(接待外国友人的英语口语对话)

接待外国人英文口语询问访客身份:  MayIhaveyourname,please?  请问您贵姓?  Whatcompanyareyoufrom?  您是哪个公司的?  Could...

一文深入理解AP架构Nacos注册原理

Nacos简介Nacos是一款阿里巴巴开源用于管理分布式微服务的中间件,能够帮助开发人员快速实现动态服务发现、服务配置、服务元数据及流量管理等。这篇文章主要剖析一下Nacos作为注册中心时其服务注册与...

Android面试宝典之终极大招(android面试及答案)

以下内容来自兆隆IT云学院就业部,根据多年成功就业服务经验,以及职业素养课程部分内容,归纳总结:18.请描述一下Intent和IntentFilter。Android中通过Intent...

除了Crontab,Swoole Timer也可以实现定时任务的

一般的定时器是怎么实现的呢?我总结如下:1.使用Crontab工具,写一个shell脚本,在脚本中调用PHP文件,然后定期执行该脚本;2.ignore_user_abort()和set_time_li...

Spark源码阅读:DataFrame.collect 作业提交流程思维导图

本文分为两个部分:作业提交流程思维导图关键函数列表作业提交流程思维导图...

使用Xamarin和Visual Studio开发Android可穿戴设备应用

搭建开发环境我们需要做的第一件事情是安装必要的工具。因此,你需要首先安装VisualStudio。如果您使用的是VisualStudio2010,2012或2013,那么请确保它是一个专业版本或...

Android开发者必知的5个开源库(android 开发相关源码精编解析)

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨...

Android事件总线还能怎么玩?(android实现事件处理的步骤)

顾名思义,AndroidEventBus是一个Android平台的事件总线框架,它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使我们的代码...

Android 开发中文引导-应用小部件

应用小部件是可以嵌入其它应用(例如主屏幕)并收到定期更新的微型应用视图。这些视图在用户界面中被叫做小部件,并可以用应用小部件提供者发布。可以容纳其他应用部件的应用组件叫做应用部件的宿主(1)。下面的截...

取消回复欢迎 发表评论: