1.申请商户API证书

APIv2 中,调用微信支付安全级别较高的接口(如:退款、企业红包、企业付款)

APIv3 中,调用微信支付所有接口

2.商户申请商户API证书时,会生成商户私钥,并保存在本地证书文件夹的文件apiclient_key.pem 中。私钥也可以通过工具从商户的p12证书中导出。请妥善保管好你的商户私钥文件。

3.平台证书

微信支付平台证书是指由微信支付 负责申请的,包含微信支付平台标识、公钥信息的证书。商户可以使用平台证书中的公钥进行验签。

微信支付平台证书请调用“获取平台证书接口” 获取。

4.签名生成

微信支付API v3 要求商户对请求进行签名。微信支付会在收到请求后进行签名的验证。如果签名验证不通过,微信支付API v3将会拒绝处理请求,并返回401 Unauthorized

4.1.0准备

商户需要拥有一个微信支付商户号,并通过超级管理员账号登录商户平台,获取商户API证书。 商户API证书的压缩包中包含了签名必需的私钥和商户证书。

5构造签名串

签名串一共有五行,每一行为一个参数。行尾以 \n(换行符,ASCII编码值为0x0A)结束,包括最后一行。如果参数本身以\n结束,也需要附加一个\n

HTTP请求方法\n

URL\n 请求时间戳\n

请求随机串\n

请求报文主体\n

  • 请求方法为GET时,报文主体为空。
  • 当请求方法为POST或PUT时,请使用真实发送的JSON报文。
  • 图片上传API,请使用meta对应的JSON报文。

对于下载证书的接口来说,请求报文主体是一个空串

6.计算签名值

绝大多数编程语言提供的签名函数支持对签名数据进行签名。强烈建议商户调用该类函数,使用商户私钥对待签名串进行SHA256 with RSA签名,并对签名结果进行Base64编码得到签名值。

7.设置HTTP头

微信支付商户API v3要求请求通过HTTP Authorization头来传递签名。 Authorization认证类型签名信息两个部分组成。

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

2.签名信息

注:以上五项签名信息,无顺序要求。

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

Authorization 头的示例如下:(注意,示例因为排版可能存在换行,实际数据应在一行)

Authorization: WECHATPAY2-SHA256-RSA2048 mchid="1900009191",nonce_str="593BEC0C930BF1AFEB40B4A08C8FB242",signature="uOVRnA4qG/MNnYzdQxJanN+zU+lTgIcnU9BxGw5dKjK+VdEUz2FeIoC+D5sB/LN+nGzX3hfZg6r5wT1pl2ZobmIc6p0ldN7J6yDgUzbX8Uk3sD4a4eZVPTBvqNDoUqcYMlZ9uuDdCvNv4TM3c1WzsXUrExwVkI1XO5jCNbgDJ25nkT/c1gIFvqoogl7MdSFGc4W4xZsqCItnqbypR3RuGIlR9h9vlRsy7zJR9PBI83X8alLDIfR1ukt1P7tMnmogZ0cuDY8cZsd8ZlCgLadmvej58SLsIkVxFJ8XyUgx9FmutKSYTmYtWBZ0+tNvfGmbXU7cob8H/4nLBiCwIUFluw==",timestamp="1554208460",serial_no="1DDE55AD98ED71D6EDD4A4A16996DE7B47773A8C"

8.演示代码 (JAVA)

import okhttp3.HttpUrl;
import java.security.Signature;
import java.util.Base64;
// Authorization: <schema> <token>// GET - getToken("GET", httpurl, "")// POST - getToken("POST", httpurl, json)
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"; }

