微信公众号、支付接口认证:一步步教您如何实现

news2024/12/25 15:24:07

1、微信公众号接口认证方案

1.1 认证流程

1)官方配置Token验证

  • Token不在网络中传递

2)开发一个Token验证接口

  • Token及其它参数拼接并字典排序再做sha摘要计算
  • 微信定期调用此接口来验证身份正确性
  • 通过摘要验证判断请求来源微信(Token配置在微信平台,固而判断来源)

3)通过appid secret获取access_token

4)所有业务URL直接拼接access_token

5)针对报文安全可以设置加密模式,使用在平台配置的AESkey进行加密

1.2 参考代码

以下是官方提供的php demo

private function checkSignature()
{
  $signature = $_GET["signature"];
  $timestamp = $_GET["timestamp"];
  $nonce = $_GET["nonce"];

  $token = TOKEN;
  $tmpArr = array($token, $timestamp, $nonce);
  sort($tmpArr, SORT_STRING);
  $tmpStr = implode( $tmpArr );
  $tmpStr = sha1( $tmpStr );

  if( $tmpStr == $signature ){
    return true;
  }else{
    return false;
  }
}

以下是chatgpt直接把php转成java的代码:

private boolean checkSignature() {
    String signature = request.getParameter("signature");
    String timestamp = request.getParameter("timestamp");
    String nonce = request.getParameter("nonce");

    String token = TOKEN;
    String[] tmpArr = {token, timestamp, nonce};
    Arrays.sort(tmpArr);
    String tmpStr = String.join("", tmpArr);
    tmpStr = sha1(tmpStr);

    if (tmpStr.equals(signature)) {
        return true;
    } else {
        return false;
    }
}

https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

1.3 小结

微信公众号接口认证方案即是基于oauth2的token认证机制

接口安全认证的核心在于:

1、定期的Token验证

2、接口全部在https基础下请求

3、access_token具有时效性

4、AES增加安全系数

其实不难看出微信公众号的核心思想就是Oauth2认证协议。不过在基础上增加了定期Token验证的机制来保证请求的来源是微信。

2、微信支付接口认证方案

2.1 认证流程

微信公众平台开发概述 | 微信开放文档

1)在微信官方配置并获取

a、appid mchid(商户id)

b、api key(API v3密钥)即AES-256-GCM 对称加密密钥。

c、商户API证书(商户的证书是通过下载微信证书申请工具进行申请的)

d、微信支付平台证书即平台的公钥证书用于加密业务接口的敏感报文。

2)生成签名值(发送请求时:客户端使用自己的私钥签名数据,让服务器验签。服务器响应的报文与会签名,并建议客户端回收报文后也进行验签。)

a、签名结构体

HTTP请求方法\n
URL\n
请求时间戳\n
请求随机串\n
请求报文主体\n

b、使用商户API私钥(merchantPrivateKey)对以上数据进行SHA256 with RSA然后生成

Base64编码字符串。

3)生成HTTP头中的Authorization数据,Authorization由认证类型和签名信息两个部分组成

a、认证类型,目前为WECHATPAY2-SHA256-RSA2048

b、签名信息

    • 发起请求的商户(包括直连商户、服务商或渠道商)的商户号mchid
    • 商户API证书序列号serial_no,用于声明所使用的证书
    • 请求随机串nonce_str
    • 时间戳timestamp
    • 签名值signature

4)使用带Authorization的HTTP请求,调用业务接口

2.2 参考代码

import okhttp3.HttpUrl;
import java.security.Signature;
import java.util.Base64;
String schema = "WECHATPAY2-SHA256-RSA2048";
HttpUrl httpurl = HttpUrl.parse(url);

String getToken(String method, HttpUrl url, String body) {
    String nonceStr = "your nonce string";
    long timestamp = System.currentTimeMillis() / 1000;
    String message = buildMessage(method, url, timestamp, nonceStr, body);
    String signature = sign(message.getBytes("utf-8"));

    return "mchid=\"" + yourMerchantId + "\","
    + "nonce_str=\"" + nonceStr + "\","
    + "timestamp=\"" + timestamp + "\","
    + "serial_no=\"" + yourCertificateSerialNo + "\","
    + "signature=\"" + signature + "\"";
}

