Laravel проверяет поле с помощью внешнего запроса SOAP

#php #laravel #soap

#php #laravel #soap

Вопрос:

Я создал функцию soapRequest() в моем AuthController.php использование файла .wsdl с веб-сайта для проверки наличия номера НДС:

 public function soapRequest(Request $request) {

    $countryCode = $request->countryCode;
    $vatNo = $request->vat_number;

    $client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");

    $result = $client->checkVat(['countryCode' => $countryCode, 'vatNumber' => $vatNo]);

    $result = ($result->valid == true) ? "VAT number OK" : "VAT number INVALID";


    return response()->json(['msg' => $result], 200);

}
  

и, на мой взгляд, я просто пишу число и вижу, является ли это число действительным или нет:

 <div class="row form-group">
    <div class="col-md-3 col-xs-3">
        {!! Form::select('countryCode', [
                            ''  => '--Land auswählen',
                            'AT' => 'AT-Austria',
                            'BE' => 'BE-Belgium',
                            'BG' => 'BG-Bulgaria',
                            'CY' => 'CY-Cyprus',
                            'CZ' => 'CZ-Czech Republic',
                            'DE' => 'DE-Germany',
                            'DK' => 'DK-Denmark',
                            'EE' => 'EE-Estonia',
                            'EL' => 'EL-Greece',
                            'ES' => 'ES-Spain',
                            'FI' => 'FI-Finland',
                            'FR' => 'FR-France',
                            'GB' => 'GB-United Kingdom',
                            'HR' => 'HR-Croatia',
                            'HU' => 'HU-Hungary',
                            'IE' => 'IE-Ireland',
                            'IT' => 'IT-Italy',
                            'LT' => 'LT-Lithuania',
                            'LU' => 'LU-Luxembourg',
                            'LV' => 'LV-Latvia',
                            'MT' => 'MT-Malta',
                            'NL' => 'NL-The Netherlands',
                            'PL' => 'PL-Poland',
                            'PT' => 'PT-Portugal',
                            'RO' => 'RO-Romania',
                            'SE' => 'SE-Sweden',
                            'SI' => 'SI-Slovenia',
                            'SK' => 'SK-Slovakia'], 
                            null, ['id' => 'countryCode', 'class' => 'form-control']
                        ) !!}
        </div>
    <div class="col-md-2 col-xs-2">
        {!! Form::text('code', null, ['id' => 'code', 'disabled' => 'disabled', 'class' => 'form-control']) !!}
    </div>
    <div class="col-md-3 col-xs-3">
        {!! Form::text('vat_number', null, ['id' => 'vat', 'class' => 'form-control']) !!}
    </div>
    <div class="col-md-4 col-xs-4">
        {!! Form::text('msg', null, ['id' => 'msg', 'disabled' => 'disabled', 'class' => 'form-control']) !!}
    </div>
</div>
  

javascript

 <script type="text/javascript">

    $(document).on('change', '#countryCode', function () {
        $('input[id=code]').val($('#countryCode').val());
    });

    $(document).on('input paste', '#vat, #countryCode', function () {
        $.ajax({
            type:'POST',
            url:'/soap',
            headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}' },
            data: $('#countryCode, #vat').serialize(),
                success:function(data){
                    $('input[id=msg]').val(data.msg);
                }
            });
    });

</script>
  

И на самом деле мне не нужно, чтобы это работало так …. мне просто нужно проверить / подтвердить, ввел ли пользователь существующий номер в это поле ввода номера НДС.

Итак, вопрос:

Как проверить это единственное поле ввода в серверной части, чтобы пользователь не мог ввести несуществующий номер НДС?

введите описание изображения здесь

Комментарии:

1. Что вы имеете в виду под «невозможно манипулировать»? Когда пользователь отправляет форму, вы отправляете данные из своего браузера на свой сервер и обрабатываете все. Вы должны проверить, существует ли его VAT с вашим soapRequest при обработке пользовательского ввода на вашем сервере.

2. Да, вы правы …. но на данный момент у меня нет проверки для этого поля …. как проверить это, чтобы при отправке пользователем form….it должен быть действительный номер плательщика НДС

3. Вы должны проверить его на сервере с помощью вашего запроса SOAP. Или (лучшая идея) проверьте его с помощью Javascript после того, как пользователь введет свой VAT в поле, и отправьте ему короткое сообщение (например, сделайте его зеленым или что-то в этом роде), если проверка прошла успешно. SoapRequest выполняется на стороне сервера, в чем проблема, чтобы проверить его ПОСЛЕ того, как пользователь отправит данные с вашей формой?

4. Вы имеете в виду, когда вы сохраняете свои данные на своем сервере?

5. проблема в том, что пользователь фактически получает это сообщение, если номер действителен или нет, НО это просто информация для пользователя …. но он все равно может написать любое число, которого не существует …. и я хочу сделать так, чтобы пользователь не мог вводить несуществующий НДСчисло

Ответ №1:

Итак, у вас есть базовая проверка с помощью Laravel, и теперь вы можете расширить проверку своим запросом SOAP: вот так:

 $validation = [
    'name' => 'required|max:255',
    'email' => 'required|confirmed|email|max:255|unique:users',
    'password' => 'required|confirmed|min:6',     
    ...

$YourFormValidation = Validator::make($data,$validation);

if( $YourFormValidation->passes() ) { 
  // so all your data seems valid, check out VAT

  $countryCode = $request->countryCode;
  $vatNo = $request->vat_number;

  $client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl");

  $result = $client->checkVat(['countryCode' => $countryCode, 'vatNumber' => $vatNo]);

  if($result->valid == true) {
     // everyhting is correct, save data to database (or whatever)
  } else {
     // VAT seemed correct, but Webservice returns false. Show user an Information that the VAT is not correct.
  }

} else { 
    //code for validation failure
}