移植微信公众平台demo 修改,挂在新浪微博的私信聊天机器人。测试微博@海经院论坛
微信公众平台sdk for go
setappsecret(app_secret);//签名验证$signature = $_get[signature];$timestamp = $_get[timestamp];$nonce = $_get[nonce];if (!$call_back_sdk->checksignature($signature, $timestamp, $nonce)) { die(check signature error);}//首次验证url时会有'echostr'参数,后续推送消息时不再有'echostr'字段//若存在'echostr'说明是首次验证,则返回'echostr'的内容。if (isset($_get[echostr])) { die($_get[echostr]);}//处理开放平台推送来的消息,首先获取推送来的数据.$post_msg_str = $call_back_sdk->getpostmsgstr();/** * 设置接口默认返回值为空字符串。 * 请注意数据编码类型。接口要求返回的字符串需要是utf8编码 * 需要说明的是开放平台判断推送成功的标志是接口返回的http状态码, * 只要应用的接口返回的状态为200就会认为消息推送成功,如果http状态码不为200则会重试,共重试3次。 */$str_return = '';if (!empty($post_msg_str)) { //sender_id为发送回复消息的uid,即蓝v自己 $sender_id = $post_msg_str['receiver_id']; //receiver_id为接收回复消息的uid,即蓝v的粉丝 $receiver_id = $post_msg_str['sender_id']; //回复text类型的消息示例。 $keyword= $post_msg_str['text']; //图灵api $apikey = *****************; $apiurl = http://www.tuling123.com/openapi/api?key=key&info=info;// 设置报文头, 构建请求报文 $reqinfo = $keyword; $url = str_replace(info, $reqinfo, str_replace(key, $apikey, $apiurl)); $res =file_get_contents($url); $result = json_decode($res); $jiaoyan=$result->{'code'}; switch($jiaoyan){ case 200000: $data_type = text; $wz=$result->{'text'}; $lj=$result->{'url'}; $xx=$wz.$lj; $data = $call_back_sdk->textdata($xx); break; case 302000: //$data_type = text; //$lb=$result->{'list'}; //$xx=var_export ($lb, true); //$data = $call_back_sdk->textdata($xx); $data_type = articles; $length = count($result['list']) > 9 ? 9 :count($result['list']); for($i= 0;$i $result['list'][$i]['article'], 'summary' => $result['list'][$i]['article'], 'image' => $result['list'][$i]['icon'], 'url' => $result['list'][$i]['detailurl'] ); } $data = $call_back_sdk->articledata($articles); break; case 40001: $data_type = text; $xx=(>﹏<)我累了,需要休息一下。; $data = $call_back_sdk->textdata($xx); break; case 40002: $data_type = text; $xx=(>﹏<)我累了,需要休息一下。; $data = $call_back_sdk->textdata($xx); break; case 40003: $data_type = text; $xx=(>﹏<)我累了,需要休息一下。; $data = $call_back_sdk->textdata($xx); break; case 40004: $data_type = text; $xx=(>﹏<)我累了,需要休息一下。; $data = $call_back_sdk->textdata($xx); break; case 40005: $data_type = text; $xx=(>﹏<)我累了,需要休息一下。; $data = $call_back_sdk->textdata($xx); break; case 40006: $data_type = text; $xx=(>﹏<)我累了,需要休息一下。; $data = $call_back_sdk->textdata($xx); break; case 40007: $data_type = text; $xx=(>﹏<)我累了,需要休息一下。; $data = $call_back_sdk->textdata($xx); break; default: $data_type = text; $xx=$result->{'text'}; $data = $call_back_sdk->textdata($xx); } $str_return = $call_back_sdk->buildreplymsg($receiver_id, $sender_id, $data, $data_type);}echo json_encode($str_return);
app_secret = $app_secret; } /** * 获取推送来的的数据 * 必须使用 $globals['http_raw_post_data']方法获取post过来的原始数据来解析. * @return mixed */ public function getpostmsgstr() { return json_decode($globals['http_raw_post_data'], true); } /** * 验证签名 * @param $signature * @param $timestamp * @param $nonce * @return bool */ function checksignature($signature, $timestamp, $nonce) { $tmparr = array($this->app_secret, $timestamp, $nonce); sort($tmparr, sort_string); $tmpstr = sha1(implode($tmparr)); if ($tmpstr == $signature) { return true; } else { return false; } } /** * 组装返回数据 * @param $receiver_id * @param $sender_id * @param $data * @param $type * @return array */ function buildreplymsg($receiver_id, $sender_id, $data, $type) { return $msg = array( sender_id => $sender_id, receiver_id => $receiver_id, type => $type, //data字段需要进行urlencode编码 data => urlencode(json_encode($data)) ); } /** * 生成text类型的回复消息内容 * @param $text * @return array */ function textdata($text) { return $data = array(text => $text); } /** * 生成article类型的回复消息内容 * @param $article * @return array */ function articledata($articles) { return $data = array( 'articles' => $articles ); } /** * 生成position类型的回复消息内容 * @param $longitude * @param $latitude * @return array */ function positiondata($longitude, $latitude) { return $data = array( longitude => $longitude, latitude => $latitude ); }}
