微信公众号开发接入,利用微信公众平台申请测试号进行本地开发

一、前言

随着微信的普遍,年轻一代逐渐从QQ转到微信的使用。界面简洁,功能强大,男女老少皆宜是微信的特点,也正是靠着这一特点,从而使得微信在国内成为了社交软件的巨头。因此在微信端里就衍生了很多的产品需要进行开发,满足需求。
本文主要说的是服务号的开发,与微信服务器进行交互,通过微信公众号的Oauth2授权,将本地开发的内容在微信中进行展现和交互。因为公众号申请需要时间和经历还需要有企业的相关资质,作为个人开发,可以首先在微信公众平台上申请测试号,通过测试号进行与微信服务器的交互授权,页面调试。在开始之前,小伙伴们需要了解自己的需求,微信中分为 企业号、服务号以及订阅号,不同的号有不同的功能,详情可以自己去微信官网查看自己需要开发什么类型的账号。
在这里插入图片描述

二、开发接入

2.1 微信公众平台接口测试账号申请

前言中提到,在开发中我们一半将从微信官方申请的公众号作为自己的产线环境,那么aut环境可以利用测试账号进行开发,从而也能达到与微信的交互。测试账号的申请链接如下
测试账号申请
进入后,看到如下的画面。进行登陆
在这里插入图片描述
登陆后看见如下画面:
在这里插入图片描述
因为我已经配置过,所以展现的是配置后的相关参数,若第一次进入,则需要配置自己的相关参数。首先要注意的是系统会为你生成一个appId,appsercet,后面我会说这个的作用是什么。现需要配置URL、Token。
说具体点,这个所谓的URL则是自己在代码中需要进行与微信进行Token验证交互的一个方法。当配置完以后,微信会利用配置的url进行一个http的请求发起,注意,这个发起的方式是get请求,因此代码中提供出的接口需要将请求头设置为get请求:
method=(RequestMethod.GET) 在方法中需要对微信发送来的消息进行验证,下面的token需要与自己项目中配置的token一致,微信在发送请求过来后,会带过来签名、时间戳、随机数进行校验,若匹配成功,则可进行下一步,若不一致,则匹配失败。需要注意的是,这个url需要有自己的域名,我个人是在Sunny-Ngrok上进行申请的内网穿透,赠送了一个域名。

2.2 sunny-Ngrok 内网穿透账号申请

点击申请账号
在这里插入图片描述
当创建完账号以后,会有上图所示,其实开通域名的方法有很多种,在此我只是给我一个参考方法。然后点击开通隧道,购买隧道
在这里插入图片描述
10块钱一个月,并不是很贵,当买过后,点击隧道管理
在这里插入图片描述
会有一条购买过后的记录,并且可查看到赠送的域名,同时查看状态,此时的状态为离线状态,如果是离线状态,配置到微信公众平台上微信发起的请求并不能够从本机进行接受,所以,需要在官网上下载客户端进行隧道的启动。
cmd命令行进到sunny.exe所在的目录执行
sunny.exe clientid 隧道id
在这里插入图片描述
如上图所示,将域名指向自己的本机ip和端口号后,就可以进行公众号上的配置提交。在自己本机的代码中,我进行如下的配置:

@RequestMapping(value = "/wx/wxmsgreceive", method = {RequestMethod.GET})
public void verifywxtoken(HttpServletRequest request, HttpServletResponse response) throws Exception {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");

    logger.info("开始校验信息是否是从微信服务器发出");
    // 签名
    String signature = request.getParameter("signature");
    // 时间戳
    String timestamp = request.getParameter("timestamp");
    // 随机数
    String nonce = request.getParameter("nonce");
    // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败

    String result = Sha1.gen(SERVER_TOKEN, timestamp, nonce);
    if (signature.equals(result)) {
        // 随机字符串
        String echostr = request.getParameter("echostr");
        logger.debug("接入成功,echostr {}", echostr);
        response.getWriter().write(echostr);
    }
}

微信验证代码

public static String gen(String token, String timestamp, String nonce) throws NoSuchAlgorithmException {
   String[] arr = new String[]{token, timestamp, nonce};
   Arrays.sort(arr);
   StringBuffer content = new StringBuffer();
   for (String a : arr) {
      content.append(a);
   }
   return DigestUtils.sha1Hex(content.toString());
}

因为我配置的请求头是/wx/wxmsgreceive,所以在公众平台的配置页面就是域名+/wx/wxmsgreceive。
此时,当网页上点击提交时,微信就会向本机发送请求认证,确保本机的服务一定是开启状态。

2.3 微信开发者工具准备

下载微信开发者工具。
点击下载微信开发者工具
在这里插入图片描述
下载完成后,进行扫码登陆
在这里插入图片描述
选择微信公众号网页开发
在这里插入图片描述
在这里插入图片描述
这个工具就是下一步开发时访问url、前端调试的必备工具。

2.3 Oauth2授权

此时已经将测试号配置完毕,那么接下来我们如何开发呢?在微信公众号页面,有的页面需要根据用户身份进行回显不同的信息,比如用户的还款列表等,这些实现首先要获得个人信息而后进行数据库的相关交互,需要拿到用户的唯一标识。在微信中,每个人有且只有一个的唯一标识则是openId,这个openId需要通过微信的授权,回调,去获取。同时,在微信开放文档上也有详细的介绍授权的方法。具体如何去授权可以根据自己的业务需求去使用。
在这里插入图片描述
所以可以把获得的openid放入cookie。而后可将此openId进行固化,也就是存在数据库中。在一次的会话中,如果点击到了某一个页面需要用到微信授权时,可以先从cookie域中进获取,如果cookie没有,则向微信发起授权请求,而后将openid拿到后,进行存储cookie和固化。实现起来是有一些步骤手段的,在微信开放平台有相关demo,如果需要我提供,欢迎各位留言,我会将后续授权的代码贴上来供大家参考。

猜你喜欢

转载自blog.csdn.net/goGoing_/article/details/107878563