Php 带有外部SOAP请求的Laravel验证字段

Php 带有外部SOAP请求的Laravel验证字段,php,laravel,soap,Php,Laravel,Soap,我在AuthController.php中使用网站中的.wsdl文件创建了一个函数soapRequest(),以检查增值税编号是否存在: public function soapRequest(Request $request) { $countryCode = $request->countryCode; $vatNo = $request->vat_number; $client = new \SoapClient("http://ec.europa.

我在AuthController.php中使用网站中的.wsdl文件创建了一个函数soapRequest(),以检查增值税编号是否存在:

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>

{!!表单::选择('countryCode'[
''=>'-奥斯沃伦土地',
“在奥地利”=>“在奥地利”,
'比利时'=>'比利时',
'BG'=>'BG保加利亚',
‘CY’=>‘CY塞浦路斯’,
“捷克”=>“捷克共和国”,
“德”=>“德”,
“丹麦丹麦”=>“丹麦丹麦丹麦”,
“EE”=>“EE爱沙尼亚”,
“EL”=>“EL Greece”,
“ES”=>“ES西班牙”,
“FI”=>“FI芬兰”,
'法国'=>'法国',
“GB”=>“英国GB”,
“HR”=>“HR克罗地亚”,
“胡”=>“胡匈牙利”,
“IE”=>“IE爱尔兰”,
“IT”=>“IT意大利”,
“LT'=>“LT立陶宛”,
“LU”=>“LU卢森堡”,
“LV”=>“LV拉脱维亚”,
“马耳他山”=>“马耳他山”,
'荷兰'=>'荷兰',
'波兰'=>'波兰',
“PT”=>“PT葡萄牙”,
“罗马尼亚”=>“罗马尼亚”,
'东南'=>'东南瑞典',
“SI”=>“SI斯洛文尼亚”,
“SK'=>“SK斯洛伐克”],
null,['id'=>'countryCode','class'=>'form control']
) !!}
{!!Form::text('code',null,['id'=>'code','disabled'=>'disabled','class'=>'Form control'])
{!!Form::text('vat_number',null,['id'=>'vat',class'=>'表单控件'])
{!!Form::text('msg',null,['id'=>'msg','disabled'=>'disabled','class'=>'Form control'])
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>

$(文档).on('change','#countryCode',函数(){
$('input[id=code]').val($('#countryCode').val());
});
$(文档).on('输入粘贴','增值税,'国家代码')函数(){
$.ajax({
类型:'POST',
url:“/soap”,
标题:{'X-CSRF-TOKEN':{{{CSRF_TOKEN()}}}},
数据:$(“#国家代码,#增值税”).serialize(),
成功:功能(数据){
$('input[id=msg]').val(data.msg);
}
});
});
实际上,我不需要它像这样工作……我只需要验证/验证用户是否在增值税号码输入字段中输入了现有号码

因此,问题是:

如何在后端验证单个输入字段,以便用户无法输入不存在的增值税编号


因此,您可以使用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
}

你说不能被操纵是什么意思?当用户提交表单时,您将数据从浏览器发送到服务器,并处理所有内容。当您在服务器上处理用户输入时,您应该检查您的soapRequest是否存在VAT。是的,您是对的……但目前我没有该字段的验证……如何验证它,以便用户提交表单时……它必须是一个有效的VAT号。您应该在服务器上检查它,以及您的SOAP请求。或者(更好的主意)在用户将VAT输入字段后,使用Javascript检查它,如果验证成功,则给他一条短消息(如变绿或其他)。SoapRequest是服务器端的,在用户将数据与表单一起发送后检查它有什么问题?你的意思是当你将数据保存到服务器上时?问题是,如果数字有效或无效,用户实际上会收到该消息,但这只是用户的一个信息…但他仍然可以写入任何不存在的数字…我想这样做,以便用户无法输入不存在的增值税编号