内容目录
周4看到波哥给咱演示他淫荡的微信小黄鸡,看上去好装逼的哇,咱也心痒痒,也研究下,原来这玩意这么简单,哇咔咔。
简直就是拿官方的sample改改一个淫荡的小黄鸡就可以出来了。
写出来跟大家分享一下实现过程
第一步:申请微信公众号,https://mp.weixin.qq.com这儿申请
第二步:进入公众平台开启开发者模式,设置url和token,url就是咱们实际编码的php文件的网络路径,一般放在自己的空间服务器,如果大家没有空间服务器推荐去申请个免费的新浪sae,具体方法百度。
![]()
图里的wx_sample.php就是官方的sample稍微改了下而已。这是官方的sample的下载地址:http://mp.weixin.qq.com/wiki/images/f/f7/Wx-sample.zip
我修改后的代码会在最后贴出来哦,token是一个验证公众号安全性的一个值,必须和代码中的token值保持一致哦,这是自己设置的一个值。
先贴张演示图,波哥,明哥,浩哥别来追杀我,小黄鸡是诚实的。

大家如果想测试下可以扫下我测试用的二维码,以前给学校论坛做的,现在用来自己测试玩了。小黄鸡很黄很暴力,别举报我的号啊,同胞们。

最后附上源代码:wx_sample.php
<?php
/**
* 微信聊天测试脚本
*/
//定义token值和你在微信公众平台开发者里设置的token值需要保持一致,我这偷懒没改还用的默认的weixin
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$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;
$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>";
if(!empty( $keyword ))
{
//定义信息类型为文本类型(这里只是简单聊天所以没有加入图片,声音类型等的判断)
$msgType = "text";
//根据用户输入信息通过小黄鸡的聊天函数返回输出结果
$contentStr = $this->chat($keyword);
//这边官方代码用的sprintf的用意就是顺序输出对应的值到上面的$textTpl里[%s],大家特别留意这边的$fromUsername是输出到<ToUserName>中,意思是把获取的用户名现在作为被发送人来输出,如果英语还行的话from,to应该很容易理解,嘿嘿
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "哥们,别输个空内容呀!我不会读心哇!";
}
}else {
echo "";
exit;
}
}
/**
* 这是一个签名验证函数
* @return [boolen] [验证结果]
*/
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
/**
* 封装的一个小黄鸡函数
* @param [string] $keyword [用户输入数据]
* @return [string] [curl处理后的小黄鸡回复数据]
*/
private function chat($keyword){
$url = "http://www.simsimi.com/talk.htm?lc=ch";
//这个curl是因为官方每次请求都有唯一的COOKIE,我们必须先把COOKIE拿出来,不然会一直返回“HI”
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);
list($header, $body) = explode("/r/n/r/n", $content);
preg_match("/set/-cookie:([^/r/n]*)/i", $header, $matches);
//curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$cookie = $matches[1];
$urll = 'http://www.simsimi.com/func/req?msg=' .$keyword. '&lc=ch';
// 这个CURL就是模拟发起请求咯,直接返回的就是JSON
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urll);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, "http://www.simsimi.com/talk.htm?lc=ch");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$content = curl_exec($ch);
curl_close($ch);
//输出json
//print_r($content);
$json = json_decode($content,true);
if (!empty($json) && $json['result']==100){
return $json['response'];
}
}
}