公众号开发第一步就是绑定Token,Token认证相当于把我们的公众号和服务器关联起来,只有Token认证成功了我们的服务器才能接收到来自公众号的消息。微信官方回调的地址必须能在公网上访问,后端服务的端口要是80。

准备Sunny-Ngrok

使用Sunny-Ngrok可以让微信官方平台调用你本地的接口,也可以把你本地搭建成服务器。在这里不做过多的介绍。ngrok官网上有详细的教程。Sunny-Ngrok官网:https://www.ngrok.cc/。

准备公众号

我这里使用的是测试公众号,测试公众号和订阅号功能基本差不多,只是有些接口调用的次数少些。目前只有服务号支持支付功

能,前提是需要有认证主体。具体的区别大家可以去微信公众平台查看文档,微信公众平台网址:https://mp.weixin.qq.com/

appID:公众号的唯一标识,用于获取access_token,用户授权和JS-SDK授权等。

appsecret:相当于公众号的密钥,跟appID一起用于获取access_token,用户授权。

URL:填写后端服务的地址,一定要公网能访问的。

Token:这个是自己随便定义的,但一定要和后端服务中定义的一致,否则会导致Token验证失败。

填写完配置信息,点击提交,认证成功会出现”配置成功“提示,当出现配置失败提示时,我们首先要确保后端是否收到了请求,其次再看我们的代码逻辑是否有误。

后端代码

这里附上Java后端代码@ResponseBody

@RequestMapping(method = RequestMethod.GET)

