java超详细小程序对接微信支付(二),看完不会你打我
4.支付通知回调
B-验证签名
因为这个接口是微信进行回调的,但是如果别人知道了这个接口就给进行伪造信息进行调用这个接口
补充一点,这里这个接口最后要返回给微信success 不然会一直进行调用该接口
以下是我封装的验证签名的方法
要给的参数为1-serialnumber请求头里面的序列号 2- message加密之前的报文组合 3- signature加密之后的报文的签名
public static boolean signVerify(String serialnumber, String message,String signature ){PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(privateKey);//使用自动更新的签名验证器,不需要传入证书verifier = new AutoUpdateCertificatesVerifier(new WechatPay2Credentials(merchantId, new PrivateKeySigner(merchantSerialNumber, merchantPrivateKey)),apiV3Key.getBytes(StandardCharsets.UTF_8));httpClient = WechatPayHttpClientBuilder.create().withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey).withValidator(new WechatPay2Validator(verifier)).build();return assertTrue(verifier.verify(serialNumber, message.getBytes(StandardCharsets.UTF_8), signature));}
不通过就直接return false 给微信
C--进行解密
因为微信带来的数据resource 里的ciphertext要进行解密的
先把里面的associatedData 和nonce 和ciphertext拿出来
associatedData和nonce是微信返回的数据里面的可直接进行拿出来
在进行次方法进行解密
public String decryptToString(byte[] associatedData, byte[] nonce, String ciphertext)throws GeneralSecurityException {try {SecretKeySpec key = new SecretKeySpec(aesKey, "AES");GCMParameterSpec spec = new GCMParameterSpec(TAG_LENGTH_BIT, nonce);Cipher cipher = Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.DECRYPT_MODE, key, spec);cipher.updateAAD(associatedData);return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)), StandardCharsets.UTF_8);} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {throw new IllegalStateException(e);} catch (InvalidKeyException | InvalidAlgorithmParameterException e) {throw new IllegalArgumentException(e);}}
解密之后的也是一个json串可进行转换为实体类
D--进行验证订单是否一致
从拿到的订单号里面,去自己的数据库去查询,看该订单里的数据金额是否和数据库里面的订单的数据金额是一致的
E--关单操作
在这里可以使用延迟消息进行去判断如果用户长期未进行操作进行调用微信进行支付单的关闭
关闭订单 通过我们平台的订单号进行关闭
读取状态码--response.getStatusLine().getStatusCode()
为204即关单成功
返回的状态码是204即关闭订单成功
关单路径:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_3.shtml
对(一)的一些补充
1.我的项目是基于maven和springboot框架下的,实现支付要导入支付包
<dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.4.7</version></dependency>
2.对于小程序调起支付的时候要携带的paySign签名,官方给出了专门的验证的工具
点击下载
解压直接进行运行即可
输入你的明文和签名即可进行验签
工具地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml
3.相关的官方测试工具类
以下是详细的官方工具类可供进行参考
工具类一
工具二
详细的开发文档
以下是小程序支付的流程图
欢迎提出意见,一名热爱学习和分享的攻城狮
java超详细小程序对接微信支付(二),看完不会你打我相关推荐
- springboot 微信小程序 对接微信支付功能(完整版)
微信小程序对接微信支付功能 业务流程时序图 JAVA版 1. 项目架构 2. pom.xml配置文件 3. 小程序账号参数配置类 4.JAVA 通用代码 4.1 工具类 4.1.1 IdGen (id ...
- 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程)
本篇记录说明 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程,详细内容可私信交流) (第一次写博客,写得不好的地方见谅,面向新手,大佬请无视,不喜勿喷 ...
- 微信小程序开发-微信支付之免密支付(自动扣费)一 小程序+java接口
微信小程序开发-微信支付之免密支付(自动扣费)一 小程序+java接口 链接: 点击进入
- 微信公众号,服务号,小程序,微信支付对接需要注册哪些账号
文章目录 写在前面 微信平台 1.[微信公众平台](https://mp.weixin.qq.com/) 提供产品 订阅号 什么是订阅号? 文档 服务号 什么是服务号? 文档 小程序 什么是微信小程序 ...
- Delphi调用微信原生Web开发接口JS-SDK开发小程序及微信支付等的Rest API
目录 Delphi调用微信原生Web开发接口JS-SDK开发小程序及微信支付等的Rest API 一.概述及API 1.JS-SDK是对之前的 WeixinJSBridge 的一个包装 2.JS-SD ...
- 微信小程序接入微信支付(二):后台调用统一下单接口
微信统一支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1 因该接口需要商户系统中自己的订单编号,笔者先 ...
- 【微信小程序】微信支付接入全流程
一. 前置条件 接入支付首先得需要有企业资质,并开通企业对公户 注册微信支付并进行对公户打款认证 二. 开始接入 1. 下载微信支付的AP证书 2. 服务端接入微信支付 2.1 引入相关maven配置 ...
- 小程序,微信支付:支付失败,商户号该产品权限未开通,请前往商户平台 产品中心检查后重试
小程序,微信支付:支付失败,商户号该产品权限未开通,请前往商户平台>产品中心检查后重试 这个问题困扰了好几个小时,坑啊. 解决方法: 报这个错误提示,可以从以下两点来排查: 1,在统一下单中,a ...
- 微信小程序订单生成支付二维码接口 code
手机的小程序订单是直接拉起支付界面的,有些朋友需要生成支付二维码 这边就需要去调用微信的支付二维码接口了 需要的参数是 session_id, timeStamp, nonceStr, package ...
最新文章
- jQuery 实例 教程
- 平板电脑办公软件_大屏平板互动软件-平板电脑触摸大屏控制软件
- [SpringBoot2]HelloWorld
- html中评论应该怎么写,HTML-评论
- Python学习笔记-包
- php header详解
- 文本属性之文本颜色(CSS、HTML)
- 父级div没高度不能自适应高度的原因——子级使用css float浮动
- 2020-07-17
- 如何编译并修改FBReader的package(安卓平台)
- 高仿京东分类页面实现
- R语言和Python交互
- 期货对冲套利实战知识
- REST服务开发实战
- Java实现 LeetCode 237 删除链表中的节点
- IC人物志-Intel创世人Robert Norton Noyce(罗伯特·诺伊斯)
- matlab NCA,Neighborhood Component Analysis (NCA) Feature Selection
- SEM和SD的区别和联系,以及其计算方法
- uniapp textarea编辑保留空格换行
- 简单医药项目的疾病分类二级联动