Ballly
@Ballly

Почему не отправляется POST запрос через Postman?

Всем здравствуйте! Пишу сайт на yii2, для тестирования запросов решил воспользоваться программой Postman, пример отправки запроса на картинке. Данные отправляю методом POST в json формате и получаю ошибку, та что приведена ниже. В ошибке говориться, что передаваемые значения не могут быть null, но я ведь значения передаю. Подскажите пожалуйста, в чем моя ошибка при составлении запроса?
650c55d20bdc5651266576.png
Правила валидации в yii и action
public function rules()
{
    return [
        [['ticket_id', 'payment_type', 'payment_id', 'amount', 'rrn'], 'required'],
        [['ticket_id', 'payment_id'], 'default', 'value' => null],
        [['ticket_id', 'payment_id'], 'integer'],
        [['payment_type', 'rrn'], 'string'],
        [['amount'], 'number'],
        [['date'], 'safe'],
    ];
}

public function actionRent()
{
    $model = new Park();
    $model->load(Yii::$app->request->post());
    
    if ($model->validate() && $model->save()) {
        return [
            'ticket_id' => $model['ticket_id'],
            'payment_type' => $model['payment_type'],
            'amount' => $model['amount'],
            'rrn' => $model['rrn'],
            'payment_id' => $model['payment_id'],
        ];
    }else{
        $errors = $model->getErrorSummary(true);
        throw new Exception(implode('; ', $errors), 400);
    }
}

Ошибка:
{
    "name": "Exception",
    "message": "Ticket ID cannot be blank.; Payment Type cannot be blank.; Payment ID cannot be blank.; Amount cannot be blank.; Rrn cannot be blank.",
    "code": 400,
    "type": "yii\\base\\Exception",
    "file": "C:\\OSPanel\\domains\\site.loc\\modules\\api\\controllers\\SiteController.php",
    "line": 51,
    "stack-trace": [
        "#0 [internal function]: app\\modules\\api\\controllers\\SiteController->actionRent()",
        "#1 C:\\OSPanel\\domains\\site.loc\\vendor\\yiisoft\\yii2\\base\\InlineAction.php(57): call_user_func_array()",
        "#2 C:\\OSPanel\\domains\\site.loc\\vendor\\yiisoft\\yii2\\base\\Controller.php(178): yii\\base\\InlineAction->runWithParams()",
        "#3 C:\\OSPanel\\domains\\site.loc\\vendor\\yiisoft\\yii2\\base\\Module.php(552): yii\\base\\Controller->runAction()",
        "#4 C:\\OSPanel\\domains\\site.loc\\vendor\\yiisoft\\yii2\\web\\Application.php(103): yii\\base\\Module->runAction()",
        "#5 C:\\OSPanel\\domains\\site.loc\\vendor\\yiisoft\\yii2\\base\\Application.php(384): yii\\web\\Application->handleRequest()",
        "#6 C:\\OSPanel\\domains\\site.loc\\web\\index.php(13): yii\\base\\Application->run()",
        "#7 {main}"
    ]
}

cURL запрос из Postman выглядит так:
curl -X POST \
  http://site.loc/api/rent \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -H 'postman-token: 185ebe40-05e1-e70e-3f03-32f61ab822a0' \
  -d '{
	"ticket_id":"12345",
	"payment_type":"qr",
	"amount":"300.00",
	"rrn":"text123",
	"payment_id":"54321"
}'
  • Вопрос задан
  • 568 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Yii::$app->request->post() получает данные из $_POST, который ничего не знает про JSON и обрабатывает только стандартные формы HTML.
Вам необходимо определить парсер для appliation/json и использовать методы getBodParam/getBodyParams.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы