XAMPP+Windows10调用Stripe API遇网络错误(errno26)求助
排查Windows 10 + XAMPP环境下Stripe网络错误(errno 26)的方案
针对你遇到的Stripe通信错误(网络错误[errno 26]),结合Windows 10和XAMPP的环境特性,咱们可以从以下几个方向逐步排查:
1. 检查PHP cURL的CA证书配置
Stripe的API要求严格的SSL证书验证,而Windows下的XAMPP默认可能未正确配置CA证书路径,这是引发这类网络错误的常见原因:
- 打开XAMPP控制面板,点击
Config->PHP (php.ini),找到curl.cainfo配置项 - 确保该项指向有效的CA证书文件,比如:
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem" - 如果没有
cacert.pem文件,下载最新的CA证书包(可从Mozilla官方获取),放到xampp/php/extras/ssl/目录下 - 同时确认
extension=curl没有被注释(前面没有;),保存php.ini后重启XAMPP的Apache服务
2. 验证图片文件路径与权限
你代码中使用相对路径../images/3.jpg,如果路径错误或PHP没有读取权限,fopen失败会间接导致Stripe请求出错:
- 先确认图片文件确实存在于对应路径:比如你的PHP脚本在
htdocs/payment/,那么../images/就是htdocs/images/,检查这个位置是否有3.jpg - 可以在代码中添加文件存在性检查:
$imagePath = '../images/3.jpg'; if (!file_exists($imagePath) || !is_readable($imagePath)) { die("错误:无法读取图片文件,请检查路径或文件权限"); } $fileHandle = fopen($imagePath, 'r');
3. 更新Stripe PHP库到最新版本
旧版本的Stripe库可能对TLS 1.2的支持不完善,建议升级到最新版:
- 如果用Composer管理依赖,在项目根目录执行:
composer update stripe/stripe-php - 如果是手动下载的库,替换为Stripe官方提供的最新版本,确保库文件没有损坏
4. 排查Windows防火墙与代理设置
Windows系统的防火墙或代理可能阻止了XAMPP进程访问Stripe API:
- 临时关闭Windows Defender防火墙测试,如果错误消失,说明需要在防火墙中添加允许
httpd.exe(XAMPP Apache)和php.exe访问网络的规则 - 如果你使用代理服务器,需要在PHP中配置代理:
\Stripe\Stripe::setApiKey('你的Secret Key'); // 添加代理配置 \Stripe\Stripe::setHttpClient(new \Stripe\HttpClient\CurlClient([ 'proxy' => 'http://你的代理地址:端口', ]));
5. 测试基础网络连通性
先排除系统级的网络问题:
- 打开XAMPP的Shell工具,执行:
如果curl命令返回SSL错误或无法连接,说明是系统网络配置问题,而非代码问题curl https://api.stripe.com/v1/charges - 也可以用PHP脚本测试cURL连通性:
这个脚本能帮你快速定位是cURL本身的问题还是Stripe库的问题$ch = curl_init("https://api.stripe.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $errorMsg = curl_error($ch); curl_close($ch); echo "响应内容:" . $response . "<br>"; echo "cURL错误:" . $errorMsg;
6. 确认Stripe账户与密钥正确性
最后再核对基础配置:
- 确保使用的是Secret Key(而非Publishable Key),并且密钥对应环境(测试/生产)正确
- 检查
stripe_account参数中的acct_xxx是正确的关联账户ID,没有拼写错误 - 确认你的Stripe账户处于激活状态,没有被限制访问API
内容的提问来源于stack exchange,提问作者Saurabh Yadav




