php微信公众号开发之快递查询


Posted in PHP onOctober 20, 2018

本文实例为大家分享了php微信公众号开发之快递查询的具体代码,供大家参考,具体内容如下

快递查询

  • 数组用法
  • foreach

查询接口是:爱快递:https://www.aikuaidi.cn/api/

核心代码如下:

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $type = $postObj->MsgType;
        $customrevent = $postObj->Event;
        $latitude = $postObj->Location_X;
        $longitude = $postObj->Location_Y;
        $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>";       
        switch ($type)
        { 
        case "text";
          $status=array('0'=>'查询出错','1'=>'暂无记录','2'=>'在途中','3'=>'派送中','4'=>'已签收','5'=>'拒收','6'=>'疑难件','7'=>'退回');//构建快递状态数组
          $kuaidiurl="http://www.aikuaidi.cn/rest/?key=ff4735a30a7a4e5a8637146fd0e7cec9&order={$keyword}&id=shentong&show=xml";//快递地址
          $kuaidistr=file_get_contents($kuaidiurl);//读入文件
          $kuaidiobj=simplexml_load_string($kuaidistr);//xml解析
          $kuaidistatus = $kuaidiobj->Status;//获取快递状态
          $kuaistr=strval($kuaidistatus);//对象转换为字符串
          $contentStr0 =$status[$kuaistr];//根据数组返回
          foreach ($kuaidiobj->Data->Order as $a)
          {  
            foreach ($a->Time as $b)
            {
              foreach ($a->Content as $c)
              {
                $m.="{$b}{$c}";}
              }
          }
          //遍历获取快递时间和事件
          $contentStr="你的快递单号{$keyword}{$contentStr0}{$m}";
          break;         
        default;
          $contentStr ="此项功能尚未开发";  
        }
        $msgType="text";
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
        echo $resultStr;

index.php整体代码如下:

<?php
/**
 * wechat php test
 */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
  public function valid()
  {
    $echoStr = $_GET["echostr"];

    //valid signature , option
    if($this->checkSignature()){
      echo $echoStr;
      exit;
    }
  }

  public function responseMsg()
  {
    //get post data, May be due to the different environments
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

    //extract post data
    if (!empty($postStr)){

        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $type = $postObj->MsgType;
        $customrevent = $postObj->Event;
        $latitude = $postObj->Location_X;
        $longitude = $postObj->Location_Y;
        $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>";       
        switch ($type)
        { 
        case "text";
          $status=array('0'=>'查询出错','1'=>'暂无记录','2'=>'在途中','3'=>'派送中','4'=>'已签收','5'=>'拒收','6'=>'疑难件','7'=>'退回');//构建快递状态数组
          $kuaidiurl="http://www.aikuaidi.cn/rest/?key=ff4735a30a7a4e5a8637146fd0e7cec9&order={$keyword}&id=shentong&show=xml";//快递地址
          $kuaidistr=file_get_contents($kuaidiurl);//读入文件
          $kuaidiobj=simplexml_load_string($kuaidistr);//xml解析
          $kuaidistatus = $kuaidiobj->Status;//获取快递状态
          $kuaistr=strval($kuaidistatus);//对象转换为字符串
          $contentStr0 =$status[$kuaistr];//根据数组返回
          foreach ($kuaidiobj->Data->Order as $a)
          {  
            foreach ($a->Time as $b)
            {
              foreach ($a->Content as $c)
              {
                $m.="{$b}{$c}";}
              }
          }
          //遍历获取快递时间和事件
          $contentStr="你的快递单号{$keyword}{$contentStr0}{$m}";
          break;         
        default;
          $contentStr ="此项功能尚未开发";  
        }
        $msgType="text";
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
        echo $resultStr;

    }else {
      echo "";
      exit;
    }
  }

  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;
    }
  }
}

?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
用函数读出数据表内容放入二维数组
Oct 09 PHP
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
可以在线执行PHP代码包装修正版
Mar 15 PHP
php学习 函数 课件
Jun 15 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
php生成QRcode实例
Sep 22 PHP
php中将一个对象保存到Session中的方法
Mar 13 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
Laravel手动返回错误码示例
Oct 22 PHP
php微信公众号开发之翻页查询
Oct 20 #PHP
php微信公众号开发之校园图书馆
Oct 20 #PHP
php微信公众号开发之二级菜单
Oct 20 #PHP
php微信公众号开发之音乐信息
Oct 20 #PHP
php微信公众号开发之欢迎老朋友
Oct 20 #PHP
php微信公众号开发之秒杀
Oct 20 #PHP
php微信公众号开发之关键词回复
Oct 20 #PHP
You might like
php单例模式示例分享
2015/02/12 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
用JQuery调用Session的实现代码
2010/10/29 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
JS与C#编码解码
2013/12/03 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
Vue瀑布流插件的使用示例
2018/09/19 Javascript
js实现点击烟花特效
2020/10/14 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
python爬取微信公众号文章的方法
2019/02/26 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Python验证码截取识别代码实例
2020/05/16 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
Order by的几种用法
2013/06/16 面试题
农民工工资发放承诺书
2014/03/31 职场文书
初中教师业务学习材料
2014/05/12 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
叶问观后感
2015/06/15 职场文书
校园开放日新闻稿
2015/07/17 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
Nginx 常用配置
2022/05/15 Servers