#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
import hashlib
import aiohttp

class YsmPayApi:
    """易收米支付API工具类"""
    
    @staticmethod
    async def http_post(url, data):
        """
        发送异步HTTP POST请求
        
        Args:
            url: 请求地址
            data: 请求数据（JSON字符串）
        
        Returns:
            str: 响应内容
        """
        headers = {
            'Content-Type': 'application/json; charset=UTF-8',
            'Accept': 'application/json',
            'User-Agent': '*/*',
            'Authorization': 'WECHATPAY2-SHA256-RSA2048 '
        }
        
        try:
            async with aiohttp.ClientSession() as session:
                async with session.post(url, data=data, headers=headers, ssl=False, timeout=30) as response:
                    return await response.text()
        except Exception as e:
            print(f"Error: {str(e)}")
            return None
    
    @staticmethod
    def hash_sign(data, secret):
        """
        生成签名
        
        Args:
            data: 要签名的数据字典
            secret: 密钥
        
        Returns:
            str: 签名字符串
        """
        # 按键名升序排序
        sorted_data = dict(sorted(data.items()))
        
        # 构造签名字符串
        sign_str = ""
        for key, value in sorted_data.items():
            # 跳过hash字段和空值
            if key == 'hash' or value is None or value == '':
                continue
            
            # 添加分隔符
            if sign_str:
                sign_str += '&'
            
            # 拼接键值对
            sign_str += f"{key}={value}"
        
        # 添加密钥并计算SHA256哈希
        sign_str += secret
        return hashlib.sha256(sign_str.encode('utf-8')).hexdigest() 