TPShop的物流信息显示有点问题,每刷新一次则出现不同的物流信息,怀疑是被快递100进行IP限制或者其他原因,于是便注册了快递100个人版,但是还是不行,每次测试都提示不支持该物流,最后找到快递100的客服电话询问过后才知道快递100个人版不支持现在京东淘宝的相关物流信息查询,言外之意就是必须注册企业版的快递100才能享受快递物流信息的查询,于是,话不多说,我又注册了个企业版的,根据文档提示代码进行开发,代码如下所示:
显示订单物流信息方法:
//显示订单物流信息方法:
public function express()
{
$order_id = I('get.order_id');
$result = $order_goods = $delivery = array();
$order_goods = M('order_goods')->where("order_id=$order_id")->select();
$delivery = M('delivery_doc')->where("order_id=$order_id")->limit(1)->find();
if ($delivery['shipping_code'] && $delivery['invoice_no']) {
$result = queryExpress($delivery['shipping_code'], $delivery['invoice_no']);
$this->assign('result', $result);
$this->assign('order_goods', $order_goods);
$this->assign('delivery', $delivery);
}
$this->display();
}
查询订单信息方法:
function queryExpress($postcom,$getNu){
$post_data = array();
$post_data["customer"] = 'XXXXXX';
$key= 'XXXXXX' ;
$post_data["param"] = '{"com":"'.$postcom.'","num":"'.$getNu.'"}';
$url='http://poll.kuaidi100.com/poll/query.do';
$post_data["sign"] = md5($post_data["param"].$key.$post_data["customer"]);
$post_data["sign"] = strtoupper($post_data["sign"]);
$o="";
foreach ($post_data as $k=>$v)
{
$o.= "$k=".urlencode($v)."&"; //默认UTF-8编码格式
}
$post_data=substr($o,0,-1);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$result = curl_exec($ch);
$data = str_replace("\"",'"',$result );
$data = json_decode($result,true);
$data = $data['data'];
if (!isset($data)) {
return array('status' => 0, 'message' => '查询失败,参数有误');
}else{
foreach ($data as $key =>$value){
$datas[$key]['time'] = $value['time'];
$datas[$key]['context'] = $value['context'];
}
return array('status' => 1, 'message' => 'ok', 'data' => $datas);
}
return $data;
}
按说参照快递100API文档写是不会出现错误的,但是出现一个奇怪的现象,就是每次请求出的值直接显示到页面中,而我打印的值却接收不到或者接收到打印出显示1,这就令我很尴尬了,于是,查遍百度,最后使用一行代码解决问题,代码如下:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
当时我也感觉不可思议,一段代码真的可以拯救这个快递100的查询物流信息的问题?我十分不解,便重新百度了这行代码的意思,参考链接如下:
https://www.cnblogs.com/you-jia/p/4118659.html
具体解释引用参考链接如下:
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
或着不使用这个选项: 如果成功只返回TRUE,自动输出返回的内容 再简单点说如果设置成1 如果curl_exec() 的结果是一个return赋值 你可以要它赋值给一个变量 比如 response=curlexec();response=curlexec();
response就是一个你curl执行后的string结果(相当于服务端那边的echo XXX的值;不会直接输出到页面) 反之如果是0, 你的 curl_exec(); 就相当于你设置true的时候 echo $response;