Я хочу сравнить номера otp, которые я набираю в текстовом поле, и sms otp, отправленные на номер через контроллер вызова API в laravel.
я использую laravel5.6 и php 7.2.3
public function otpverify(Request $req)
{
$otpenter=$req->txtotp;
if ($otpenter==$otp)
{
return redirect()->action('JaincountController@create')
}
else
{
return view('jaincount_user/verification');
}
}
public function makeRequest(Request $req)
{
$client = new Client();
$otp=rand(10000,4);
// $data=
$data = array('adhar'=>$req->txtadharnumber,'drp'=>$req->drpcode,'mobilenumber'=>$req->txtnumber);
$response = $client->request('POST','http://192.168.1.9/jaincountapi/public/api/otpsms',[
'form_params'=>[
'adharcardnumber'=>$req->txtadharnumber,
'mobilecode'=>$req->drpcode,
'mobilenumber'=>$req->txtnumber,
'otp'=>$otp
]
]);
$response = $response->getBody();
return json_decode($response,true);
}
я хочу сравнить номер otp текстового поля и номер sms otp, отправленный через API-вызов и перенаправление с другим контроллером в laravel5.6
otp проходит смс, но otp не сравнивается и как сравнить, что отправляет otp с номером otp текстового поля
Вы можете прочитать сообщение об отказе?
значит отп не приходит в ответ но читается в мобильных смс
Вы фиксируете значение параметра на сервере внутри любой базы данных?
нет otp, который не хранится ни в какой внутренней базе данных, он генерируется через rand(), а в вызове API сохраняется только одна переменная
Мне просто интересно, как вы собираетесь сравнивать значения, тогда имеют ли эти обе переменные значения? $otpenter
==$otp
в значении $otpenter происходит из текстового поля и $otp в той переменной, которая отправляется в API, поэтому я не понимаю, как я сравниваю и перенаправляю другой контроллер.
Вы должны хранить/сохранять значение где-то еще, когда вы генерируете с помощью rand()
перед отправкой в API, поэтому, когда пользователь вводит opt в текстовое поле, вы можете просто получить значение оттуда и сравнить с ним.
Если я сохраню это значение в одной переменной и передам его в SMS и все, что тогда делать?
Если вы сохраните значение в $variable.... оно будет недоступно в следующем запросе. Он доступен только для этого сеанса... когда в следующий раз вы получите запрос на проверку значения... он будет пустым.
Для этого я сохраняю эту переменную в другой переменной сеанса, а затем эту переменную передаю в другой контроллер.
Дело в том, что вы должны хранить свой otp в базе данных или в переменной сеанса.
(Документация: https://laravel.com/docs/5.8/красноречивый) Вы можете хранить otp в базе данных, например
public function makeRequest(Request $req)
{
$client = new Client();
$otp=rand(10000,4);
// $data=
$data = array('adhar'=>$req->txtadharnumber,'drp'=>$req->drpcode,'mobilenumber'=>$req->txtnumber);
//CHANGES
User::where('phone_number',$req->txtnumber)->update(['otp'=>$otp]);
$response = $client->request('POST','http://192.168.1.9/jaincountapi/public/api/otpsms',[
'form_params'=>[
'adharcardnumber'=>$req->txtadharnumber,
'mobilecode'=>$req->drpcode,
'mobilenumber'=>$req->txtnumber,
'otp'=>$otp
]
]);
$response = $response->getBody();
return json_decode($response,true);
}
вы можете получить его, используя красноречие в Laravel, используя
public function otpverify(Request $req)
{
$otpenter=$req->txtotp;
//CHANGES
$otp = User::where('phone_number', $phone_number)->first()->otp;
if ($otpenter==$otp)
{
return redirect()->action('JaincountController@create')
}
else
{
return view('jaincount_user/verification');
}
}
после ввода правильного otp очистите его в базе данных.
Или вы можете использовать сеанс. Вы можете использовать сеанс двумя способами.
1.php сеанс по умолчанию 2. Сессия Laravel
давайте посмотрим сеанс php по умолчанию (документация: https://www.php.net/manual/en/book.session.php)
public function makeRequest(Request $req)
{
$client = new Client();
$otp=rand(10000,4);
// $data=
$data = array('adhar'=>$req->txtadharnumber,'drp'=>$req->drpcode,'mobilenumber'=>$req->txtnumber);
//CHANGES
session_start();
$_SESSION['otp'] = $otp
$response = $client->request('POST','http://192.168.1.9/jaincountapi/public/api/otpsms',[
'form_params'=>[
'adharcardnumber'=>$req->txtadharnumber,
'mobilecode'=>$req->drpcode,
'mobilenumber'=>$req->txtnumber,
'otp'=>$otp
]
]);
$response = $response->getBody();
return json_decode($response,true);
}
вы можете получить его по
public function otpverify(Request $req)
{
$otpenter=$req->txtotp;
//CHANGES
session_start();
$otp = $_SESSION['otp']
if ($otpenter==$otp)
{
return redirect()->action('JaincountController@create')
}
else
{
return view('jaincount_user/verification');
}
}
давайте использовать сессию laravel (документация: https://laravel.com/docs/5.2/сессия)
//important
use Illuminate\Support\Facades\Session;
public function makeRequest(Request $req)
{
$client = new Client();
$otp=rand(10000,4);
// $data=
$data = array('adhar'=>$req->txtadharnumber,'drp'=>$req->drpcode,'mobilenumber'=>$req->txtnumber);
//CHANGES
Session::put('otp',$otp)
$response = $client->request('POST','http://192.168.1.9/jaincountapi/public/api/otpsms',[
'form_params'=>[
'adharcardnumber'=>$req->txtadharnumber,
'mobilecode'=>$req->drpcode,
'mobilenumber'=>$req->txtnumber,
'otp'=>$otp
]
]);
$response = $response->getBody();
return json_decode($response,true);
}
вы можете получить его по
//important
use Illuminate\Support\Facades\Session;
public function otpverify(Request $req)
{
$otpenter=$req->txtotp;
//CHANGES
$otp = Session::get('otp') //best way to use is flash. see the full documentation
if ($otpenter==$otp)
{
return redirect()->action('JaincountController@create')
}
else
{
return view('jaincount_user/verification');
}
}
Какая часть здесь не работает? Какова точная проблема?