#!/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×tamp=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. 根据错误信息进行相应修复 """)