Ubuntu环境下Stripe支付功能故障排查与修复请求
解决Stripe POS系统Ubuntu部署后的HTTPS相关问题
核心问题
你遇到的两个报错本质是同一个原因:Stripe要求所有集成Stripe.js的页面必须通过HTTPS访问。Windows开发环境可能因为Stripe对本地HTTP的豁免规则(比如localhost)或者你用了开发工具的特殊配置,所以功能正常;但Ubuntu测试环境是正式服务器部署,HTTP环境下Stripe会直接阻断功能,同时触发跨域头的错误。
具体修改步骤
1. 给Ubuntu服务器配置HTTPS证书
最便捷的方式用Let's Encrypt的免费证书:
- 安装Certbot(以Nginx为例,Apache换对应插件):
sudo apt update && sudo apt install certbot python3-certbot-nginx - 生成并配置证书,替换成你的域名:
Certbot会自动修改Nginx配置,把所有HTTP请求重定向到HTTPS。sudo certbot --nginx -d your-pos-domain.com
2. 修正前端Stripe脚本加载
确保HTML里加载Stripe.js的地址是HTTPS的,别用HTTP:
<!-- 替换原来的HTTP脚本地址 --> <script src="https://js.stripe.com/v3/"></script>
同时检查后端Checkout View里返回的Stripe公钥是否对应环境(测试用测试公钥,生产用生产公钥),别硬编码HTTP相关的配置。
3. 修复跨域头配置
启用HTTPS后,给服务器加上正确的跨域头,避免浏览器忽略COOP规则:
在Nginx的server配置块里添加:
add_header Cross-Origin-Opener-Policy "same-origin"; add_header Cross-Origin-Embedder-Policy "require-corp";
然后重启Nginx生效:
sudo systemctl restart nginx
4. 本地Ubuntu测试的临时方案(无公网域名)
如果只是本地测试,没有正式域名,可以生成自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
然后在Web服务器里配置使用这个证书,访问时在浏览器里手动信任该证书的安全例外,就能让Stripe正常工作。
验证效果
改完后用HTTPS地址访问你的POS系统:
- 测试现金支付,确认找零金额正常显示;
- 测试信用卡支付,确认卡号、有效期等输入框正常加载;
- 打开浏览器控制台,确认不再出现HTTPS相关的错误。
内容的提问来源于stack exchange,提问作者Mohamed Abdillah
相关产品推荐
相关产品推荐