String sign(byte[] message) {
    Signature sign = Signature.getInstance("SHA256withRSA");
    sign.initSign(yourPrivateKey);
    sign.update(message);

    return Base64.getEncoder().encodeToString(sign.sign());
}

String buildMessage(String method, HttpUrl url, long timestamp, String nonceStr, String body) {
    String canonicalUrl = url.encodedPath();
    if (url.encodedQuery() != null) {
      canonicalUrl += "?" + url.encodedQuery();
    }

    return method + "\n"
        + canonicalUrl + "\n"
        + timestamp + "\n"
        + nonceStr + "\n"
        + body + "\n";
}

https://wechatpay-api.gitbook.io/wechatpay-api-v3/

2.3 小结

微信支付接口认证方案即是基于数字签名的技术方案。数字签名借助于数字证书可保证通信的身份与数据不被篡改。

p.s.如果考虑数据的安全微信支付也支持对报文进行AES-256-GCM对称加密。

3、总结

  • 微信公众号接口认证方案即是基于oauth2的token认证机制
  • 微信支付接口认证方案即是基于数字签名的技术方案

======================================

如果文章对你有帮助,请不要忘记加个关注、点个赞!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试

首先,你已经配置好Anaconda3的环境,下载了TensorFlow模块,并且会使用jupyter了,那么接下来就是MNIST实验步骤。 数据集官网下载:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burgeshttp…

apple pencil的替代品买啥比较好?平价电容笔推荐

随着技术的发展,出现了许多种类的电容笔。一款好的电容笔,不但可以极大地提升我们的工作效率,也可以极大地改善我们的学习效果。平替电容笔无论是在技术方面,还是在产品质量方面,都有着非常广泛的应用前景。下面就是我…

Java领域的序列化与反序列化,Java的对象如何传输,常用序列化技术

文章目录 一、引出问题:Java原生的序列化1、基于Socket传输对象案例2、什么是序列化3、Java 原生序列化4、serialVersionUID 的作用5、transient 关键字绕开 transient 机制的办法writeObject 和 readObject 原理 6、Java 序列化的一些简单总结 二、分布式架构下常见…

【智能座舱系列| AR-HUD增强现实】—AR-HUD到底是“鸡肋”还是“真”香?

AR-HUD 概念 HUD,即抬头显示(Head Up Display),又叫平视显示系统。它的作用,就是把时速、导航等重要的行车信息,投影到驾驶员前面的挡风玻璃上,让驾驶员尽量做到不低头、不转头就能看到。 这种显示系统,原是军用战斗机上的显示系统,飞行员不必低头,就能在挡风玻璃上…

ChatGPT学习笔记;Meta发布Megabyte AI模型抗衡Transformer

AI知识 ChatGPT学习笔记 文章包括如下的内容: ChatGPT 介绍科普 背景知识ChatGPT 功能ChatGPT 原理 等等,文章的地址在这里。 AI新闻 🚀 Meta发布Megabyte AI模型抗衡Transformer:解决后者已知问题、速度提升4成 摘要&…

笔试强训5

作者:爱塔居 专栏:笔试强训 作者简介:大三学生,希望和大家一起进步 目录 day6 day7 day6 1.关于抽象类与最终类,下列说法错误的是? A 抽象类能被继承,最终类只能被实例化。 B 抽象类和最终类…

NET HELPMSG 3534 报错

使用了带管理员权限的 PowerShell(即在管理员权限下运行CMD) 然后进行安装和服务启动操作 1、清空 MySQL 下的 data 文件夹; 2、确保系统环境变量中已经配置了 mysql 的 bin 目录到Path中; 3、执行以下命令: sc delet…

《Opencv3编程入门》学习笔记—第四章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第四章 OpenCV数据结构与基本绘图 四、基础图像容器Mat (一)数字图像存储概述 图像在数码设备中的表现形式为包含众多强度值的像素点矩阵。 &a…

JAVA键盘录入

