我现在找到了一个可以查询快递信息的jsonp接口http://api.open.baidu.com/pae/channel/data/asyncqury?cb=回调函数&appid=4001&com=快递公司&nu=快递单号
先不给回调函数,查询示例如下http://api.open.baidu.com/pae/channel/data/asyncqury?cb=&appid=4001&com=zhongtong&nu=402364452772
这样得到的确实是标准的json数据(各位可以点击上面的地址去看看)。
但是我用jsonp却只能得到该数据的前两个属性,第三个属性就为undefined了。我的代码如下:
var queryStr="http://api.open.baidu.com/pae/channel/data/asyncqury?cb=handleResponse&appid=4001&&com=zhongtong&nu=402364452772";
var script=document.createElement("script");
script.src=queryStr;
document.body.insertBefore(script,document.body.lastChild);
function handleResponse(response) {
console.log(response);
}
理论上打印出的这个response应该就是完整的快递信息json对象,然而得到的却只有该对象前两个属性。请教各位这是哪里出了问题?
谢谢各位,现在发现用HTML文档运行这段代码确实没有任何问题。但是我这个项目是用smarty模板写的,是用php打开这个html文档的,这样就不能得到正确结果了。。。是php不支持jsonp还是smarty不支持jsonp?求教~
看的正常啊。
我给你一个基于PHP的查询快递物流信息的API接口
1.KuaidiAPI.php
<?php
/**
class KuaidiAPI{
private $_APPKEY = '';
private $_APIURL = "http://highapi.kuaidi.com/openapi-querycountordernumber.html?";
private $_show = 0;
private $_muti = 0;
private $_order = 'desc';
/**
* 您获得的快递网接口查询KEY。
* @param string $key
*/
public function KuaidiAPi($key){
$this->_APPKEY = $key;
}
/**
* 设置数据返回类型。0: 返回 json 字符串; 1:返回 xml 对象
* @param number $show
*/
public function setShow($show = 0){
$this->_show = $show;
}
/**
* 设置返回物流信息条目数, 0:返回多行完整的信息; 1:只返回一行信息
* @param number $muti
*/
public function setMuti($muti = 0){
$this->_muti = $muti;
}
/**
* 设置返回物流信息排序。desc:按时间由新到旧排列; asc:按时间由旧到新排列
* @param string $order
*/
public function setOrder($order = 'desc'){
$this->_order = $order;
}
/**
* 查询物流信息,传入单号,
* @param 物流单号 $nu
* @param 公司简码 $com 要查询的快递公司代码,不支持中文,具体请参考快递公司代码文档。
* @throws Exception
* @return array
*/
public function query($nu, $com=''){
if (function_exists('curl_init') == 1) {
$url = $this->_APIURL;
$dataArr = array(
'id' => $this->_APPKEY,
'com' => $com,
'nu' => $nu,
'show' => $this->_show,
'muti' => $this->_muti,
'order' => $this->_order
);
foreach ($dataArr as $key => $value) {
$url .= $key . '=' . $value . "&";
}
// echo $url;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$kuaidresult = curl_exec($curl);
curl_close($curl);
if($this->_show == 0){
$result = json_decode($kuaidresult, true);
}else{
$result = $kuaidresult;
}
return $result;
}else{
throw new Exception("Please install curl plugin", 1);
}
}
}
2.example.php
<?php
include 'KuaidiAPI.php';
//修改成你自己的KEY
$key = 'c684ab43a28bc3caea53570666ce9762';
$kuaidichaxun = new KuaidiAPi($key);
//设置返回格式。 0: 返回 json 字符串; 1:返回 xml 对象
//$kuaidichaxun->setShow(1); //可选,默认为 0 返回json格式
//返回物流信息条目数。 0:返回多行完整的信息; 1:只返回一行信息
//$kuaidichaxun->setMuti(1); //可选,默认为0
//设置返回物流信息排序。desc:按时间由新到旧排列; asc:按时间由旧到新排列
//$kuaidichaxun->setOrder('asc');
//查询
$result = $kuaidichaxun->query('111111', 'quanfengkuaidi');
//带公司短码查询,短码列表见文档
//$result = $kuaidichaxun->query('111111', 'quanfengkuaidi');
//111111 快递单号
//quanfengkuaidi 快递公司名称
var_dump($result);
使用说明:
1.KuadidiAPI.php 不需要修改改任何东西
2.example.php 按照说明使用
3.快递公司代码见快递公司代码技术文档(快递公司代码文档下载地址:https://pan.baidu.com/s/1qYtikSs)