$xmlResult = file_get_contents("php://input");//获取微信的数据$result = $this->xmlToArray($xmlResult);//将xml转成数组
// 将加密的数据解密,方法在下面$reqInfo = $this->refund_decrypt($result['req_info']);
/** 退款通知解密* @Author WangZhaoBo* @param $str 微信同步的加密串req_info* @param $key 商户key*/
public function refund_decrypt($str) {$key = md5($this->appSecret);$str = base64_decode($str);$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);$block = mcrypt_get_block_size('rijndael_128', 'ecb');$pad = ord($str[($len = strlen($str)) - 1]);$len = strlen($str);$pad = ord($str[$len - 1]);return substr($str, 0, strlen($str) - $pad);
}

//SHA256签名

/***     作用:生成256签名*/public function get256Sign($Obj,$key = null){foreach ($Obj as $k => $v){$Parameters[$k] = $v;}//签名步骤一:按字典序排序参数
        ksort($Parameters);$String = $this->formatBizQueryParaMap($Parameters, false);//echo '【string1refund_decrypt】'.$String.'</br>';//签名步骤二:在string后加入KEYif(is_null($key)){$key =  WxPayConf_pub::$KEY;$String = $String."&key=".WxPayConf_pub::$KEY;}else{$String = $String."&key=".$key;}echo $String;//签名步骤三:MD5加密//$String = md5($String);$String = hash_hmac("sha256", $str, $key);//echo "【string3】 ".$String."</br>";//签名步骤四:所有字符转为大写$result_ = strtoupper($String);//echo "【result】 ".$result_."</br>";return $result_;}

AEAD_AES_256_GCM的解密php示例代码 (参考:https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=19_11和https://blog.csdn.net/u010324331/article/details/82153067和https://pay.weixin.qq.com/wiki/doc/api/download/wxpay_xiaowei_cert.pdf和)

//region 证书解密start public function decodePem(){$ciphertext = '加密后的证书内容';$nonce = '加密证书的随机串,加密证书的随机串';$associated_data = '加密证书的随机串,固定值: certificate';$key = '你的APIv3密钥';$check_sodium_mod = extension_loaded('sodium');if($check_sodium_mod === false){echo '没有安装sodium模块';die;}$check_aes256gcm = sodium_crypto_aead_aes256gcm_is_available();if($check_aes256gcm === false){echo '当前不支持aes256gcm';die;}$pem = sodium_crypto_aead_aes256gcm_decrypt(base64_decode($ciphertext),$associated_data,$nonce,$key);var_dump($pem); //这是解密出来的证书内容,复制出来保存就行了
    }//endregion 证书解密end 

使用sodium_crypto_aead_aes256gcm_decrypt函数需要安装sodium扩展,要求PHP版本必须大于7,小于7的也有这个扩展, 但是没有sodium_crypto_aead_aes256gcm_decrypt这个方法.

安装sodium扩展方法看这里https://blog.csdn.net/u010324331/article/details/82153067

如果不安装扩展,怎么办? 用paragonie/sodium_compat这个类库.

Sodium Compat 是用于 Sodium 加密库(libsodium)的纯 PHP 填充,它是 PHP 7.2.0+ 的核心扩展,也可用于 PECL。
这个库 tentativeley 支持PHP 5.2.4 - 7.x(最新版),但官方只支持非 EOL 版本的 PHP。
如果安装了 PHP 扩展,Sodium Compat 将机会性地透明地使用 PHP 扩展而不是我们的实现。
github 地址: https://github.com/paragonie/sodium_compat

其中ParagonIE_Sodium_Compat类下面有一个crypto_aead_aes256gcm_decrypt方法.

调用方法

ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt($ciphertext,$associated_data,$nonce,$key);

转载于:https://www.cnblogs.com/wangzhaobo/p/11040736.html

微信退款通知,退款回调数据解密.SHA256签名AEAD_AES_256_GCM解密相关推荐

  1. 微信支付退款回调踩坑及解决方案(附解密代码)

    文章目录 1. 回调失败问题(沙箱环境) 2. 解决方案 3. 退款回调的解密代码 1. 回调失败问题(沙箱环境) 问题始末: 最近再弄微信退款回调发现设置的回调的url根本就没有被调用,但是微信支付 ...

  2. PHP对微信支付V2版本回调以及订单查询(逻辑重制版)

    PS:v2版本支付的回调以及订单的查询都已经写过了,昨天在和别人讨论时,对相关的逻辑做出了较大的修改,回调配合订单查询共同使用,提高安全防护; 小程序端JS代码: getData(){var open ...

  3. php内部通知机制,PHP_浅析PHP微信支付通知的处理方式,通知机制的实现,官方只有文 - phpStudy...

    浅析PHP微信支付通知的处理方式 通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测试. 从文档上说的来看,微信每次通知过来的数据,结构比较复杂,是一个多段数据,除了 ...

  4. php微信支付怎么来测试_PHP微信支付通知处理方式实现方法

    本文是对上篇文章的一个补充,主要是官方没有关于通知的demo,摸石头过河真的很难受,方便大家开发,放出来给大家看看 通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测 ...

  5. php微信支付结果通知接收,浅析PHP微信支付通知的处理方式

    通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测试. 从文档上说的来看,微信每次通知过来的数据,结构比较复杂,是一个多段数据,除了要取出POST数据外,还要取其它的 ...

  6. 微信支付通知的处理方式简要解析

    通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测试. 从文档上说的来看,微信每次通知过来的数据,结构比较复杂,是一个多段数据,除了要取出POST数据外,还要取其它的 ...

  7. java 微信申请退款,退款回调通知,解密,V2版

    下载微信官方提供的SDK,转 https://blog.csdn.net/qq_40506288/article/details/110918650 博客查看下载流程 微信退款说明,官方提供:http ...

  8. 小程序微信退款(退款信息回调解密)

    一.微信支付(简单贴一下) /** 发起微信支付 */public Map wechatPay(String openid, HttpServletRequest request, String ou ...

  9. 微信退款通知req_info解密java_2018.05.24 解密微信退款结果通知中的加密信息req_info...

    在微信返回的退款结果通知中,包含了一个加密信息字段req_info 微信支付文档中有提及到如何解密: 现在我们就一步一步解密得到返回的字段信息: 前提工作: 1.添加maven依赖 org.bounc ...

最新文章

  1. R语言使用apriori算法进行关联规则挖掘实战:关联规则概念、频繁项集、支持度(support)、置信度(confidence)、提升度(lift)、apriori算法
  2. Python爬虫学习笔记(三)——正则表达式
  3. VI编辑器的操作按键说明
  4. 6-3 二叉树的重建 uva536
  5. MySQL--Centos7下安装5.7.19
  6. 甘肃政企云计算机服务平台,西北政企云计算服务中心
  7. ubuntu上搭建wiki系统
  8. 工会分销系统部署搭建维护定制工会分销高可用架构
  9. python 坐标轴单位标注_matlab坐标轴如何带单位标注?
  10. 企业密钥管理(EKM)行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  11. HMS Core使能AI智慧体验,共建创新应用生态
  12. E5 调用API续订服务:Microsoft 365 E5 Renew Web
  13. 【2022年4月1日 经验】Microsoft AZ-900 微软认证 网上考试 攻略
  14. 解决 百度地图多点聚合卡顿问题
  15. 计算机复试不刷人大学,这些学校复试几乎不刷人,报了就稳了!
  16. 周年纪念日的自作视频
  17. sqlite3导出csv首位0_运动手表GPS轨迹文件导出方法
  18. 2022年湖南医院三基考试每日一练及答案
  19. 随机生成50道100以内的加减题(在线答题)
  20. jsw管理tomcat

热门文章

  1. WebGL——osg框架学习一
  2. datatable转化泛型
  3. (转) Spring 3 报org.aopalliance.intercept.MethodInterceptor问题解决方法
  4. POJ 1797 Heavy Transportation
  5. IOS UIPageController
  6. Linux 下杀毒软件 clamav 的安装和使用
  7. dataTables本地刷新数据解决只能初始化一次问题
  8. git的简单理解及基础操作命令
  9. [Leetcode] Majority Element 众数
  10. 天津海运[600751]股票