如何解决Laravel Omnipay/Stripe 无法在 linux 上发送请求
目前我已经将 omnipay/stripe 集成到我的 Laravel 项目中,在我的本地没问题,但是当我在服务器上测试时它返回 "Invalid request: unsupported Content-Type 。如果错误仍然存在并且你需要帮助,请联系 support@stripe.com。”尝试发送请求时,请帮助。
$response = $gateway->purchase([
'amount' => $amount,'currency' => $currency,'token' => $token,'confirm' => true,'description' => auth()->user()->name
])->send();
解决方法
错误 Content-Type .
的确切文本表明请求具有空 Content-Type
标头(该值包含在句点之前)。虽然我无法解释为什么会发生这种情况,但有什么东西干扰了请求。
您可以尝试从您的服务器进行基本的 curl
调用(如下所示),以帮助确定这是网络级干扰还是应用程序堆栈中的干扰。
curl --request POST \
--url 'https://api.stripe.com/v1/customers' \
-u sk_test_123: \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data 'description=test cust'
您可以尝试使用和不使用显式标头,看看这是否有所不同。
,我终于找到了一个解决方法,我会在这里发布以备将来参考。 我咨询了 Stripe 的技术支持,他们的回答给了我一个想法。
Stripe 支持人员发现的原因/问题: 发送的请求带有一个空的 Content-Type 标头。
我已经浏览了库并尝试调试正在发送的请求标头,但实际上在日志中发现它只是默认的“授权”标头,不知道如何添加内容类型在,因此根据他们的回应,我在 'Content-Type' => 'application/x-www-form-urlencoded'
处将 omnipay/stripe/src/Message/AbstractRequest.php
添加到 sendData($data)
。当然你也可以用比我更结构化的方式来放置它。
令人惊讶的是它有效!
他们还建议了一种您可以尝试的方式,但我没有。
$request = $gateway->purchase([
'headers' => ['Content-Type' => 'application/x-www-form-urlencoded'],'amount' => $amount,'currency' => $currency,'token' => $token,'confirm' => true,'description' => auth()->user()->name
])->send();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。