微信公众平台的快递查询功能的开发,原汁原味的原创。by:skiychan www.zzzzy.com
使用方法:
#查快递(或三个首字母ckd)#快递编号#快递单号
如(查询ems单号为1034616494006的快递):
#ckd#15#1034616494006
常用快递编号:df250b2156c434f3390392d09b1c9563
15ems,56申通,57顺丰,77圆通,
80韵达,87中通,85宅急送,62天天
<?php
/**
* 微信公众平台基础类 for fshare
* @author: skiychan
* @created: 2013.11.19
*/
class wechat{
// public $token = '';
/* public function __construct($token){
$this->token = $token;
} */
//判断是否来自微信服务器
/* public function valid(){
$echostr = $_get["echostr"];
if($this->checksignature()){
echo $echostr;
exit;
}
}
*/
public function responsemsg(){
$poststr = $globals["http_raw_post_data"];
if (!empty($poststr)){
$postobj = simplexml_load_string($poststr, 'simplexmlelement', libxml_nocdata);
$fromusername = $postobj->fromusername;
$tousername = $postobj->tousername;
$keyword = trim($postobj->content);
$time = time();
$texttpl = "<xml>
<tousername><![cdata[%s]]></tousername>
<fromusername><![cdata[%s]]></fromusername>
<createtime>%s</createtime>
<msgtype><![cdata[%s]]></msgtype>
<content><![cdata[%s]]></content>
<funcflag>0</funcflag>
</xml>";
if(!empty($keyword)){
//当输入文字类型
if($msgtype = "text"){
//$contentstr = $keyword.$fromusername.$time;
//$preg = "/^\#([\w\w]*?)\#([\w\w]*?)\#(.*)/"; //0为功能,1为选项,2为余下的值
//$preg = "/\#([\w]+)/"; //0为功能,1为选项,2为余下的值
$preg = "/\#([\w\d\x{4e00}-\x{9fa5}]+)/u"; //0为功能,1为选项,2为余下的值
preg_match_all($preg,$keyword,$newdata);
$fn_name = $newdata[1][0];
//获取快递的参数
if(strtolower($fn_name)=="skiy"){
$me = "我是此公众帐号的开发者,英文名skiy。\n如果你对本功能有任何意见和建议,欢迎联系我,\n我的qq是1005043848\n微信是forskiy,邮箱:\ndeveloper@zzzzy.com\n网站:www.zzzzy.com";
$contentstr = $me;
}
//获取快递的参数
if($fn_name=="快递"||strtolower($fn_name)=="kuaidi"){
$kdlist = '';
//启用pdo连接sqlite的方式
$db = new pdo("sqlite:somedata/data.dat");
$results = $db->query('select * from kuaidi')->fetchall();
foreach ($results as $key=>$row) {
//var_dump($row);
//$list_one = $row['id']." ".$row['code']." ".$row['company']."\n";
$list_one = $row['id'].' '.$row['company']."\n";
$kdlist = $kdlist.$list_one;
}
//主机支持sqlite3的方式
/* $db = new sqlite3("somedata/data.dat");
$results = $db->query('select * from kuaidi');
while ($row = $results->fetcharray()) {
//var_dump($row);
$list_one = $row['id']." ".$row['code']." ".$row['company']."\n\r";
$kdlist = $kdlist.$list_one;
} */
$contentstr = $kdlist;
}
if($fn_name=="查快递"||strtolower($fn_name)=="ckd"){
$id = $newdata[1][1];
$num = $newdata[1][2];
$db = new pdo("sqlite:somedata/data.dat");
$results = $db->query('select code,company from kuaidi where id = '.$id)->fetchall();
$code = $results[0]['code']; //获取英文代码
$com = $results[0]['company']; //获取公司名称
$numinfo = "快递:".$com."\n"."单号:".$num."\n";
$kd_url = "http://m.kuaidi100.com/query?type=".$code."&postid=".$num;
$json_getdata = file_get_contents($kd_url);
$get_kdinfo = json_decode($json_getdata); //object
$get_kdinfo = json_decode($json_getdata,true); //array
$last_t = "查询时间:\n".$get_kdinfo['updatetime']."\n\n"; //查询时间
$kd_shipinfo = $get_kdinfo['data']; //快递数据数组
$kd_total = count($kd_shipinfo)-1;
$ship = '';
//物流倒序详情
for($i = $kd_total;$i>=0;$i--){
$shipinfo = $kd_shipinfo[$i]['time']."\n".$kd_shipinfo[$i]['context']."\n";
$ship = $shipinfo.$ship;
}
//顺序物流详情
/*foreach ($kd_shipinfo as $v){
$shipinfo = $v['time']."\n".$v['context']."\n";
$ship = $shipinfo.$ship;
}
*/
$get_kdinfo = $numinfo.$last_t."【物流详情】\n".$ship;
if($ship){
$contentstr = $get_kdinfo;
}else{
$contentstr = $numinfo.">没有物流数据!";
}
}
$resultstr = sprintf($texttpl, $fromusername, $tousername, $time, $msgtype, $contentstr);
echo $resultstr;
}else{
echo "input something...";
}
}
}else {
echo "you have no enter something...";
exit;
}
}
//判断签名,返回bool
private function checksignature(){
$signature = $_get["signature"];
$timestamp = $_get["timestamp"];
$nonce = $_get["nonce"];
$token = token;
$tmparr = array($token, $timestamp, $nonce);
sort($tmparr);
$tmpstr = implode( $tmparr );
$tmpstr = sha1( $tmpstr );
if( $tmpstr == $signature ){
return true;
}else{
return false;
}
}
}
2.index.php
<?php
/**
*
* 微信公众平台消息接口 for fshare(分享资讯)
* @author: skiychan (wechat:forskiy)
* @created:2013.11.19
*
*/
include_once 'class.base.php';
define('token', 'skiychan');
$wx = new wechat();
//$wx->valid();
$wx->responsemsg();