public String get(HttpServletRequest request) {

// 微信加密签名

String signature = request.getParameter("signature");

// 时间戳

String timestamp = request.getParameter("timestamp");

// 随机数

String nonce = request.getParameter("nonce");

// 随机字符串

String echostr = request.getParameter("echostr");

// 通过检验signature对请求进行校验,若校验成功则原样返回echostr

if (SignUtil.checkSignature(signature, timestamp, nonce)) {

BufferedReader reader = null;

StringBuilder sb = new StringBuilder();

try{

reader = new BufferedReader(new InputStreamReader(request.getInputStream(), "utf-8"));

String line = null;

while ((line = reader.readLine()) != null){

sb.append(line);

}

} catch (IOException e){

e.printStackTrace();

} finally {

try{

if (null != reader){ reader.close();}

} catch (IOException e){

e.printStackTrace();

}

}

return echostr;

}else{

return "fail";

}

private static String token = "weixin";

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

// 1.将token、timestamp、nonce三个参数进行字典序排序

String\[\] arr = new String\[\] { token, timestamp, nonce };

Arrays.sort(arr);

// 2. 将三个参数字符串拼接成一个字符串进行sha1加密

StringBuilder content = new StringBuilder();

for (int i = 0; i < arr.length; i++) {

content.append(arr\[i\]);

}

MessageDigest md = null;

String tmpStr = null;

try {

md = MessageDigest.getInstance("SHA-1");

// 将三个参数字符串拼接成一个字符串进行sha1加密

byte\[\] digest = md.digest(content.toString().getBytes());

tmpStr = byteToStr(digest);

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

content = null;

// 3.将sha1加密后的字符串可与signature对比,标识该请求来源于微信

return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;

}

private static String byteToStr(byte\[\] byteArray) {

String strDigest = "";

for (int i = 0; i < byteArray.length; i++) {

strDigest += byteToHexStr(byteArray\[i\]);

}

return strDigest;

}

private static String byteToHexStr(byte mByte) {

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\[(mByte >>> 4) & 0X0F\];

tempArr\[1\] = Digit\[mByte & 0X0F\];

String s = new String(tempArr);

return s;

}

php 公众号token认证,微信公众号开发——Token认证相关推荐

  1. 香港等海外公司如何开通认证微信公众号?

    通过微信渠道将品牌推广给上亿的微信用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象.随着微信营销如火如荼的发展,大量海外商家也试图分一杯羹,但是国内微信用户无法关注海外版微信,如何处理这个 ...

  2. 「2022 最新版」未认证微信公众号图文中插入外部链接教程

    如何在微信公众号图文中插入外部链接呢?作为一名公众号小编,领导经常要求在图文中直接访问外部链接,但是由于微信平台的限制,公众号图文中不允许直接访问外链,只能插入其他公众号文章的链接. 现在,可以通过小 ...

  3. 没开对公银行账户怎么认证微信公众号?

    很多刚成立的公司还没办理对公银行账户,却急着需要开通认证微信公众号,这种情况该怎么办呢? 公众平台主要面向名人.政府.媒体.企业等机构推出的合作推广业务.在这里可以通过微信渠道将品牌推广给上亿的微信用 ...

  4. 微信公众号之接入微信公众号服务器开发(一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶概述 公众号与公众平台 1. 微信账号类型 个人号 公众号 订阅号 服务号 企业号 2. 公众号 微信公众号主要面向名人.政府 ...

  5. 微信公众号申请服务器,微信公众号服务器接口验证示例

    开发背景 今天用营业执照重新申请了一个微信公众号,然后在配置服务器的时候犯了难,因为打算使用EasyWeChat来开发,所以说得先配置服务器,这就让我犯了难,最后结合开发文档之后才研究出来了验证的套路 ...

  6. 微信公众号数据2019_如何制作微信公众号图文素材 微信公众号采集器好用吗

    现在有很多人都会通过微信公众号来发布文章.图片,这时候就需要使用一些编辑技巧了.下面拓途数据就和大家一同来看看如何制作微信公众号图文素材,微信公众号采集器好用吗? 微信公众号图文素材 如何制作微信公众 ...

  7. 微信公众号数据2019_微信公众号榜单排名,2020微信公众号排名

    微信公众号榜单排名,2020微信公众号排名 公众号排名优化的注意事项及细节今天给大家分享一下,作为微信公众号的排名优化对于大多数人来说都已经知道了有这个渠道的事情,其实很多的新产品及渠道出来以后有不少 ...

  8. 微信公众号数据2019_历史微信公众号排名,微信公众号新榜排名

    历史微信公众号排名,微信公众号新榜排名 公众号排名优化的注意事项及细节今天给大家分享一下,作为微信公众号的排名优化对于大多数人来说都已经知道了有这个渠道的事情,其实很多的新产品及渠道出来以后有不少的人 ...

  9. java中微信公众号框架_java微信公众号开发框架包含哪些内容呢?为什么要使用框架...

    java微信公众号开发框架包含哪些内容呢?为什么要使用框架 微信公众号是现在人们生活中经常会用到的,微信公众号有着各种各样的信息,包含了齐全的内容以及完善的功能,这也让人们可以更加轻松的在公众号上找到 ...

  10. 微信公众号支付 php7,微信公众号支付(PHP完全版)

    微信公众号支付(PHP完全版) 发布时间:2018-08-17 14:42, 浏览次数:493 , 标签: PHP 1.前期准备工作:取得微信公众号的appId.secret.微信商户的商户id.支付 ...

最新文章

  1. [转】HTTP请求流程(二)----Telnet模拟HTTP请求
  2. WSS2.0升级到WSS3.0
  3. CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请
  4. mysql 字符串函数大全_mysql 字符串函数大全
  5. 掏出来的“耳屎经济”
  6. SpringCloud学习笔记012---SpringBoot启动时Caused by: java.lang.NoClassDefFoundError:
  7. obspy中文教程(六)
  8. fseek 函数(易懂)
  9. vue填坑之全局引入less,scss,styl文件
  10. e语言截图软件怎么保存在c盘,电脑截图文件保存在哪_电脑截图保存在哪里
  11. Ubuntu下无法启动wifi
  12. MD5校验判断文件是否一样
  13. python:numpy的corrcoef计算相关系数
  14. 以太坊的区块和存储(一):区块头
  15. devenv.exe - 系统错误无法启动此程序,因为计算机中丢失 MSVCR100.dll。尝试重新安装该程序以解决此问题。【解决办法】...
  16. RabbitMQ简介及简单使用
  17. Linux c 目录操作函数scandir
  18. 计算机网络光纤工作原理,如何实现宽带上网?详细说明光纤网络的工作原理和架构!...
  19. 开放教育公共事业管理(教育管理)本科综合实践环节实施方案
  20. Integer. valueOf()的使用

热门文章

  1. Python基础之封装
  2. [注]一将功成万骨枯!App的七种死法
  3. 阿里腾讯史上最大规模校招!
  4. 关于流媒体HLS分割的TS文件不能播放
  5. StringBoot中String转JSON,JSON转Map或List
  6. 本质论之封装继承和多态的介绍
  7. 数字孪生天然气站 3D 可视化,助力冬季天然气保供模式
  8. 如果串口驱动有问题,怎么调
  9. VAE与GAN的关系(2)
  10. Normal.dotm正由另一程序占用或者用户占用 解决方法