微信下载交易账单API工具类

本文提供了一个微信下载交易账单的API工具类,适用于微信支付V2版本。文中提及若需使用V3版本,需参照官方文档。文章中为了简化操作,引入了处理HTTPS请求和加密的公共工具包,并提供了快速替换依赖的方法。同时,介绍了与工具类配合使用的两个返回字段对应类:WxTradeDetail(账单每条交易详细信息)和WxTradeSummary(账单汇总信息)。
摘要由CSDN通过智能技术生成

本文是基于微信支付V2版本的工具类,如果使用V3的版本请参考官网:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/api.shtml

因为图方便,所以引入了两个公共的工具包 来处理https 请求 以及 加密,里面也封装了快速替换下面两个依赖的方式

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.2</version>
        </dependency>
        
        <dependency>
            <groupId>com.github.javen205</groupId>
            <artifactId>IJPay</artifactId>
            <version>1.1.6</version>
        </dependency>

工具类

package com.example.wxBill;

import cn.hutool.crypto.digest.MD5;
import com.jpay.ext.kit.PaymentKit;
import com.jpay.ext.kit.StrKit;
import com.jpay.util.HttpUtils;
import org.springframework.util.StringUtils;

import java.util.*;

public class WXBillDownUtils {
    public final static String WX_DOWNLOAD_BILL_URL = "https://api.mch.weixin.qq.com/pay/downloadbill";

    /**
     * 需要替换的部分
     */
    public final static String appid = "xxxx";
    public final static String mch_id = "xxxx";
    public final static String appKey = "xxxx";
    public final static String default_characterEncoding = "UTF-8";

    /**
     * 入口测试
     * @param args
     */
    public static void main(String[] args) {
        catchTradeBill("20201103");
    }

    public static void catchTradeBill(String yyyyMMdd) {
        SortedMap<String, String> parameters = new TreeMap<String, String>();//用来放置各个所需要的参数,自己对应寻找填写。
        parameters.put("appid", appid);
        //下载对账单的日期,格式:20140603
        parameters.put("bill_date",
### PHP 实现微信小程序消息推送加密消息解密 为了实现在PHP中对来自微信小程序的消息推送中的加密数据进行解密,可以遵循如下方法。此过程涉及到使用特定的加解密函数来处理由微信服务器传递过来的数据包。 #### 准备工作 确保已经获得了用于解密所需的`session_key`,该键是在用户登录成功后由微信接口返回的一部分信息[^2]。此外,在准备阶段还需要确认已安装必要的扩展库支持DES等加密算法的操作;对于现代环境而言可能需要考虑替代方案因为部分旧版组件如mcrypt已被弃用[^1]。 #### 创建解密类实例 定义一个专门用来执行解码操作的对象: ```php class WXBizMsgCrypt { private $encodingAesKey; public function __construct($encodingAesKey){ $this->encodingAesKey = base64_decode($encodingAesKey . "="); } } ``` #### 执行实际解密逻辑 下面展示了一个简化版本的方法,它接收经过编码的信息作为输入参数并尝试对其进行解密: ```php public function decryptMsg($encryptedData, $iv, $appId){ try{ // 使用openssl_decrypt代替废弃的mcrypt系列函数 $decrypted = openssl_decrypt( base64_decode($encryptedData), 'AES-128-CBC', substr($this->encodingAesKey, 0, 16), OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, base64_decode($iv) ); if ($decrypted === false) throw new Exception('Decryption failed'); // 去除填充字符(PKCS7) $paddingLen = ord(substr($decrypted, -1)); $result = substr($decrypted, 0, -$paddingLen); list($len, $xmlContent, $fromAppId) = explode("\0", $result, 3); if (strlen($xmlContent) != $len || $fromAppId !== $appId){ throw new Exception('Invalid decrypted data'); } return simplexml_load_string($xmlContent,'SimpleXMLElement', LIBXML_NOCDATA); } catch(Exception $e){ echo "Error occurred during decryption: ", $e->getMessage(), "\n"; return null; } } ``` 上述代码片段展示了如何利用OpenSSL库来进行AES CBC模式下的解密操作,并且包含了去除PKCS7填充的过程。注意这里假设传入的应用ID (`$appId`) 和解密后的应用ID相匹配以验证来源合法性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值