微信公众号开发(一)------对接公众号

微信公众号开发(一)------对接公众号

前言

一直以来对微信公众号开发想去了解一下,刚好最近有时间去学习,在这里记录一下,方便以后查阅.

正文

微信公众号对接服务器

一.接入

首先我们要去申请一个公众号,在这里就不演示过程了,想要申请的小伙伴可以单击传送门:传送门

申请以后我们进入公众号页面:

在这里插入图片描述

上面这个图片是公众号首页,接下来我们可以选择:

开发->基本配置->进入如下页面:

在这里插入图片描述

如果是第一次进来,服务器配置这个选项是未启用的,我们需要进行启用.

在这里需要解释一下微信公众号的运行流程:

微信用户点击公众号对应的功能-------->微信服务器收到请求-------->将对应的请求内容通过http或者https的方式发送给开发者服务器(作为练手,也可以指我们的本地计算机)-------->我们自己的服务器根据请求的内容响应响应的数据

因此,想要开发微信公众号,我们必须随时查看官方文档:官方文档

OK,继续回到前面的启用基本配置页面.

启动基本配置,也就是告诉微信,你自己的服务器地址,方便以后进行接口回调以及各种功能实现.

关于接入,官方文档有详细的步骤,我这里截取即可:

在这里插入图片描述

也就是说,我们必须制定一个服务器URL,一个token,还有一个消息加解秘钥,当你启用的时候,微信会请求这个服务器,服务器要验证该消息的准确性,从而完成接入:

在这里插入图片描述

OK,了解了具体的逻辑,我们就可以来完成服务器的接入了,服务器的URL这里,你可以填写你自己的各种云服务器地址,或者自己本地来搞个内网穿透

下面我将使用内网穿透来映射公网域名完成接入:

这里给大家一些内网穿透的工具:内网穿透工具

博主这里使用的是ngrok

下面开始撸代码实现微信公众号接入:

