微信开发(一)搭建开发环境_如何获取一个企业微信的测试环境-程序员宅基地

技术标签: 微信开发  内网穿透NATAPP  微信公众号  

说明

公司需要开发微信服务号,要求做有关技术验证,学习了微信公众号的开发,在这里记录总结下。

正文

      学习微信公众号的开发,必须先阅读微信开发文档,通过阅读文档,了解有关微信公众开发的步骤及相关限制,了解其工作原理等。

微信开发之入门指引

      通过阅读入门指引,发现在正式开发之前必须要具备几个条件:1.申请微信公众号 2. 后台服务器 3.开发者配置

申请测试公众号

在微信官网申请公众号时,发现目前公众号只有两类帐号:服务号和订阅号,个人只能申请订阅号。原来的企业号变为企业微信,增加了微信小程序。申请地址为:https://mp.weixin.qq.com/
这里写图片描述

通过阅读微信文档的公众号接口权限说明,发现未经认证的订阅号接口权限十分有限,无法完成接下来的技术验证。
这里写图片描述
这里使用微信提供的在线测试平台,申请一个接口测试号完成有关技术验证。地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
这里写图片描述

使用自己的微信号通过扫码即可申请一个测试号
这里写图片描述
微信会自动为测试号分配appID和appsecret,这两个参数是开发的关键。
测试号申请到这里就结束了,接下来配置服务器。

配置本地服务器

阅读微信开发文档时发现,服务器必须外网可以访问且端口为80。要么需要购买云服务器,但这对我们开发调试有很大的不便,这里我使用了内网穿透工具实现外网访问,将本地的tomcat作为后台的应用服务器。
工具为NATAPP,使用此工具可以自动将它产生的域名映射为本地的ip地址+端口。地址:https://natapp.cn/
这里写图片描述

在下方的客户端下载中选择适合自己电脑的版本
这里写图片描述

下载成功后需要注册登录申请免费隧道,每个用户可以拥有两条不同协议的隧道,免费隧道域名随机分配且会强制更换,这点在开发时需要注意,需要在微信配置中随时更换URL。
这里写图片描述

在申请时注意隧道协议为web,且本地端口为80
这里写图片描述
申请好会为隧道分配一个authtoken,这个token时让NATAPP可以运行起来的关键,接下来在运行前必须配置文件,关于配置文件的下载地址:https://natapp.cn/article/config_ini ,更多教程参考:https://natapp.cn/article/natapp_newbie
配置文件必须与之前解压的natapp.exe在同一级目录,然后将得到的authtoken填入保存。
这里写图片描述

运行结果为:
这里写图片描述
这里可以看到随机分配的域名指向了本地的80端口。这里的域名就是测试号配置URL需要填写的参数。

关于本地服务器的搭建到这里就结束了,接下来在之前申请的测试号中进行配置。

配置测试号

在配置之前必须搭建一个web项目,因为填写配置时微信服务器会向后台进行验证,后台给出正确的响应才会配置成功。这里我使用了SpringBoot构建web项目,关于SpringBoot如何构建web项目,可以在网上查阅相关资料,对于SpringBoot的学习推荐翟永超的博客程序猿DD。关于如果将SpringBoot项目部署到本地Tomcat中请参考另一篇博文《将Spring Boot项目部署到本地Tomcat中》

这里写图片描述
URL即为NATAPP运行时得到的域名,Token随意填写,程序中需要使用。

校验代码:

@RequestMapping(value="hello", method = RequestMethod.GET)
    public void hello(HttpServletRequest request,
                        HttpServletResponse response){
        System.out.println("success");
        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostr = request.getParameter("echostr");

        PrintWriter out = null;
        try {
            out = response.getWriter();
            if(CheckUtil.checkSignature(signature,timestamp, nonce)){
                out.write(echostr);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            out.close();
        }

    }

在校验类CheckUtil中对微信服务器传来的参数进行校验

import java.security.MessageDigest;
import java.util.Arrays;

public class CheckUtil {
    
    public static final String tooken = "testdemo";
    public static boolean checkSignature(String singnature, String timestamp, String nonce){
        String[] arr = {tooken, timestamp,nonce};
        Arrays.sort(arr);
        StringBuilder sb = new StringBuilder();
        for(String s : arr){
            sb.append(s);
        }
        String temp = getSha1(sb.toString());
        return temp.equals(singnature);
    }

    private static String getSha1(String str){
        if(str==null||str.length()==0){
            return null;
        }

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

        try {
            MessageDigest mdTemp = MessageDigest.getInstance("SHA1");

            mdTemp.update(str.getBytes("UTF-8"));

            byte[] md = mdTemp.digest();
            int j = md.length;
            char buf[] = new char[j*2];
            int k = 0;

            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
                buf[k++] = hexDigits[byte0 & 0xf];
            }

            return new String(buf);

        } catch (Exception e) {
            return null;

        }
    }
}

能正常响应时,就会出现配置成功,接下来就可以进行验证开发了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_36553913/article/details/80207936

智能推荐

element ui 弹框,点击空白处,取消默认是关闭状态的_el-drawer怎么取消空白处关闭-程序员宅基地

文章浏览阅读791次。:close-on-click-modal="false"就可以关闭默认的空白关闭弹框_el-drawer怎么取消空白处关闭

