
具体效果如下:接入微信公众号,那么一定需要开通微信公众号,并且也打开了开发者模式,那么我这里就不做详细的介绍,具体可以在微信公众号平台上面查看文档了。
根据微信的开发文档,我们要接入微信公众号的回复需要做到以下三个步骤1、填写服务器配置2、验证服务器地址的有效性3、依据接口文档实现业务逻辑我们直接跳过申请公众号的步骤,然后看看如何验证服务器,在微信公众号平台后台,找到开发的基本配置,如下图:然后,我们需要在我们的服务器填入一个验证服务器的PHP文件,我这里填写了http://www.yeehot.com/DaoGou/weixin.php,关于这个文件,等下我回讲解如何实现。
这里的token我们可以填入我们自己的一个数据,类似密码一样。
上面我们有个weixin.php文件,我们这个文件需要放到我们外网的服务器进行验证的。
那么里面有哪些信息,主要就是验证信息以及回复信息首先,我们说一下验证信息的文件.同样根据微信的文档的说明,验证微信服务器发生的数据算法主要如下:1)将token、timestamp、nonce三个参数进行字典序排序2)将三个参数字符串拼接成一个字符串进行sha1加密3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信那么我们可以写一个这样的校验函数。
注意这里我们需要用到我们刚刚在微信后台填写的token。
private function checkSignature(){$signature= $_GET[“signature”];$timestamp= $_GET[“timestamp”];$nonce= $_GET[“nonce”];$token=”wx111111″;$signinfo = array();$signinfo = array($timestamp,$nonce , $token);sort($signinfo);$result = sha1( implode($signinfo) );if( $result == $signature ){return true;}else{return false;}}此外,我们知道微信根据客户端的请求而会发送很多数据到我们的服务器,然而发送验证数据是会带上echostr这个字段,那么我们可以对这个字段进行判断,判断是验证信息还是其他的信息。
刚刚有了这个校验函数后,我们就可以校验了,但是为了让我们的代码可以更加有重用性,我们写了一个类,注意就是用于验证。
代码如下:class weixin{public function checkWeixinInfo(){$echostr=$_GET[“echostr”];if($this->checkSignature()){echo $echostr;exit;}}private function checkSignature(){$signature= $_GET[“signature”];$timestamp= $_GET[“timestamp”];$nonce= $_GET[“nonce”];$token=”111″;$signinfo = array();$signinfo = array($timestamp,$nonce , $token);sort($signinfo);$result = sha1( implode($signinfo) );if( $result == $signature ){return true;}else{return false;}}}刚刚我们说到微信会根据客户端的不同请求而发送不同的数据到我们的服务器,那么我们可以根据相应的逻辑而做出处理从而提取到我们的消息内容。
这里我们根据echostr有这个参数而做出不同的处理,如果不是的话我们就判断是接受其他消息。
我们知道微信发送的消息都是XML格式的,所以我们将POST的原始数据进行处理,例如下面$infoobj=simplexml_load_string($data,’SimpleXMLElement’,LIBXML_NOCDATA);然后我们可以进行数据的处理了,对于收消息我们可以看一下这里文档 https://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html首先我们判断一下数据的类型$msg_type=trim($infoobj->MsgType);我们由于是根据用户输入的文本内容来查询数据的,所以我们可以判断$msg_type为text类型就可以了,然后我们就可以提起用户的内容,这个作为我们查询商品的关键词,然后进行数据库 *** 作。
部分代码如下:case “text”:{$content=array();$keyword=trim($infoobj->Content);$res1 = mysql_query(“select * from yeehot_taobaoke_product where name like ‘%$keyword%’ order by shopid asc limit 0,7”);while ($row1 = mysql_fetch_array($res1)) {$content[]=array(“Title”=>$row1[‘name’],”Description”=>”销售价格:”.$row1[‘price’], “PicUrl”=>$row1[‘image’], “Url” =>$row1[‘tbk_link’]);}完成上面的 *** 作,我们需要回复内容给用户。
那么我们也需要看一下回复内容,可以看微信文档发送的内容。
https://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html我们回复的是图文,格式如下:<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>2</ArticleCount><Articles><item><Title><![CDATA[title1]]></Title><Description><![CDATA[description1]]></Description><PicUrl><![CDATA[picurl]]></PicUrl><Url><![CDATA[url]]></Url></item><item><Title><![CDATA[title]]></Title><Description><![CDATA[description]]></Description><PicUrl><![CDATA[picurl]]></PicUrl><Url><![CDATA[url]]></Url></item></Articles></xml>那么我们可以根据刚刚数据库查询的数据进行处理$info1= “<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>“;$info_str=””;foreach ($content as $item){$info_str.= sprintf($info1, $item[‘Title’], $item[‘Description’], $item[‘PicUrl’], $item[‘Url’]);}$responsTpl = “<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><Content><![CDATA[]]></Content><ArticleCount>%s</ArticleCount><Articles>%s</Articles></xml>”;$result =sprintf($responsTpl, $infoobj->FromUserName, $infoobj->ToUserName, time().””, count($content).””,$info_str);然后我们将这些结果输出给微信服务器就可以了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)