409 ошибка конфликта только по Wi-Fi только во время регистрации
Я пытаюсь зарегистрировать пользователя. Но процесс регистрации на мобильных данных работает нормально, но он возвращает ошибку 409 в сети Wi-Fi. Мне неизвестно об этой проблеме. Почтальон также возвращает конфликт 409.
Я получаю этот ответ в приложении для Android:
E/Volley: [88456] BasicNetwork.performRequest: Unexpected response code 409 for https://aayocab.com/api/provider/register/
На начальном этапе проекта все работало нормально. Но это начинает возвращать конфликт сейчас, и я нахожусь в дилемме. Я реализовал следующим образом:
Код Laravel для регистрации:
public function register(Request $request)
{
$this->validate($request, [
'device_id' => 'required',
'device_type' => 'required|in:android,ios',
'device_token' => 'required',
'first_name' => 'required|max:255',
'last_name' => 'required|max:255',
'email' => 'required|email|max:255|unique:providers',
'mobile' => 'required',
'password' => 'required|min:6|confirmed',
]);
try{
$Provider = $request->all();
$Provider['password'] = bcrypt($request->password);
$providerCode = 'p'.mt_rand(100, 999). mt_rand(100, 999);
$Provider['provider_code'] = $providerCode;
$Provider = Provider::create($Provider);
if(Setting::get('demo_mode', 0) == 1) {
$Provider->update(['status' => 'approved']);
ProviderService::create([
'provider_id' => $Provider->id,
'service_type_id' => '1',
'status' => 'active',
'service_number' => '4pp03ets',
'service_model' => 'Audi R8',
]);
}
ProviderDevice::create([
'provider_id' => $Provider->id,
'udid' => $request->device_id,
'token' => $request->device_token,
'type' => $request->device_type,
]);
return $Provider;
} catch (Exception $e) {
return response()->json(['error' => trans('api.something_went_wrong')], 500);
}
}
Я проанализировал данные следующим образом в приложении andorid:
private void registerAPI() {
customDialog = new CustomDialog(context);
customDialog.setCancelable(false);
if (customDialog != null)
customDialog.show();
JSONObject object = new JSONObject();
try {
object.put("device_type", "android");
object.put("device_id", device_UDID);
object.put("device_token", device_token);
object.put("login_by", "manual");
object.put("first_name", first_name.getText().toString());
object.put("last_name", last_name.getText().toString());
object.put("email", email.getText().toString());
object.put("password", password.getText().toString());
object.put("password_confirmation", password.getText().toString());
object.put("mobile", SharedHelper.getKey(RegisterActivity.this, "mobile"));
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, URLHelper.register, object, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if (customDialog != null && customDialog.isShowing())
customDialog.dismiss();
utils.print("SignInResponse", response.toString());
SharedHelper.putKey(RegisterActivity.this, "email", email.getText().toString());
SharedHelper.putKey(RegisterActivity.this, "password", password.getText().toString());
signIn();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (customDialog != null && customDialog.isShowing())
customDialog.dismiss();
String json = null;
String Message;
NetworkResponse response = error.networkResponse;
if (response != null && response.data != null) {
Log.e("Error SignIN","::"+response.data.toString());
Log.e("Error SignIN","::"+response.toString());
utils.print("MyTestError1", "" + response.statusCode);
try {
JSONObject errorObj = new JSONObject(new String(response.data));
utils.print("ErrorInRegisterAPI", "" + errorObj.toString());
if (response.statusCode == 400 || response.statusCode == 405 || response.statusCode == 500) {
try {
displayMessage(errorObj.optString("error"));
} catch (Exception e) {
displayMessage(getString(R.string.something_went_wrong));
}
} else if (response.statusCode == 401) {
try {
if (errorObj.optString("message").equalsIgnoreCase("invalid_token")) {
//Call Refresh token
} else {
displayMessage(errorObj.optString("message"));
}
} catch (Exception e) {
displayMessage(getString(R.string.something_went_wrong));
}
} else if (response.statusCode == 422) {
json = trimMessage(new String(response.data));
if (json != "" && json != null) {
if (json.startsWith("The email has already been taken")) {
displayMessage(getString(R.string.email_exist));
}else{
displayMessage(getString(R.string.something_went_wrong));
}
//displayMessage(json);
} else {
displayMessage(getString(R.string.please_try_again));
}
} else {
displayMessage(getString(R.string.please_try_again));
}
} catch (Exception e) {
displayMessage(getString(R.string.something_went_wrong));
}
} else {
if (error instanceof NoConnectionError) {
displayMessage(getString(R.string.oops_connect_your_internet));
} else if (error instanceof NetworkError) {
displayMessage(getString(R.string.oops_connect_your_internet));
} else if (error instanceof TimeoutError) {
registerAPI();
}
}
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("X-Requested-With", "XMLHttpRequest");
return headers;
}
};
AayoCabApplication.getInstance().addToRequestQueue(jsonObjectRequest);
}
0 ответов
Это была проблема с конечной точкой API. Решилось изменениемapi/provider/register
к api/provider/sth
. Это произошло из-за использования предопределенной переменной в laravel.
Проверьте это решение при использовании залпа
Этот конфликт с ошибкой 409 является ошибкой на стороне клиента, вызванной использованием предопределенной переменной и возникает в некоторых сетях. Решение состоит в том, чтобы переименовать файл php с URL-адресом, например, register.php, в registerAccount.php в вашем appconfig.
Надеюсь, это поможет тебе
409 Конфликт
Указывает, что запрос не может быть обработан из-за конфликта в текущем состоянии целевого ресурса.
Несколько гипотетических примеров:
- Пользователь хочет добавить файл в папку, но папка еще не существует.
- Amazon S3 использует его, когда вы пытаетесь удалить непустую корзину.
- Вы создаете новое сообщение в блоге, но оно относится к категории, которая была удалена.
- Загрузка файла старше того, что уже есть на сервере.
Подробности на https://httpstatuses.com/409