问题描述
我在Yii2上有一个应用程序。
我有一个要重定向的外部供应商。例如,我正在加密当前的用户信息,并希望将其发送给外部供应商,因此用户信息会自动填充到他的网站上。
如果我使用JS在前端进行所有操作,一切都很好。
我遇到的问题是只有我的应用服务器被列入供应商白名单。所以我需要使重定向发生在后端。
我尝试了几种方法,甚至使用了Guzzle HTTP,它也不会重定向。
请注意,我不是在寻找简单的重定向,它是外部URL上的表单。
我浏览了这篇文章,但问题仍然相同... Yii2 how to send form request to external url
有人遇到这个问题吗?
解决方法
如果我对您的理解正确,那么您希望将从前端接收的数据发布到第三方公司的服务器(我们称它们为ACME)。您的网络服务器已被ACME列入白名单,但您的客户却没有(这很好)。您想在POST之后显示服务器上的页面而不是ACME服务器上的页面,对吗?
您必须将带有单独请求的数据从服务器发送到ACME服务器。您无法创建HTML <form>
并将ACME服务器置于其action
参数中,因为该请求将从客户端而不是您的后端发送,从而失败,进入白名单。验证客户输入后,您可以将其发送到ACME。
使用状态码,您可以决定请求是否成功。您可以详细了解here
下面的代码示例显示如何将$payload
(如果可能的话,是一个虚构的博客文章)作为JSON发布到ACME服务器,并输出包含请求结果的行。
$payload = [
'username' => 'john.doe','postContent' => 'Hello world',];
$client = new GuzzleHttp\Client();
$response = $client->post('https://acme.example.org/endpoint',['http_errors' => false,'json' => $payload]);
if($response->getStatusCode() === 200){
echo "Request OK";
}else{
echo "Request failed with status ".$response->getStatusCode();
}