文章目录 JAVA键盘录入1.导包2.创建对象3.接受数据接收 b o o l e a n \color{red}{boolean} boolean类型数据接收 b y t e \color{red}{byte} byte类型数据接收 s h o r t \color{red}{short} short类型数据接收 i n t \color{red}{int} int类型数据接收 l o n g \color{red}{…

库的制作与使用

什么是库 库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。在 Linux 下有静态库和动 态库。因此编译出来的体积就比较大。 静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此 编译出来的体积就比较大…

轻松学习白嫖GPT-4,已经标星38K,不再害怕高昂的AI模型费用!

文章目录 白嫖方式GPT-4当前可用站点 白嫖方式GPT-4 计算机专业学生xtekky在GitHub上发布了一个名为gpt4free的开源项目,该项目允许您免费使用GPT4和GPT3.5模型。这个项目目前已经获得了380000颗星。 开源地址:https://github.com/xtekky/gpt4free 简而…

vue ts写法

Vue.js 和 TypeScript 结合使用可以让你的项目更加健壮和易于维护。在 Vue 3 中,你可以使用 Vue.js 的 Composition API 和 TypeScript 一起使用。以下是一个简单的 Vue.js 和 TypeScript 结合使用的例子: 首先,确保你已经安装了 Vue.js 和 T…

如何从电机控制转换为运动控制

随着越来越多的技术广泛应用于工业自动化,我们已经进入了工业4.0时代。新技术不断涌现,赋能人工智能和机器学习、数据分析、工业网络、网络安全和功能安全。然而,大多数工业自动化作为其他所有技术的核心,仍然依靠机器人和运动控制…

【PWN · ret2text | PIE 】[NISACTF 2022]ezpie

简单的PIE绕过 目录 前言 一、题目重述 二、解题思路 1.现有信息 2.思考过程 3.exp 总结 前言 所接触的PIE保护的第一题,也非常简单。 一、题目重述 二、解题思路 1.现有信息 PIE保护——程序可能被加载到任意位置,所以位置是可变的。程序返回…

聚观早报 | 英伟达推「AI」超算;中国2030年前载人登月

今日要闻:英伟达推「AI」超算;中国2030年前载人登月;AI大热,游戏股全线大涨;ofo创始人二次创业项目陷入困境;微信视频号原创标记已对外显示 英伟达推「AI」超算 5 月 29 日,NVIDIA 宣布推出一款…

安捷伦E4440A 26.5G频谱分析仪Agilent e4440a 销售/回收

Agilent E4440A HP E4440A频谱分析仪,3 Hz - 26.5 GHz(PSA 系列) Agilent / Keysight PSA 系列 E4440A 高性能频谱分析仪提供强大的一键式测量、多功能功能集和前沿技术,可满足您的项目和需求。选项可供您选择(详情请…

maven 项目中引入第三方jar,并且打包到项目的运行jar包中

背景说明 项目中遇到了人大金仓数据库的jar连接驱动&#xff0c;需要在maven中引入依赖信息 实践 方案1&#xff1a; 1.在官网下载jar包&#xff0c;https://www.kingbase.com.cn/zxwd/index.htm 下载地址。在项目文件中创建libs目录。 修改pom文件的配置信息 <depende…

如何在 Windows 中检查打开的TCP/IP端口

每当应用程序想要通过网络访问自己时,它都会声明一个TCP/IP端口,这意味着该端口不能被其他任何东西使用。那么,如何检查打开的端口以查看哪个应用程序已经在使用它呢? 检查打开的TCP/IP端口 查看端口使用和进程名称查看端口使用和进程标识符查看端口使用和进程名称 首先,你…

【完全揭秘】Traefik云原生网关——助力你的业务破万QPS

Traefik 是一款开源的反向代理和负载均衡软件&#xff0c;可以自动地为多个微服务实例进行负载均衡&#xff0c;并提供 HTTP/HTTPS/TCP/UDP 等协议支持。 Traefik 具有简单易用、自动发现服务、动态配置、可插拔的中间件等特点&#xff0c;被广泛应用于云原生和容器化场景中&am…

【随时更新】面试所需算法数据结构计算机知识点回顾

操作系统LRU算法 MySQL B树 哈夫曼编码和解码 C 哈夫曼编码 【介绍编码过程】 哈夫曼树编码及其图形化的实现 【使用可视化方式展现最终编码效果】 Python中使用哈夫曼算法实现文件的压缩与解压缩 【Python实现】 哈夫曼树 C语言实现 【图解如何生成】 编码过程 1. 使用二进…