The example in this article describes the method of using PHP to develop SDK (demo) extensions based on the WeChat public platform. Share it with everyone for your reference. The specific analysis is as follows:
This extension is based on the official WeChat public platform SDK. It is simply encapsulated here and implements some basic functions (such as weather query, translation, automatic chat robot, custom menu interface) for learning purposes only. The code is for learning purposes only. As follows:
define("TOKEN", "xingans");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
//Signature verification public interface
Public function valid()
{
$echoStr = $_GET["echostr"];
If($this->checkSignature()){
echo $echoStr;
exit;
}
}
//Main entrance processing function
Public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
If (!emptyempty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$msgType=trim($postObj->MsgType);
switch($msgType){
case 'text':
$resultStr=$this->handleText($postObj);
break;
case 'event':
$resultStr=$this->handleEvent($postObj);
break;
default:
$resultStr=$this->handleDefault($postObj);
break;
}
echo $resultStr;
}else {
echo "Error";
exit;
}
}
//Processing text messages
private function handleText($obj){
$keyword=trim($obj->Content);
If(preg_match('/weather/',$keyword)){
$contentStr=$this->handleWeather($obj);
}elseif(preg_match('/translation/',$keyword)){
$contentStr=$this->handleTranslation($obj);
}else{
$contentStr=$this->handleChat($obj);
}
return $this->handleStr($obj,$contentStr);
}
//Handling weather
private function handleWeather($obj){
$keyword=mb_substr($obj->Content,-2,2,'utf-8');
$zone=mb_substr($obj->Content,0,-2,'utf-8');
If($keyword=='weather' && !emptyempty($zone)){
$zoneArr=json_decode(file_get_contents('http://api.k780.com:88/?app=weather.city&format=json'),true);
$zoneArr=$zoneArr['result'];
$cityId='';
foreach($zoneArr as $value){
if($zone==$value['citynm']){
$cityId=$value['weaid'];
break;
}
}
if(!emptyempty($cityId)){
$data=file_get_contents("http://api.k780.com:88/?app=weather.today&weaid=$cityId&appkey=10638&sign=3736578f099375665f9f141a6326b757&format=json");
$data=json_decode($data);
$contentStr="今天是:".$data->result->days.",".$data->result-> week.",".$data->result->citynm."天气:".$data->result->weather."n温度:".$data->result->temperature.",
".$data->result->wind_direction.",".$data->result->wind_power.", 最低温度:".$data->result->temp_low.",最高温度:".$data->result->temp_high;
}else{
$contentStr='找不到输入的城市!';
}
}else{
$contentStr='输入的查询格式不正确!';
}
return $contentStr;
}
//处理翻译
private function handleTranslation($obj){
$keyword=mb_substr($obj->Content,0,2,'utf-8');
$words=mb_substr($obj->Content,2,220,'utf-8');
if($keyword=='翻译' && !emptyempty($words)){
$data=file_get_contents('http://fanyi.youdao.com/openapi.do?keyfrom=zfsblog&key=364295447&type=data&doctype=json&version=1.1&q='.urlencode($words));
$data=json_decode($data,true);
switch($data['errorCode']){
case '0':
$contentStr=$data['translation'][0];
break;
case '20':
$contentStr='要翻译的文本过长';
break;
case '30':
$contentStr='无法进行有效的翻译';
break;
case '40':
$contentStr='Unsupported language type';
break;
case '50':
$contentStr='Invalid key';
break;
default:
$contentStr='Error';
break;
}
}else{
$contentStr='The input translation format is incorrect!';
}
return $contentStr;
}
//Process chat information
private function handleChat($obj){
$keywords=$obj->Content;
$curlPost=array("chat"=>$keywords);
$ch = curl_init();//Initialize curl
curl_setopt($ch, CURLOPT_URL,'http://www.xiaojo.com/bot/chata.php');//Catch the specified web page
curl_setopt($ch, CURLOPT_HEADER, 0);//Set header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//requires the result to be a string and output to the screen
curl_setopt($ch, CURLOPT_POST, 1);//post submission method
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);//Run curl
curl_close($ch);
If(!emptyempty($data)){
$contentStr=$data;
}else{
$ran=rand(1,5);
switch($ran){
case 1:
$contentStr= "Xiaojiu is tired today, I will chat with you tomorrow";
break;
case 2:
$contentStr= "Xiaojiu is sleeping~~";
break;
case 3:
$ Contentstr = "Huhuo ~~ Huhu ~~";
break;
case 4:
$contentStr= "You talk a lot, I won’t talk to you anymore";
break;
case 5:
break;
}
}
return $contentStr;
}
//创建自定义菜单
public function createMenu($data,$token){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//查询自定义菜单
function getMenu($token){
$url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=$token";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true) ; //获取数据返回
curl_setopt($ch, CURLOPT_BINARYTRANSFER,true) ; //在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
return $output = curl_exec($ch);
}
//删除自定义菜单
public function deleteMenu($token){
$url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//Process event messages
private function handleEvent($obj){
$content='';
switch($obj->Event){
case 'subscribe':
break;
case 'unsubscribe':
$content.="Thank you for your continued attention to this official account, goodbye!";
break;
default:
$content.="";
break;
}
return $this->handleStr($obj,$content);
}
//Processing reply message string
private function handleStr($obj,$content='',$flag=0){
$textTpl = "";
return sprintf($textTpl, $obj->FromUserName, $obj->ToUserName, time(), $content,$flag);
}
//Signature verification function
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;
}
}
}
I hope this article will be helpful to everyone’s PHP programming design.