java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式

1.场景

  在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下:

    

2.导包

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.60</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.jasypt/jasypt -->
        <dependency>
            <groupId>org.jasypt</groupId>
            <artifactId>jasypt</artifactId>
            <version>1.9.3</version>
        </dependency>

3.解密

  说明:方法中参数 reqInfo 就是退款结果通知接口中的 req_info 字段值

private String descrypt(String reqInfo) throws NoSuchPaddingException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        byte[] reqInfoB = Base64.decodeBase64(reqInfo);
        String key_ = DigestUtils.md5Hex(WXPayConfig.getInstance().getKey()).toLowerCase();

        if (Security.getProvider("BC") == null){
            Security.addProvider(new BouncyCastleProvider());
        }
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
        SecretKeySpec secretKeySpec = new SecretKeySpec(key_.getBytes(), "AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        return new String(cipher.doFinal(reqInfoB));
    }

4.结果

  

5.参考

  解密方式:https://blog.csdn.net/qq_25958497/article/details/87937020

  报错解决(报错内容“No such provider: BC”):https://www.cnblogs.com/wswang/p/7718150.html

原文地址:https://www.cnblogs.com/coding-one/p/11993881.html

时间: 2024-10-09 10:06:29

java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式的相关文章

在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误

这是 微信支付-统一下单 接口文档 一.问题描述 在调用统一下单接口时,报mch_id参数格式错误,但商户ID确实是10位数字正确的,可就是一直报这个错误 返回的错误xml如下: 二.排错过程 1.多次对比官网xml格式,确认生成的xml是否有误 2.检查生成的xml是否带有空格.字段是否拼写有误,检查生成的xml是否有缺少或多字符 官方的xml: 我开发过程中生成的xml: 对比发现,我生成的xml参数比官方的参数多了CDATA等着字符,但CDATA标签是用于说明数据不被XML解析器解析的,不

解密微信域名检测API接口实现原理

最近在网上看到很多网友在问微信域名拦截检测API接口.有的是想找一个稳定靠谱的服务商,有的是刚接触这方面的业务想通过程序来代替之前的人工检测,更有甚者想具体了解微信域名检测API接口的原理,当然这部分人群大多数是技术人员或者是喜欢研究的.不管你是出于什么目的,作为一个研究接口服务多年的人来说这个接口的原理是非常简单的,而且产品基本上也很成熟.如果不是想深入接口行业而只是用这个工具,建议直接购买服务即可,着重考虑营销方面可能更有必要.猴子数据今天在这里分享一段代码供大家参考,如有不懂的地方可以交流

猴子数据解密微信域名检测API接口实现原理

最近在网上看到很多网友在问微信域名拦截检测API接口.有的是想找一个稳定靠谱的服务商,有的是刚接触这方面的业务想通过程序来代替之前的人工检测,更有甚者想具体了解微信域名检测API接口的原理,当然这部分人群大多数是技术人员或者是喜欢研究的.不管你是出于什么目的,猴子数据作为一个研究接口服务多年的服务商来说这个接口的原理是非常简单的,而且产品基本上也很成熟.如果不是想深入接口行业而只是用这个工具,建议直接购买服务即可,着重考虑营销方面可能更有必要.猴子数据今天在这里分享一段代码供大家参考,如有不懂的

php 微信支付 回调通知不停的坑

微信支付已完工,最后有点小问题就是微信的回调会重复9次 第一步: $return = "success"; echo $return; 不管用 第二步: $return = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";

微信支付异步通知无结果

最近做微信支付看了大多和支付宝,网银在线等接口对接差不多. 但微信支付 发起请求的还需要填写支付的目录,另外获取code,access_token的时候需要设置网页授权域名. 如下图: 另外,微信支付和其他一样有一个同步,一个异步的通知.因好多程序都是做了pc,手机端适配,域名可能不一样,在使用中会出现执行中断的结果.笔者找了几天发现原来是异步的问题.如下微信官方demo,notify_url 参数 //①.获取用户openid $tools = new JsApiPay(); $openId

对接微信支付使用HMAC-SHA256使用签名算法实现方式

最近做微信押金支付对接,很多坑,心累!这里提醒一下各位: 首先,确保自己商户号进了白名单,没有需要联系客服,否则接口是调不通的,会一直提示参数错误 其次,确保接口文档是最新的,最好去官网去看,否则可能会有问题,我就是被这个坑了好久,以为拿到的接口文档是对的,结果参数一直有问题 ,最后发现是文档有问题,而且官网上文档也有问题,我已经发现好几个了,比如fee_type这个参数,明明写着不是必填,但是一定要填,否则会报签名错误之类的返回码 所以文档也有可能不及时,所以最好就是自己再三确认之后,多与客服

微信支付退款

微信退款感觉比支付宝要容易一点 官网api:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1 直接上代码: public function refound(){ $ref= md5("appid=1233213&mch_id=1233213&nonce_str=2194kfhaafaf384&op_user_id=1461000002" . "&out_refund_n

微信支付退款接口

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); X509Certificate cer = new X509Certificate(cert, password,X509KeyStorageFlags.PersistKeySet|X509KeyStorageFlags.Exportable|X509Ke

thinkphp5.0 中简单处理微信支付异步通知

1 public function wx_notify(){ 2 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 3 libxml_disable_entity_loader(true); 4 $xml = json_decode(json_encode(simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true); 5 if($xml['out_trade_