php Laravel返回两个meged响应

5cnsuln7  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(117)

我在laravel projrct中有一个函数,它使用另一个函数来发送otp sms,但是当我运行第二个函数时,在返回响应后,laravel返回一个合并的响应:第一个是第二个函数的响应,另一个是我的自定义响应,我的代码在这里:

$otp=rand(12345,99999);
            
             VerificationCode::create([
                'mobile'=>$mobile,
                'otp'=>$otp,
                'expire_at'=>Carbon::now()->addMinutes(10)

            ]);
            $this->sendSms($otp,$mobile);
            return response([
        'result'=>'verificationCode has sent',
        'message'=>'ok',
        'status'=>'200'
    ]);

第二个功能是:

public function sendSms($otp,$mobile){    
$post_data = http_build_query($data);
        $handle = curl_init('https://example.com/api/SendSMS/BaseServiceNumber');
        curl_setopt($handle, CURLOPT_HTTPHEADER, array(
            'content-type' => 'application/x-www-form-urlencoded'
        ));
        // curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($handle, CURLOPT_POST, true);
        curl_setopt($handle, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
       $response= curl_exec($handle);
        curl_close($handle);
        return $response;
}

返回的响应是:

{"Value":"5589489218988866748","RetStatus":1,"StrRetStatus":"Ok"}{"result":null,"message":"ok","status":"200"}

为什么这个部分({"Value":"558948925522554445","RetStatus":1,"StrRetStatus":"Ok"})被添加到响应的初始值?

oknrviil

oknrviil1#

问题是由sendSms函数中的curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);行引起的。当您将CURLOPT_RETURNTRANSFER设置为false时,curl_exec函数直接输出响应,而不是将其作为字符串返回。这将导致来自SMS API的响应直接发送到输出,然后将您的自定义响应附加到该响应。
要解决此问题,请将CURLOPT_RETURNTRANSFER选项更改为true

curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);

这将使curl_exec以字符串的形式返回响应,然后您可以将其存储在$response变量中。由于在main函数中没有使用$response变量,因此可以从sendSms函数中删除return $response;行。

$post_data = http_build_query($data);
$handle = curl_init('https://example.com/api/SendSMS/BaseServiceNumber');
curl_setopt($handle, CURLOPT_HTTPHEADER, array(
    'content-type' => 'application/x-www-form-urlencoded'
));
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); // Change this line
$response = curl_exec($handle);
curl_close($handle);
// Remove the return statement

现在,当您调用sendSms函数时,它不会直接输出SMS API响应,您应该只能在输出中看到您的自定义响应。

相关问题