【问题标题】:Laravel Omnipay/Stripe unable to send request on linuxLaravel Omnipay/Stripe 无法在 linux 上发送请求
【发布时间】:2021-05-20 07:50:06
【问题描述】:

目前我已经将omnipay/stripe集成到我的laravel项目中,在我的本地还可以,但是当我在服务器上测试它时它返回“无效请求:不支持的内容类型。如果错误仍然存​​在并且你需要帮助,请联系 support@stripe.com。” 尝试发送请求时,请提供帮助。

$response = $gateway->purchase([
'amount' => $amount,
'currency' => $currency,
'token' => $token,
'confirm' => true,
'description' => auth()->user()->name
])->send();

【问题讨论】:

  • 嗨@Arjunbhati,感谢您的回复,但如果是这样的话,那么我也应该在本地也遇到错误吗?我是 laravel 的新手,所以没有太多想法,或者它有一些方法可以在本地而不是omnipay 的库上进行更改?对不起我的英语不好

标签: laravel stripe-payments omnipay


【解决方案1】:

错误Content-Type . 的确切文本表明请求具有empty 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'

您可以尝试使用或不使用显式标头,看看这是否会有所不同。

【讨论】:

  • 嗨@Nolan 我在我的服务器上尝试使用 curl 似乎可以发送请求,所以可能是应用层干扰了请求?
  • 是的,似乎是这样。这发生在 所有 请求还是子集?您是否试图以任何方式覆盖任何标题?
  • 在我的应用程序中我只集成了购买功能,所以我不确定这是否都是请求,你知道有什么方法可以覆盖 Omnipay 中的标题吗?他们似乎没有这个选择......
【解决方案2】:

最后我找到了一个解决方法,我会在这里发布,以备将来参考。 我咨询了 Stripe 的技术支持,他们的回复给了我一个想法。

Stripe 支持发现的原因/问题: 发送的请求带有一个空的 Content-Type 标头。

我已经浏览了库并尝试调试发送的请求标头,但实际上在日志中发现它只是默认的“授权”标头,不知道如何添加 Content-Type在,所以根据他们的回应,我在sendData($data) 添加了'Content-Type' => 'application/x-www-form-urlencoded'omnipay/stripe/src/Message/AbstractRequest.php。当然你也可以把它放在比我做的更有条理的地方。

令人惊讶的是它的工作原理!

他们还建议了一种你也可以尝试的方法,但我没有。

$request = $gateway->purchase([
'headers' => ['Content-Type' => 'application/x-www-form-urlencoded'],
'amount' => $amount,
'currency' => $currency,
'token' => $token,
'confirm' => true,
'description' => auth()->user()->name
])->send();

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 2019-03-18
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多