Java接入微信支付ApiV3详细教程相关推荐

  1. Java接入微信支付超级详细教程——从入门到精通

    源码下载 源码获取邮箱:xiaoshu1024@qq.com 本文介绍了"二维码付款"的代码.其他微信支付方式的代码都在源码中. 一.准备开发所需的账号以及配置信息 解释:想要接入 ...

  2. Java接入微信支付APIV3(Native)

    Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信"扫一扫"完成支付的模式. 一.准备工作 微信商户平台 微信支付 - 中国领先的第三方支付平台 | 微信支付提 ...

  3. Java接入支付宝支付超级详细教程——从入门到精通

    ​ Java接入支付宝支付教程 源码下载 源码获取:点击获取源码 本文介绍了"二维码付款"的代码.其他支付方式的代码都在源码中. 一.创建应用 1.登录支付宝开放平台 支付宝开放平 ...

  4. 微信支付apiv3全教程

    文章目录 前言 一.微信支付流程理解 1.流程图 二.调用接口准备 1.初始化微信连接 2.调用微信统一下单接口 3.后端生成签名 三.微信回调通知 1.微信验签 2.数据解密 总结 前言 最近在开发 ...

  5. 后端---最全最简单细致的Java接入微信支付接口(Native接入)

    首先,我简单总结一下这几天搞微信支付和支付宝支付接口的体会,通过这几天的动手实操,加强了自己对SSM框架的认识,以及对业务逻辑的思路,明白了许多以前不懂的许多空白. 做支付宝接口的接入完全可以按照支付 ...

  6. uni-app - 最详细 H5 网页接入微信支付功能,提供从详细的示例代码与注释(移动端网页实现微信支付能力,微信公众号前端支付 JSAPI / JS-SDK 详细示例源码)官方最新超级详细教程

    前言 关于 uni-app 项目中接入微信支付的文章鱼龙混杂,各种 JSAPI / JS-SDK 乱代码.过时.没注释.不讲流程原理,非常难用. 本文实现了 uni-app H5 移动端网页项目,实现 ...

  7. 微信支付-超详细java开发-小程序对接

    文章目录 前言 微信支付接入前准备 1.思路介绍 2.如何注册小程序账号? 3.如何接入微信支付,需要准备哪些东西? 4.小程序接入前的准备(APPID及mchid以上两步已拿到,只需配置一下API ...

  8. Java接入微信native、jsapi支付

    Java接入微信native.jsapi支付 一.说明 本文示例使用的微信支付版本为V2版本,是旧版本,旧版本与新版本的接口不一,并不通用. 微信官方接口文档地址:https://pay.weixin ...

  9. Java接入支付宝支付教程

    Java接入支付宝支付教程 一.创建应用 1.登录支付宝开放平台 支付宝开放平台网址:https://open.alipay.com/platform/developerIndex.htm 2.创建一 ...

最新文章

  1. DL之CNN:关于CNN(卷积神经网络)经典论文原文(1950~2018)简介总结框架结构图(非常有价值)之持续更新(吐血整理)
  2. “程序”二字的五笔字根
  3. 对acm icpc 的随笔——01
  4. 那些ubuntu创建用户踩过的坑
  5. Entity Framework context per request
  6. python怎么播放mp3_python上播放mp3歌曲
  7. java中string类相等_Java中String类的常见面试题
  8. PHP工程师最佳学习路线!【重磅推出】
  9. html5游戏开发--动静结合(二)-用地图块拼成大地图 初探lufylegend
  10. 怎么向前撤回_延迟复工,工资到底怎么算?
  11. 基于Canvas和HTML+CSS3构建JavaScript弹幕库
  12. 国外免费数据集下载网址
  13. 卫星地面站空间分集的必要性及解决方案
  14. android 盒子 串流,Steam流式盒子(Steam串流手机App)1.1.0 安卓正式版
  15. android 修改以太网mac地址_Android5.1修改以太网MAC地址(SElinux)
  16. python多行注释报错_解决python多行注释引发缩进错误的问题
  17. gorm 记录sql日志 每天一个日志文件
  18. ReportStudio入门教程(七十二) - 显示时间进度(进度条版)
  19. win11本地用户和组找不到的解决办法
  20. 转行程序员日记--2020-08-12

热门文章

  1. 一款很好用的调试JS的Eclipse插件
  2. 26.gateway的IP 认证拦截,gateway做token验证 流程图(springcloud)
  3. 数据融合(data fusion)原理与方法
  4. 文明重启服务器维护中怎么办,【FAQ】文明重启常见问题大全
  5. 谷歌浏览器的timeline工具的使用
  6. 用Qt画圣诞树——要画就画最丑的圣诞树
  7. 智慧井盖安装注意事项
  8. 客制化键盘编程_最全最细客制化键盘指南!(上)
  9. 接口自动化测试(1)
  10. 2021巢湖第一中学高考成绩查询,2021年巢湖高中学校排名及录取分数线排名