PHP 聚合数据全国车辆违章查询 API 接入指南
为方便车主随时掌握交通违章状态,本文将演示如何通过 PHP 接入聚合数据的全国车辆违章查询 API。内容涵盖从申请 Key 到封装 cURL 请求类的全过程,提供可直接复用的代码示例。
准备条件
在开始之前,你需要完成以下步骤:
- 申请 AppKey:访问 聚合数据平台 申请“全国车辆违章查询”接口的 AppKey。
- 配置环境:确保 PHP 环境已开启
cURL扩展,用于发起 HTTP 请求。
第一步:引入核心请求类
为了简化调用过程,我们首先创建一个专用的请求类文件 class.juhe.wz.php。在业务入口文件中引入该类并设置字符编码:
<?php
header('Content-type:text/html;charset=utf-8');
include 'class.juhe.wz.php'; // 引入封装好的请求类第二步:配置基础参数
实例化请求类时需传入你申请的 appkey,这是身份验证的关键凭证:
// 配置接口基本信息 $appkey = '你的AppKey'; // 替换为你申请的违章查询key $wz = new wz($appkey);
第三步:获取支持的查询城市
不同城市对违章查询所需的信息(如发动机号、车架号)要求不同。建议将城市列表进行缓存(例如每 3 小时更新一次),以减少重复请求:
// 获取所有支持的城市列表
$wzcitys = $wz->getCitys();
// 或者获取指定省份下的城市(如广东 GD)
// $wzcitys = $wz->getCitys('GD');返回的数据结构示例如下,请注意观察 engineno 和 classno 的标识(通常 0 表示不强制要求输入):
{
"resultcode": "200",
"reason": "成功的返回",
"result": [
{
"province": "北京",
"province_code": "BJ",
"citys": [
{
"city_name": "北京",
"city_code": "BJ",
"abbr": "京",
"engine": "1",
"engineno": "0",
"classa": "0",
"class": "0",
"classno": "0"
}
]
}
],
"error_code": 0
}第四步:执行违章查询操作
根据上一步获取的城市要求,填写必要的车牌信息和车辆身份信息进行查询。大多数城市仅支持小型车查询,因此无需传递车辆类型参数:
// 定义查询条件
$city = 'GD_DG'; // 城市代码,必传(如:东莞 DG)
$carno = '粤S*****'; // 车牌号,必传
$engineno = '****'; // 发动机号(部分城市必填)
$classno = '*****'; // 车架号(部分城市必填)
// 发起查询
$wzResult = $wz->query($city, $carno, $engineno, $classno);
if ($wzResult['error_code'] == 0) {
if (!empty($wzResult['result']['lists'])) {
foreach ($wzResult['result']['lists'] as $w) {
// 输出违章详情:地点 时间 行为 扣分 罚款
echo $w['area'] . " " . $w['date'] . " " . $w['act'] . " " . $w['fen'] . " " . $w['money'] . "<br>";
}
} else {
echo "该车无违章记录";
}
} else {
// 查询失败,输出错误码及原因
echo $wzResult['error_code'] . ":" . $wzResult['reason'];
}第五步:查看完整封装类代码
以下为 class.juhe.wz.php 的完整源码,包含了获取城市列表、查询违章以及底层的 cURL 请求封装逻辑:
<?php
//----------------------------------
// 聚合数据全国违章接口调用类
//----------------------------------
class wz{
private $appkey = false;
private $cityUrl = 'http://v.juhe.cn/wz/citys';
private $wzUrl = 'http://v.juhe.cn/wz/query';
public function __construct($appkey){
$this->appkey = $appkey;
}
/**
* 获取违章支持的城市列表
*/
public function getCitys($province=false){
$params = 'key='.$this->appkey."&format=2";
$content = $this->juhecurl($this->cityUrl,$params);
return $this->_returnArray($content);
}
/**
* 查询车辆违章
* @param string $city [城市代码]
* @param string $carno [车牌号]
* @param string $engineno [发动机号]
* @param string $classno [车架号]
*/
public function query($city,$carno,$engineno='',$classno=''){
$params = array(
'key' => $this->appkey,
'city' => $city,
'hphm' => $carno,
'engineno'=> $engineno,
'classno' => $classno
);
$content = $this->juhecurl($this->wzUrl,$params,1);
return $this->_returnArray($content);
}
private function _returnArray($content){
return json_decode($content,true);
}
/**
* 底层 cURL 请求封装
*/
public function juhecurl($url,$params=false,$ispost=0){
$httpInfo = array();
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData' );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
if( $ispost ){
curl_setopt( $ch , CURLOPT_POST , true );
curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
curl_setopt( $ch , CURLOPT_URL , $url );
}else{
if($params){
curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
}else{
curl_setopt( $ch , CURLOPT_URL , $url);
}
}
$response = curl_exec( $ch );
if ($response === FALSE) {
return false;
}
$httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
$httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
curl_close( $ch );
return $response;
}
}
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









