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

这篇具有很好参考价值的文章主要介绍了微信公众号、支付接口认证:一步步教您如何实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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认证机制
  • 微信支付接口认证方案即是基于数字签名的技术方案

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

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

如果文章对你有帮助,请不要忘记加个关注、点个赞!必回关!!!文章来源地址https://www.toymoban.com/news/detail-465474.html

到了这里,关于微信公众号、支付接口认证:一步步教您如何实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微信公众号】微信 jsapi 支付大概流程

    jsapi 支付可运用于微信小程序和 h5 jsapi 支付不会弹出二维码(这点与 native 支付不同) jsapi 支付运用于移动端 native 支付运用于 PC 端 🔥 微信支付需要商家申请 商户号 ,商务号需要和小程序或公众号(服务号)进行绑定 💦 在微信商务平台可开通 native 支付、jsapi 支付或其

    2024年02月09日
    浏览(40)
  • 微信小程序支付V3版本接口实现

    特别说明:遇到 java.security.InvalidKeyException: Illegal key size ******* getValidator的错误 参考添加链接描述 JDK7的下载地址 JDK8的下载地址: 下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt 如果安装了JRE,将两个jar文件放到%JRE_HOME%libsecurity目录下覆盖原来的文件 如果安

    2024年02月09日
    浏览(25)
  • h5 小程序 公众号 接入微信支付开发

    ps:一般公司开发不需要确认 流程:下单-调起支付-返回结果跳回本页面 开发准备: 1: 配置并授权项目地址(地址需要是完整的)(配置的是点击支付调起微信的那个本项目地址) 2: 获取code(为获取openid做准备) window.location.href= = \\\'https://open.weixin.qq.com/connect/oauth2/authorize?

    2024年02月15日
    浏览(39)
  • 微信支付, 小程序,公众号, 商户号 需要进行的配置

    要想绑定商户号对接支付功能的必须是服务号,不能是订阅号. 服务号的申请创建这里不多说.按照微信提示步骤走即可 1.1.1点击左侧菜单 基本配置 1.1.2点击启用开发者密码(AppSecret) 根据提示验证 1.1.3保存记录AppID、AppSecret。 白名单内只填写ip地址即可 点击左侧菜单 开发者工

    2024年02月16日
    浏览(16)
  • java微信公众号JSAPI支付以及所遇到的坑

    上周做了个支付宝微信扫码支付,今天总结一下。微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊。 笔记地址 http://note.youdao.com/noteshare?id=269ddffb1f95e69eafb281d054f9ff25sub=82AACBC2E6814133938D407BD3FF4737 先梳理下流程,对应的文档 微信统一下

    2024年02月08日
    浏览(18)
  • 微信公众号使用uniappH5、python对接微信支付V3-JSAPI的支付功能

    微信公众号网页用uniapp,后台用的python,近期对接微信支付-apiv3版-jsapi支付,特此整理记录方便日后查找使用 apiv3升级后,请求体使用不用xml使用json,每次请求需要在header中添加签名,而签名需要用微信支付的商户证书私钥进行RSA加密 使用公众号进行对接流程如下 先保存公

    2024年02月02日
    浏览(37)
  • 微信公众号程序或微信小程序接入微信支付流程(前后端程序示例)

      微信公众号程序或微信小程序项目中基本都要有微信支付。支付场景基本就是点击支付,然后手机底部拉起输入微信支付密码弹窗,密码输入正确后,支付完成。但是无论是微信小程序或微信公众号程序都是在后端调用微信api接口进行统一下单,将接口返回数据回传前端

    2024年02月09日
    浏览(32)
  • 微信公众号配置 Token 认证以及消息推送功能

    🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏:业务设计 🤔 我当前正在学习微服务领域、云原生领域、消息中间件等架构、原理知识 💬 向我询问任何您

    2024年02月09日
    浏览(26)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包(包含支付出现的多次回调的问题解析,接口幂等性)

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年01月16日
    浏览(49)
  • 微信小程序中如何实现微信支付

    微信支付是微信公众平台提供的一种在线支付服务,可以为用户提供快速、方便、安全的支付体验。而在微信小程序中实现微信支付,则可以为应用程序提供更多的功能和服务,提高用户体验和商业价值。因此,在本文中,我们将介绍如何在微信小程序中实现微信支付。 在使

    2024年02月05日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包