Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Code snippet to validate UK VAT IDs with Barns2uks EDD EU VAT plugin. Requires https://vatsense.com API KEY
<?php
//License is public domain, use to your hearts content. I take no ownership or responsibility
use Barn2\Plugin\EDD_VAT\VAT_Check_Result;
add_filter( 'edd_vat_number_check', function ($result, $vat_number, $country_code ) {
if($result->error === VAT_Check_Result::INVALID_INPUT && $country_code==='GB') {
if(strlen($vat_number)!==9 || !filter_var($vat_number, FILTER_VALIDATE_INT)) {
return $result;
}
/** @noinspection PhpUndefinedConstantInspection */
$basicauth = 'Basic ' . base64_encode( 'user:'.VATSENSE_API_SECRET );
$headers = array(
'Authorization' => $basicauth,
'Content-type' => 'application/json',
);
$request_data = ['headers' => $headers];
$response = wp_remote_get('https://api.vatsense.com/1.0/validate?vat_number='.$country_code.$vat_number, $request_data);
$body = wp_remote_retrieve_body($response);
$code = wp_remote_retrieve_response_code($response);
if(200 === $code) {
try {
$data = json_decode($body, true);
$result->valid = filter_var( $data['data']['valid'], FILTER_VALIDATE_BOOLEAN );
if($result->valid) {
$result->name = $data['data']['company']['company_name'];
$address = explode( "\n", $data['data']['company']['company_address'] );
$result->valid = filter_var( $data['data']['valid'], FILTER_VALIDATE_BOOLEAN );
$result->address = implode( apply_filters( 'edd_vat_check_result_address_separator', ', ' ), array_filter( $address ) );
$result->error=null;
} else {
$result->error = VAT_Check_Result::INVALID_VAT_NUMBER;
}
} catch (Exception $e) {
$result->error = VAT_Check_Result::API_ERROR;
}
} elseif(400 === $code){
$result->error = VAT_Check_Result::INVALID_INPUT;
}else {
$result->error = VAT_Check_Result::API_ERROR;
}
}
return $result;
},0,3);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment