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调用Java对象的方法
Oct 09 PHP
md5 16位二进制与32位字符串相互转换示例
Dec 30 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
php身份证号码检查类实例
Jun 18 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
PHP中overload与override的区别
Feb 13 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 PHP
PHP序列化的四种实现方法与横向对比
Nov 29 PHP
laravel 框架执行流程与原理简单分析
Feb 01 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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
点图片上一页下一页翻页效果
2008/07/09 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
python集合常见运算案例解析
2019/10/17 Python
python中str内置函数用法总结
2020/12/27 Python
培训演讲稿范文
2014/01/12 职场文书
消防器材管理制度
2014/01/28 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
品质标语大全
2014/06/21 职场文书
委托书格式
2014/08/01 职场文书
食品质检员岗位职责
2015/04/08 职场文书
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL