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 相关文章推荐
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
php中通过数组进行高效随机抽取指定条记录的算法
Sep 09 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
php.ini中的request_order推荐设置
May 10 PHP
PHP的命令行命令使用指南
Aug 18 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 PHP
Laravel实现表单提交
May 07 PHP
PHP数据库操作四:mongodb用法分析
Aug 16 PHP
php微信开发之关键词回复功能
Jun 13 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
php layui实现前端多图上传实例
Jul 30 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
Jan 25 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
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
PHP Reflection API详解
2015/05/12 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
python数据结构之列表和元组的详解
2017/09/23 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
Django实现跨域的2种方法
2019/07/31 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
用python解压分析jar包实例
2020/01/16 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
C/C++程序员常见面试题一
2012/12/08 面试题
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
机电一体化大学生求职信
2013/11/08 职场文书
清明节演讲稿
2014/05/27 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
安全先进个人材料
2014/12/29 职场文书
家长给老师的感谢信
2015/01/20 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
SQL Server删除表中的重复数据
2022/05/25 SQL Server
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS