Я хотел протестировать функцию Api, но метод Post отправляет null в качестве аргументов. Вот мой код
public function testPOST() {
require 'vendor/autoload.php';
// create our http client (Guzzle)
$client = new \GuzzleHttp\Client();
$data = array("MobileNumber" => "923024175176", "Type" => "mobile no validation");
$url = 'http://192.168.8.101/ren-money/index.php/OTP/generateOTPbyType';
$response = $client -> post($url, $data);
echo $response -> getBody();
$this -> assertEquals(1, (int)$result["StatusCode"]);
}
Я хочу получить доступ к Коду состояния, отправляемому клиенту с помощью функции, но вместо этого я получаю {«Ошибка»: «Слишком мало или неправильные аргументы»}. Это показывает, что функция Api отправляет это мне из-за нулевых параметров. Вот функция Api
public function generateOTPbyType_post() {
//getting number from post
$Number = $this -> post("MobileNumber");
//getting type from post
$Type = strtolower($this -> post("Type"));
//Generating 6 digit Random number
$Pin = random_string('numeric', 6);
//checking weather all/requied parametters are provided correctly
if ($Number === NULL || $Type === NULL) {
$this -> response(array("StatusCode" => "2", "Description" => "Too few or wrong Arguments"));
//return 2;
}
//infoBip SDK code for sending pin to user
$Client = new infobip\api\client\SendSingleTextualSms(new infobip\api\configuration\BasicAuthConfiguration("husnainMalik", "BlueRose"));
$RequestBody = new infobip\api\model\sms\mt\send\textual\SMSTextualRequest();
$RequestBody -> setFrom("InfoSMS");
$RequestBody -> setTo($Number);
//checking type
if ($Type === 'mobile no validation' || $Type === 'goods delivery' || $Type === 'goods receipt') {
$DbObj = array("number" => $Number, "key" => $Pin, "time" => (int)time(), "status" => "0", "type" => strtolower($Type));
//checking DB error and saving into DB
if ($this -> OTP_Model -> saveOTP($DbObj) === FALSE) {
$this -> response(array("StatusCode" => "2", "Description" => "Internal Db Error"));
//return 2;
}
//infoBip SDK setting parametters
$RequestBody -> setText("Your " . strtolower($Type) . " code: " . $Pin);
$Response = json_decode(json_encode($Client -> execute($RequestBody)));
$GrpName = $Response -> messages[0] -> status -> groupName;
$Discription = $Response -> messages[0] -> status -> description;
//InfoBip error handling
if ("REJECTED" === $GrpName) {
$this -> response(array("StatusCode" => "2", "Description" => $Discription));
//return 2;
} else {
$this -> response(array("StatusCode" => "1", "Description" => $Discription));
//return 1;
}
} else {
$this -> response(array("StatusCode" => "2", "Description" => "Invalid Type"));
//return 2;
}
}
Пожалуйста, посмотрите, все
В testPOST()
вы пытаетесь получить доступ к $result
переменная, которая не определена в вашем коде. Вы должны расшифровать тело ответа. Если сервер использует JSON, вы можете попробовать это:
$response = $client->post($url, $data);
$result = json_decode($response->getBody());
$this->assertEquals(1, intval($result["StatusCode"]));
Было бы интересно увидеть код response()
метод.
Других решений пока нет …