这里我直接使用servlet来实现,小伙安们可以自己选择springboot或者MVC来实现,原理都是一样的.

  1. 首先创建一个web项目,创建一个servlet:

    package com.xiaojian.servlet;import com.xiaojian.utils.SignUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;/*** 微信核心servlet*/
    public class CoreServlet extends HttpServlet {private static final Logger logger = LoggerFactory.getLogger(CoreServlet.class);/*** 确认请求来自微信服务器* @param req* @param resp* @throws ServletException* @throws IOException*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {logger.info("微信请求接入>>>");//获取微信加密签名String signature = req.getParameter("signature");logger.info("微信签名是: {}", signature);//获取时间戳String timestamp = req.getParameter("timestamp");//获取随机数String nonce = req.getParameter("nonce");//获取随机字符串String echostr = req.getParameter("echostr");PrintWriter out = resp.getWriter();//判断加密后的字符串和签名是否一样.如果一样表示接入成功if (SignUtil.checkSignature(signature, timestamp, nonce)) {out.print(echostr);}out.close();out = null;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
    }

    因为该接入请求是GET请求,所以我直接在doGet方法中实现接入逻辑.

    下面是servlet中使用的工具类的代码:

    需要注意的是,这里的token是自定义的,只需要和网页中保持一致即可

    package com.xiaojian.utils;import org.apache.commons.codec.digest.DigestUtils;import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;/*** 校验微信签名的工具类*/
    public class SignUtil {//微信公众号接口中配置的tokenprivate static String token = "xiaojiantoken";/*** 公众号接入验证* @param signature 微信签名* @param timestamp 时间戳* @param nonce 随机数* @return 是否是微信服务器验证消息*/public static boolean checkSignature(String signature, String timestamp, String nonce) {//将token timestamp nonce三个参数字典序排序String[] arr = new String[] {token, timestamp, nonce};Arrays.sort(arr);//三个字符串拼接成一个警醒sha1加密StringBuilder sb = new StringBuilder();for (String s: arr) {sb.append(s);}MessageDigest md = null;String tmpStr = null; //加密后字符串try {md = MessageDigest.getInstance("SHA-1");byte[] digest = md.digest(sb.toString().getBytes());tmpStr = byteToStr(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}sb = null;System.out.println("加密后的字符串是:" + tmpStr);//将加密后的字符串与传过来的签名对比,如果一样则是微信的请求return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;}/*** 将字节数组转为十六进制字符串* @param bytes 需要转换的字节数组* @return 转换后的字符串*/private static String byteToStr(byte[] bytes) {String strDigest = "";for (int i = 0; i < bytes.length; i++) {strDigest += byteToHexStr(bytes[i]);}return strDigest;}/*** 将字符转换为16进制字符串* @param bt* @return*/private static String byteToHexStr(byte bt) {char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};char[] tempArr = new char[2];tempArr[0] = digit[(bt >>> 4) & 0X0F];tempArr[1] = digit[bt & 0X0F];String s = new String(tempArr);return s;}
    }

    如果不想使用这个工具类,小伙伴可以使用其他的工具包来完成SHA1加密,这里提供一个:

        <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency>
    
  2. 完成以上代码以后,我们启动项目,将该servlet的访问URL填写到浏览器公众号服务器URL位置即可,token可以自定义,消息加解秘钥可以选择随机或者自定义,加解密方式我在这里选择了明文,有需要的小伙伴可以自己切换其他方式,具体异同参见官方文档.

OK,启动项目,在网页上点击启用配置,提交以后验证通过,就可以完成接入啦

二.开启开发者密码以及IP白名单设置

完成了接入步骤以后,我们发现基本配置这里还有个公众号开发信息,下面我们来配置一下这个东东.

查看文档,我们知道access_token是个很重要的东东:

在这里插入图片描述

也就是说,这个access_token是我们调用微信接口获取信息的关键字段,且该token只保存2个小时.而且更新以后,现在基本配置加入了白名单功能,只有加入到白名单中的IP,才能去获取access_token.

然而我们本地使用内网穿透来映射的公网域名,填自己的IP肯定是不行的,在这里可以按照下面的方法来获得自己的公网IP.

  • 在公众号左边菜单栏的下面,有个开发选项,我们打开开发者工具,看到有很多的工具供我们使用:

    在这里插入图片描述

    请点击调试工具,调试获取access_token的接口,填入我们自己的appid和密码(密码可以在前面的步骤中自己设置,注意保存即可)

    点击检查问题,在返回的结果中,就包含我们的公网IP,直接将该ip加入白名单即可.

    如果返回的错误码是-10000,且没有IP地址,那么请先在白名单中随便填入一个IP,然后再调试,就可以得到我们的公网IP

总结

至此,我们的微信公众号接入就已经全部完成了,在下一篇博文中,我们将一起来了解公众号消息的接受和响应~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67305.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java编写一个彩票开奖的模拟程序.游戏共有两种玩法,一种是21选5,即玩家输入5个1到21内的不重复的数。另外一种玩法是6+1玩法,即要求玩家输入7个整数,代表所购买的彩票号码,最后一个是特码。

java编写一个彩票开奖的模拟程序.游戏共有两种玩法&#xff0c;一种是21选5&#xff0c;即玩家输入5个1到21内的不重复的数。另外一种玩法是61玩法&#xff0c;即要求玩家输入7个整数&#xff0c;代表所购买的彩票号码&#xff0c;最后一个是特码。 具体代码如下&#xff1a; …

Vue实现福利彩票机选号码,彩票号码生成思路

彩票号码机选生成思路与实现 概述1、基本变量准备2、随机数生成方法3、生成红区数组号码4、对生成的数组进行排序 检验数据生成效果页面显示效果 概述 今天看了彩票开奖&#xff0c;想到买彩票时有自选和机选两种&#xff0c;于是想了一想彩票号码的生成思路&#xff0c;觉得有…

微信小程序彩票号码生成器

彩票号码生成器 一、案例说明 设计一个小程序&#xff0c;生成一注7个彩票号码(1-31)&#xff0c;并在圆形图标上显示&#xff0c;加上一个按钮&#xff0c;每点一次重新生成&#xff0c;同时生成不同的颜色圆形图标。 二、案例代码 1&#xff09;index.wxml文件 <!--ind…

模拟彩票摇号的小游戏(31选7)

规则&#xff1a;机选7个数 要求&#xff1a;7个数不能重复&#xff1b;7个数的取值区间1~31之间&#xff1b;7个数都是随机生成的 用户选7个数 要求&#xff1a;7个数不能重复&#xff1b;7个数的取值区间1~31之间&#xff1b; 7个数都是用户输入的…

最近很多人都在说 “前端已死”,讲讲我的看法

现状 我记得去年脉脉的论调还都是 客户端已死&#xff0c;前后端还都是一片祥和&#xff0c;有秀工资的&#xff0c;有咨询客户端转前端的&#xff0c;怎么最近打开脉脉一看&#xff0c;风向变了&#xff1f; 随便刷几下&#xff0c;出来的信息都是 前端已死&#xff0c;这种…

电商购物核心功能测试点

这份是根据电商中所涉及的业务点整理出的核心功能测试点&#xff0c;更多的偏向于功能性的测试。其后所涉及到的性能测试、压力测试、集成测试等&#xff0c;会在进一步分析&#xff0c;作为一名产品经理应该了解到这部分知识点。

电商平台商品详情接口的应用场景

API接口的定义 价格、库存量、发货地点等。此外&#xff0c;它还可以提供商品的详细信息&#xff0c;包括商品的图片、详细描述、规格参数、售后服务等。这些信息可以帮助用户更好地了解商品&#xff0c;从而更好地选择商品。 其次&#xff0c;电商平台商品详情接口的实现原理是…

电商客户个性化体验指南

告别通用、一刀切的客户体验&#xff0c;迎接个性化的体验&#xff0c;这将给您的客户和您的底线留下持久的印象。如今&#xff0c;公司利用来自多种来源的数据为其客户创造高度个性化的体验&#xff0c;并在竞争中脱颖而出,随着公司采用营销自动化和CRM系统等新技术&#xff0…

chatgpt赋能python:Python在安卓游戏开发中的应用

Python在安卓游戏开发中的应用 越来越多的游戏开发者开始使用Python语言&#xff0c;特别是在安卓游戏开发领域。Python的简单易学、高效实用、具有良好的跨平台性等优势&#xff0c;使得它成为安卓游戏开发的明星。本文旨在介绍Python在安卓游戏开发中的应用及其优势。 Pyth…

位置预测系列(三)

What’s Your Next Move: User Activity Prediction in Location-based Social Networks 这篇文章来自于SDM’13年&#xff08;SIAM InternationalConference on Data Mining 2013&#xff09;的录用论文集&#xff0c;是关于在基于位置社交网络里面&#xff08;LBSN&#xff…

Python抓取彩票排列3全部历史数据

python爬虫好久没用都生疏了&#xff0c;刚好朋友要排列三数据&#xff0c;就用这个练手&#xff0c; 去体彩官网http://www.lottery.gov.cn/historykj/history.jspx?_ltypepls 不闲聊&#xff0c;直接上代码 import requests from requests.exceptions import RequestExcept…

使用VBA对彩票进行分析-3D-排列3-排列5

Sub 按钮1_Click() Dim wb As Workbook Dim sht As Worksheet, sht1 As Worksheet Dim arr Dim dic As Object Application.ScreenUpdating False Set sht1 ThisWorkbook.Sheets("排五遗漏数据") For j 3 To 15 Step 3sht1.Range(sht1.Cells(2, j - 1), sht1.Cell…

python爬取彩票排列三开奖结果

import gzip import re from urllib import requestimport xlwt from bs4 import BeautifulSoup# 参数说明&#xff1a; # period: 开奖期数 # redo_num: 重试次数&#xff0c;默认是0&#xff0c;每错误一次回调时会1&#xff0c;默认就好 # max&#xff1a;最大重试次数…

java 日语文档翻译_日语文档怎么翻译?我来教会你日语翻译

小编是一个资深日漫迷&#xff0c;但是每次去看完日漫电影都觉得结尾留有遗憾。其实有很多日漫电影的内容都被修改了。为了能看到原版的日漫内容&#xff0c;小编终于从网上找到了一些有关原版日漫故事情节的文档。可是全都是日语&#xff0c;我一句都看不懂。日语文档怎么翻译…

从NLP视角看电视剧《狂飙》,会有什么发现?

文章目录 1、背景2、数据获取3、文本分析与可视化3.1 短评数据预处理3.2 词云图可视化3.3 top关键词共现矩阵网络3.4 《狂飙》演职员图谱构建 4、短评相关数据分析与可视化5、总结 原文请关注&#xff1a;实用自然语言处理 作者&#xff1a;风兮 建议查看原文&#xff1a; ht…

【CV】第 9 章:图像分割

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

分镜头脚本表格模板下载

打算做一个从 0-1 创作短视频的系列教程&#xff0c;前几期已经发在微信视频号创造营上。 第一课&#xff1a;五个实用的视频拍摄技巧&#xff1a; 总结为&#xff1a;加速、减速、遮罩转场、利用前景和航拍&#xff0c;可以让你的视频更好看。 今天分享第二课&#xff1a;如何…

chatgpt赋能python:用Python编写AI:从入门到精通

用Python编写AI&#xff1a;从入门到精通 人工智能&#xff08;AI&#xff09;一直是计算机科学领域的热门话题。随着AI技术的成熟&#xff0c;越来越多的公司开始在其业务中应用AI。Python是机器学习和人工智能领域最流行的编程语言之一&#xff0c;Python提供了众多强大的库…

chatgpt赋能python:Python滑动窗口算法详解

Python滑动窗口算法详解 滑动窗口算法是一种常用的算法&#xff0c;常被用于处理一些队列、数组和字符串等相关的问题。在Python编程中&#xff0c;滑动窗口算法的运用场合非常广泛&#xff0c;因此熟练掌握Python滑动窗口算法是每个Python工程师必备的技能之一。 滑动窗口算…

实现微信公众号发送消息给指定用户

一、前言 在实际项目开发中&#xff0c;需要实现消息中心向关注微信公众号的指定用户发送消息通知&#xff0c;在翻阅了网上很多资料及微信官方开发文档后&#xff0c;最终顺利完成功能开发&#xff0c;但是其中走过的路艰辛且曲折&#xff0c;因此特将开发过程中踩过的坑及心…