数组与矩阵:子数组的最大累加和问题(C++)_c++累加和最大-程序员宅基地

文章浏览阅读601次。//★题目:子数组的最大累加和问题//要求:给定一个数组arr[],返回子数组的最大累加和。// 时间复杂度O(N),空间复杂度O(1)// 例如:arr = [1,-2,3,5,-2,6,-1],所有子数组中[3,5,-2,6]可以累加出最大的和12,return 12#include <iostream>#include <vector>..._c++累加和最大

工作3年的程序员应该具备什么技能|值得收藏_努力的程序员三年能搞什么样-程序员宅基地

文章浏览阅读333次。背景介绍LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少),其中成功的有4家,另外两家失败的原因在于:1、阿里巴巴B2B事业部的面试,两轮技术面试都过了,最后一轮面试是对方的主管,由于听说技术面试过了基本上90%都面试成功了,所以LZ在和_努力的程序员三年能搞什么样

Pyhanlp自然语言处理中的新词识别_pyhanlp利用互信息提取新词-程序员宅基地

文章浏览阅读1.5k次。 新词发现本“新词发现”模块基于信息熵和互信息两种算法,可以在无语料的情况下提取一段长文本中的词语,并支持过滤掉系统中已存在的“旧词”,得到新词列表。调用方法静态方法一句话静态调用接口已经封装到HanLP中: /** * 提取词语 * * @param text 大文本 * @param size 需要提取词语的数量..._pyhanlp利用互信息提取新词

python正则判断字符串是否包含数字_python正则判断字符串包含数字-程序员宅基地

文章浏览阅读203次。python正则判断字符串是否包含数字_python正则判断字符串包含数字

1.3 python数据结构之链表——链表右移/链表分割/链表逆序_python链表拆分-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏3次。都是一些LeetCode上关于链表的题目,多刷一些这样的题目有助于我们全面熟悉链表那一套理论方法。题目1. 61. Rotate List (将链表右移K个位置)Given a list, rotate the list to the right by k places, where k is non-negative.Example:Given 1-&gt;2-&gt;3-&gt;..._python链表拆分

随便推点

终端(Terminal)窗口的打开方式及常用终端命令_terminal终端怎么打开-程序员宅基地

文章浏览阅读10w+次,点赞47次,收藏238次。Terminal,是专门为程序员设计的,通过输入命令来操作电脑的一种方式 ,有些软件只提供了通过终端命令的方式来操作,如 node、git等。终端窗口有什么用?1. 常用的操作,比如创建文件夹、创建文件、移动文件、关机、锁屏等等,都可以使用终端窗口完成。2. 使用Git、Node、Vue等开发,必须要使用终端窗口。终端窗口有哪些:1. cmd 窗口--- 系统内置;2. powershell 窗口 --- 系统内置;3. Git --- 安装Git才有...如何打开终端窗口:W._terminal终端怎么打开

Sequelize 中文文档 v4 - Model definition - 模型定义-程序员宅基地

文章浏览阅读757次。Model definition - 模型定义此系列文章的应用示例已发布于 GitHub: sequelize-docs-Zh-CN. 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star.要定义模型和表之间的映射,请使用define方法。 随后Sequelize将自动添加createdAt和updatedAt属性。 因此..._sequelize.uuidv4

【论文翻译 AAAI 2020 | 知识图谱综述】A Survey on Knowledge Graphs: Representation, Acquisition and Applications_aaai2020 a survey on knowledge graphs,representati-程序员宅基地

文章浏览阅读1.6w次,点赞104次,收藏221次。论文题目:A Survey on Knowledge Graphs: Representation, Acquisition and Applications论文来源:AAAI 2020 Philip S. Yu等人关键词:知识图谱,表示学习,知识图谱补全,关系抽取,知识推理待更新…PS. 以后再也不翻译综述了,实在是太长了,也看不下去[捂脸哭泣]。个人感觉这篇文章看一看每个小结的总结就行了,中间主要是方法的列举。(都翻译了这么多,也不想接下来只翻译小结,还是善始善终吧)文章目录1._aaai2020 a survey on knowledge graphs,representation,acquisition and applica

微软终于上道儿了:操作系统不买帐,拿更新的扩展功能最低版本来限制_win10允许安装低版本软件-程序员宅基地

文章浏览阅读1.8k次。微软终于上道儿了:操作系统不买帐,拿更新的扩展功能最低版本来限制_win10允许安装低版本软件

Android之-EditText不弹出输入法设置_edittext多行输入 不显示输入法-程序员宅基地

文章浏览阅读1k次。看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:android:windowSoftInputMode=stateVisible,这样就会默认弹起输入法,当然还有别的办法。 android:configChanges="orientation|keyb_edittext多行输入 不显示输入法

分享快速批量删除大文件/小文件的文件夹_如何批量删除目录下面小于1m的文件夹-程序员宅基地

文章浏览阅读630次。快速删除整个文件夹第一步:新建文本文档txt格式,把文本文档名字修改为:快速删除文件夹第二步:打开txt文件复制以下内容:DEL /F /A /Q \\?\%1RD /S /Q \\?\%1第三步:把txt格式后缀从txt修改为:bat第四步:把要删除的文件夹拉到bat文件完成啦~~~..._如何批量删除目录下面小于1m的文件夹