文章目录

  • 1、介绍
  • 2、代码
  • 3、注意点

1、介绍

代码地址: https://github.com/xm646236438/wechat_pay_score/tree/master
SpringBoot
具体的代码以及逻辑可以看 微信支付分(一)–创建支付分订单 以及 GitHub
上一篇博客: 微信支付分(四)–取消支付分订单

2、代码

public ResponseEntity payScoreCallbackNotification(HttpServletRequest request) {try {ServletInputStream servletInputStream = request.getInputStream();int contentLength = request.getContentLength();byte[] callBackInBytes = new byte[contentLength];servletInputStream.read(callBackInBytes, 0, contentLength);String callBackIn = new String(callBackInBytes, "UTF-8");// 模拟确认订单回调通知API
//            String callBackIn = "{\"id\":\"123\",\"create_time\":\"2020-11-02T16:31:35+08:00\",\"resource_type\":\"encrypt-resource\",\"event_type\":\"PAYSCORE.USER_CONFIRM\",\"summary\":\"微信支付分服务订单用户已确认\",\"resource\":{\"original_type\":\"payscore\",\"algorithm\":\"AEAD_AES_256_GCM\",\"ciphertext\":\"1111111111==\",\"associated_data\":\"payscore\",\"nonce\":\"12321321\"}}";// 模拟支付成功回调通知API
//            String callBackIn = "{\"id\":\"123\",\"create_time\":\"2020-11-02T16:31:35+08:00\",\"resource_type\":\"encrypt-resource\",\"event_type\":\"PAYSCORE.USER_PAID\",\"summary\":\"微信支付分服务订单支付成功\",\"resource\":{\"original_type\":\"payscore\",\"algorithm\":\"AEAD_AES_256_GCM\",\"ciphertext\":\"1111111111==\",\"associated_data\":\"payscore\",\"nonce\":\"12321321\"}}";log.info("【微信支付分免密支付回调】:" + callBackIn);JSONObject notifyIn = JSONObject.parseObject(callBackIn);if (notifyIn == null) {log.error("参数不正确,反序列化失败");return new ResponseEntity(HttpStatus.EXPECTATION_FAILED);}//解密回调信息JSONObject resource = notifyIn.getJSONObject("resource");byte[] key = (mchKeyVVV).getBytes("UTF-8");ApiV3Util aesUtil = new ApiV3Util(key);String decryptToString = aesUtil.decryptToString(resource.getString("associated_data").getBytes("UTF-8"), resource.getString("nonce").getBytes("UTF-8"), resource.getString("ciphertext"));if (StringUtils.isEmpty(decryptToString)) {return new ResponseEntity(HttpStatus.EXPECTATION_FAILED);}log.info("【支付分支付回调解密结果:】" + decryptToString);// 用户确认成功if ("PAYSCORE.USER_CONFIRM".equals(notifyIn.get("event_type"))) {log.info("用户确认成功");// 处理业务逻辑}// 支付成功if ("PAYSCORE.USER_PAID".equals(notifyIn.get("event_type"))) {log.info("用户支付成功");// 处理业务逻辑}return new ResponseEntity(HttpStatus.OK);} catch (Exception e) {log.error("微信支付回调处理异常," + e.toString());return new ResponseEntity(HttpStatus.EXPECTATION_FAILED);}}
package com.tomorrow.wechat_pay_score.util.wechart;import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;/*** @author Tomorrow* @date 2020/6/21 17:09*/
public class ApiV3Util {static final int KEY_LENGTH_BYTE = 32;static final int TAG_LENGTH_BIT = 128;private final byte[] aesKey;public ApiV3Util(byte[] key) {if (key.length != KEY_LENGTH_BYTE) {throw new IllegalArgumentException("无效的ApiV3Key,长度必须为32个字节");}this.aesKey = key;}public String decryptToString(byte[] associatedData, byte[] nonce, String ciphertext)throws GeneralSecurityException, IOException {try {Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");SecretKeySpec key = new SecretKeySpec(aesKey, "AES");GCMParameterSpec spec = new GCMParameterSpec(TAG_LENGTH_BIT, nonce);cipher.init(Cipher.DECRYPT_MODE, key, spec);cipher.updateAAD(associatedData);return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)), "utf-8");} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {throw new IllegalStateException(e);} catch (InvalidKeyException | InvalidAlgorithmParameterException e) {throw new IllegalArgumentException(e);}}
}


3、注意点

1、回调的地址需要是HTTPS, 域名, 不能是IP, IP会接受不到
2、确认订单回调通知API(用户确认授权后就会回调)
3、支付成功回调通知API(在调用完结支付分订单API后就会调)
4、因为关键信息有些多, 所以马赛克多了点
5、如果是多商户该如何解密: 1.轮询解密, 2.早创建订单的notify_url上面做操作, 进行Restfule风格, 列如: https://****/{orderNo}/test, 截取orderNo进行区分

微信支付分(五)--回调通知相关推荐

  1. 微信支付分(四)--取消支付分订单

    文章目录 1.介绍 2.代码 3.注意点 1.介绍 代码地址: https://github.com/xm646236438/wechat_pay_score/tree/master SpringBo ...

  2. 微信支付分(先享后付)对接记录:

    微信支付分(先享后付)对接记录: 微信支付分对接步骤 填写开通支付分的申请表格 此步骤大概需要审核 1-3 个工作日; (模板-服务信息配置表-[先享后付免确认]-[商户名].xls) 填写商户信息 ...

  3. java快速对接微信支付分(二)

    4.实际开发的细步骤 C--请求订单接口返回结果页面 1.当前端进行调用微信订单接口的时候, 该接口微信那边会进行自己进行返回两个页面给用户,一个是符合免押的条件直接给用户确认订单, 二是为符合微信支 ...

  4. 微信支付分支付免押订单租赁订单thinkphp5

    智慧零售和先享后付使用微信支付V3版接口规则参见:https://wechatpay-api.gitbook.io/wechatpay-api-v3/ 免押租借和免押速住使用微信支付V2版接口规则参见 ...

  5. 微信支付V3版本回调+验签流程

    本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中的后续之微信支付后的回调. 一.回调验签流程介绍 二.核心流程操作 本文主要是接前面2篇微信V3支付参数准备和微信V3支付整合进项目中 ...

  6. 微信支付分,APIv3版本接口对接过程(附代码)

    刚对接完微信支付分,对接过程还是有点小坑,微信官方的接口文档写的比较粗略,代码示例比较少,网上的相关技术博客少之又少,前期还是有点小困难的,所以决定把对接过程梳理一下,希望能帮到需要的人. APIv3 ...

  7. Payment Spring Boot 1.0.2.RELEASE 发布,接入微信支付分、先享卡功能

    Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 演示例子:https ...

  8. 重磅消息:微信支付分最新开通方法!

    期待已久的"微信支付分"终于上线了,微信将对标蚂蚁金服"芝麻信用".以前朋友之间互相对比"芝麻信用"的分数,得分高的就好像信用比其他人更好, ...

  9. 微信支付分开通了!对飙芝麻信用分!开通与查看攻略!

    微信支付分是微信体系下对个人的消费.守约等行为的综合计算分值,为用户提供更便捷的生活方式!其实就是微信的芝麻信用分~ 如何开通?目前可以接入微信支付分的商户所提供的指定服务中,申请开通微信支付分.比如 ...

最新文章

  1. java做台球时老是闪屏_电脑老是闪屏的原因和解决办法
  2. 连接oracle10g数据库免安装oracle客户端解决办法 (转载)
  3. JavaScript --- this
  4. 安装 Git ( Windows、linux、Mac)
  5. 小程序 - swiper除了左右切换还有上下滚动超出屏幕的内容
  6. 解析 URL Params 为对象
  7. 斜角地图逻辑原理解析和Isometric地图编辑器设计方案(转)
  8. TIOBE 5 月编程语言排行榜:暴涨的 C,逆袭的 Scala
  9. SqlServer中 SET DATEFIRST
  10. 微服务架构学习笔记(一):重新认识微服务
  11. Service自动被销毁?
  12. Eclipse SVN提交代码ClientException异常解决
  13. 计算机组成原理(第三版)唐朔飞-第四章存储器-课后习题
  14. JQuery网页飘窗
  15. 汽车电子行业入门指南「主要国内新能源车销量」
  16. 微信公众号数据2019_数据丨2019年微信公众号文章数据报告!
  17. 小程序导航图标_商场寻店不迷路 业内首个小程序AR导航上线
  18. 网站的中英文切换--i18next
  19. lucas-kanade学习
  20. 青岛新媒体运营教程:你知道几个,短视频变现的方式

热门文章

  1. alipay-sdk-python支付宝开放平台官方SDK使用详解
  2. Excel如何同时查找多个数据
  3. DEEPFAKE VIDEO DETECTION USING 3D-ATTENTIONAL INCEPTION
  4. 弗洛伊德(Floyd)
  5. crypto-MagicianV(buuctf)
  6. 私有云落地解决方案之网络篇-关键技术-DHCP地址-1
  7. Docker系列之(一):10分钟玩转Docker
  8. 您的连接不是私密连接(解决方法)
  9. vue中引入看板娘,敲可爱
  10. iTutorGroup:小班课成学习效果与利润兼得的教育产品形态