我感觉现在自己学的越来越杂了,今天为了写开放性实验作业,撸起袖子改代码了。本以为可以直接抄的,但是感觉太没有含金量了,至少有那么一点点是自己写的吧,于是就写了一个微信公众号查询快递的功能,当然了,由于我是个php小白(连小白都不算),就只好照葫芦画瓢,写了一个差不多可以用的。网上的方培的那个连的是快递100的接口,申请还要idkey,还要把自己的网站上连接他的友情链接,你想的也太美了,老子不干了,还是快递api(http://www.kuaidiapi.cn/)这个网站很和蔼可亲了,直接注册账号就可以了。
注册账号成功后,可以看到自己的UID,key,将它们分别填入下图的1,2位置,3的位置为运单号,4的位置为快递公司代码(例如:申通就是shentong)
根据API文档返回参数说明
注意这里data是一个dict。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 【kuaidi.php】 <?php function kuaidi($keyword) { $word = explode("+",$keyword); $number = $word[1]; $name = $word[0]; $url = "http://www.kuaidiapi.cn/rest/?uid="XXXX"&key="xxxxxxxxxxxx"&order=".$number."&id=".$name; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); if (curl_error($ch)) { echo 'error code:' .curl_errno($ch).'reason:'.curl_error($ch); } curl_close($ch); $AllInfo = json_decode($output,true); if ($AllInfo['message'] != ""){ return $AllInfo['message']; } else { $result = ""; foreach ($AllInfo["data"] as $singleStep) { $result .= $singleStep["time"]." ".$singleStep["content"]."\n"; } return $result; } } ?>
|
然后在index.php中调用即可,因为我这里采用的格式是“翻译+key”,所以通过explode(“+”,$keyword)
对keyword进行分组,我们需要的是第二部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| <?php header('Content-type:text'); define("TOKEN", "6doo"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; 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; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE) { case "text": $resultStr = $this->receiveText($postObj); break; case "event": $resultStr = $this->receiveEvent($postObj); break; } echo $resultStr; }else { echo ""; exit; } } //接收消息 private function receiveText($object) { $funcFlag = 0; if (strstr($keyword, "快递")) { include('kuaidi.php'); $contentStr = kuaidi($keyword); } $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; } private function receiveEvent($object) { $contentStr = ""; switch ($object->Event) { case "subscribe": $contentStr = "欢迎关注6doo,回复【快递+快递公司全拼(例:shentong)+单号】可查询快递"; } $resultStr = $this->transmitText($object, $contentStr); return $resultStr; } private function transmitText($object, $content, $flag = 0) { $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>%d</FuncFlag> </xml>"; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag); return $resultStr; } } ?>
|
人生第一次写php,虽然一办代码都不是我写的,都是抄的,但是至少我改出来了。
放个结果,开心下
至于微信怎么怎么进入开发者模式,怎么配置服务器,服务器端怎么操作应该就不用说了(我使用的是php),百度一下“微信订阅号开发 使用sae”之类的到处都是。