# Ysm-SDK-python

易收米支付Python SDK，提供支付相关API的Python实现。

## 安装依赖

```bash
pip install -r requirements.txt
```

或者手动安装：

```bash
pip install aiohttp fastapi uvicorn jinja2 python-multipart
```

## 文件说明

- `api.py` - 基础API工具类，提供HTTP请求和签名方法
- `pay.py` - 发起支付模块
- `query.py` - 订单查询模块
- `notify.py` - 支付回调处理模块
- `demo.py` - 命令行演示脚本
- `web_demo.py` - Web服务演示
- `requirements.txt` - 依赖包列表

## 使用示例

### 发起支付

```python
from pay import create_payment

# 配置信息
appid = '20********'  # 支付通道ID
appsecret = 'e605ac7******************4af5164'  # AppSecret

# 创建支付
pay_url = create_payment(
    appid=appid,
    appsecret=appsecret,
    order_id="123321123321",
    description="快充数据线",
    amount=100,  # 1元
    notify_url="http://example.com/notify",
    nopay_url="http://example.com/cancel",
    callback_url="http://example.com/success",
    pay_type=1  # 微信内支付
)

print(f"支付链接: {pay_url}")
```

### 查询订单

```python
from query import query_order

# 配置信息
appid = '20********'  # 支付通道ID

# 查询订单
order_info = query_order(
    appid=appid,
    mch_orderid='202305105056',  # 商户订单号
)

print(f"订单信息: {order_info}")
```

### 处理支付回调

```python
from flask import Flask, request
from notify import PaymentNotify

app = Flask(__name__)

@app.route('/notify', methods=['POST'])
def payment_notify():
    # 配置信息
    appid = '20********'  # 支付通道ID
    appsecret = 'e605ac7******************4af5164'  # AppSecret
    
    # 创建通知处理器
    notify_handler = PaymentNotify(appid, appsecret)
    
    # 获取请求数据
    request_data = request.get_data()
    
    # 处理通知
    success, message = notify_handler.process(request_data)
    
    if success:
        # 处理成功
        return message
    else:
        # 处理失败
        return {"error": message}, 400

if __name__ == '__main__':
    app.run(debug=True)
```

## 支付类型说明

- `pay_type=1`: 微信内支付
- `pay_type=2`: 微信扫码支付
- `pay_type=3`: 微信H5支付(非原生)
- `pay_type=11`: 支付宝H5支付

## 演示程序

### 1. 命令行演示

运行完整的SDK功能演示：

```bash
python demo.py
```

这个演示会展示：
- 创建支付订单
- 查询订单状态
- 处理支付回调
- 不同支付类型说明

### 2. Web服务演示

启动Web演示服务：

```bash
python web_demo.py
```

然后访问 `http://localhost:8000` 查看：
- 支付表单页面
- 订单查询界面
- 支付成功/取消页面
- 支付回调处理接口

### 配置说明

在使用前请修改以下配置：

1. 在 `demo.py` 中修改：
   ```python
   self.appid = 'your_appid'  # 替换为你的AppID
   self.appsecret = 'your_appsecret'  # 替换为你的AppSecret
   ```

2. 在 `web_demo.py` 中修改：
   ```python
   APPID = 'your_appid'
   APPSECRET = 'your_appsecret'
   NOTIFY_URL = "http://your-domain.com/notify"  # 替换为你的回调地址
   ``` 