我在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"}
)被添加到响应的初始值?
1条答案
按热度按时间oknrviil1#
问题是由
sendSms
函数中的curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
行引起的。当您将CURLOPT_RETURNTRANSFER
设置为false
时,curl_exec
函数直接输出响应,而不是将其作为字符串返回。这将导致来自SMS API的响应直接发送到输出,然后将您的自定义响应附加到该响应。要解决此问题,请将
CURLOPT_RETURNTRANSFER
选项更改为true
:这将使
curl_exec
以字符串的形式返回响应,然后您可以将其存储在$response
变量中。由于在main函数中没有使用$response
变量,因此可以从sendSms
函数中删除return $response;
行。现在,当您调用
sendSms
函数时,它不会直接输出SMS API响应,您应该只能在输出中看到您的自定义响应。