ai_v/check_alipay_config.py

163 lines
5.5 KiB
Python
Raw Normal View History

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
支付宝配置检查脚本
用于检查支付宝配置是否正确不依赖虚拟环境
"""
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
def check_alipay_config():
"""检查支付宝配置"""
print("="*60)
print("支付宝配置检查")
print("="*60)
# 读取配置文件内容
config_path = os.path.join(os.path.dirname(__file__), 'config.py')
if not os.path.exists(config_path):
print("错误: config.py 文件不存在")
return False
with open(config_path, 'r', encoding='utf-8') as f:
config_content = f.read()
# 检查支付宝相关配置
required_configs = [
'ALIPAY_APP_ID',
'ALIPAY_APP_PRIVATE_KEY',
'ALIPAY_PUBLIC_KEY',
'ALIPAY_RETURN_URL',
'ALIPAY_NOTIFY_URL',
'ALIPAY_DEBUG'
]
print("检查必需的配置项:")
for config in required_configs:
if config in config_content:
print(f"{config}: 存在")
else:
print(f"{config}: 缺失")
# 提取并显示配置值(部分显示以保护安全)
import re
# 检查密钥格式
private_key_match = re.search(r'ALIPAY_APP_PRIVATE_KEY\s*=\s*"""(.*?)"""', config_content, re.DOTALL)
public_key_match = re.search(r'ALIPAY_PUBLIC_KEY\s*=\s*"""(.*?)"""', config_content, re.DOTALL)
if private_key_match:
private_key = private_key_match.group(1)
if "BEGIN RSA PRIVATE KEY" in private_key and "END RSA PRIVATE KEY" in private_key:
print(" ✓ 应用私钥格式正确")
else:
print(" ✗ 应用私钥格式错误")
else:
print(" ✗ 未找到应用私钥")
if public_key_match:
public_key = public_key_match.group(1)
if "BEGIN PUBLIC KEY" in public_key and "END PUBLIC KEY" in public_key:
print(" ✓ 支付宝公钥格式正确")
else:
print(" ✗ 支付宝公钥格式错误")
else:
print(" ✗ 未找到支付宝公钥")
# 检查调试模式
debug_match = re.search(r'ALIPAY_DEBUG\s*=\s*(True|False)', config_content)
if debug_match:
debug_mode = debug_match.group(1)
print(f" ✓ 调试模式: {debug_mode}")
if debug_mode == "False":
print(" 注意: 当前为正式环境模式,确保使用正式环境的密钥")
else:
print(" 提示: 当前为沙箱环境模式,适用于测试")
print("\n" + "="*60)
print("常见问题排查")
print("="*60)
print("""
1. 密钥配置问题:
- 确保应用私钥和支付宝公钥格式正确
- 检查BEGIN/END标签是否完整
- 确认沙箱/正式环境配置一致
2. 回调地址问题:
- 确保ALIPAY_RETURN_URL和ALIPAY_NOTIFY_URL可以公网访问
- 检查URL是否拼写正确
3. 签名算法:
- SDK默认使用RSA2算法
- 确保支付宝开放平台应用设置中也是RSA2
4. 对于同步回调400错误:
- 主要是签名验证失败
- 需要正确处理sign和sign_type参数
- 确保使用正确的公钥验证
5. 环境问题:
- 如果使用沙箱环境确保使用沙箱的AppID和密钥
- 确保服务器时间准确
""")
return True
def analyze_callback_request():
"""分析提供的回调请求"""
print("\n" + "="*60)
print("回调请求分析")
print("="*60)
sample_request = "GET /payment/return?charset=utf-8&out_trade_no=20260114192935cfcf96&method=alipay.trade.page.pay.return&total_amount=5.00&sign=ksH8Nov1SA9U4fgovUXv%2BXxmZccCDaqVhPmm%2BAPlGL8QgMYWDN7NSqDQTDoVshe2agHT11rNuVEXuApE3lVOnBPPbUvUlyMdaWpx/0GlFBRS0tezfdUcCQsShOTj4YdKwa2K0bfoqQeStupG0LFVipsWiga9WIryFU5JWDK3lDOuaVLiw2gLFMemsz/Xg14UPQMWcmlyXVGYzeLYvNmVRbQQjnJL8m%2BFOq5tqMgopEtZmAC4wstIwm7n1kOrV%2Bs/HBxMeQqWOTtFEbDkzbU8o%2BhS5%2BavQm5BUvFTmjbsVs6Npo5qmmTkI8dRvqRO1HzqSv6ymL8%2BpiguKEBmaFaBeg%3D%3D&trade_no=2026011422001420011429097835&auth_app_id=2021006126656681&version=1.0&app_id=2021006126656681&sign_type=RSA2&seller_id=2088802857784696&timestamp=2026-01-14+19:30:21"
print("从您提供的请求中,我们可以看到:")
print("- 订单号: 20260114192935cfcf96")
print("- 支付金额: 5.00")
print("- 支付宝交易号: 2026011422001420011429097835")
print("- 签名类型: RSA2")
print("- 时间戳: 2026-01-14 19:30:21")
print("\n这些参数应该被正确传递给验证函数")
print("\n" + "="*60)
print("解决方案")
print("="*60)
print("""
1. 确保签名验证时:
- 从参数中移除 'sign' 'sign_type' 字段
- 使用剩余参数进行签名验证
- 使用正确的支付宝公钥
2. 检查配置:
- 确认使用的AppID与请求中的app_id一致
- 确认密钥对正确配对
3. 日志查看:
- 运行应用后进行一次支付测试
- 查看 logs/system.log 中的详细错误信息
- 检查具体的验证失败原因
4. 沙箱测试:
- 如果使用沙箱环境请确保配置正确
- 使用沙箱提供的测试账号进行支付
""")
if __name__ == "__main__":
print("支付宝配置检查工具\n")
check_alipay_config()
analyze_callback_request()
print("\n" + "="*60)
print("下一步操作建议")
print("="*60)
print("""
1. 运行应用: python app.py
2. 进行支付测试
3. 检查日志文件 logs/system.log
4. 查看具体的错误信息
5. 根据错误信息进行相应修复
""")