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 相关文章推荐
自动分页的不完整解决方案
Jan 12 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
php 用sock技术发送邮件的函数
Jul 21 PHP
Discuz 模板引擎的封装类代码
Jul 18 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
Oct 19 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
php事务处理实例详解
Jul 11 PHP
PHP Reflection API详解
May 12 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
在Laravel中使用DataTables插件的方法
May 29 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
Zend Framework分发器用法示例
2016/12/11 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
JS面向对象编程详解
2016/03/06 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
vue穿梭框实现上下移动
2021/01/29 Vue.js
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
Python获取文件ssdeep值的方法
2014/10/05 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python 自动重连wifi windows的方法
2018/12/18 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
python中如何设置代码自动提示
2020/07/15 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
初中高效课堂实施方案
2014/02/26 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
单位工作证明范文
2014/09/14 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL