微信公众号开发

1.外网映射工具

 

微信公众号开发

2微信公众平台官网配置测试账号

微信公众号开发

微信公众号开发

 

 

微信公众号开发

微信公众号开发

 

 

微信公众号开发

<?php

$appid = "wxa68505e550c7a962";

$appsecret = "8267cff604d1090be4e1113137edde86";

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";

 

$output = https_request($url);

$jsoninfo = json_decode($output, true);

 

$access_token = $jsoninfo["access_token"];


 

$jsonmenu = '{

"button":[

{

"name":"天气预报",

"sub_button":[

{

"type":"view",

"name":"我只在乎你",

"key":"邓丽君",

"url":"https://www.xiami.com/song/99158?_uxid=614FAA47F14F6550C44F958E9DEC4F37"

},

{

"type":"view",

"name":"本地天气",

"url":"http://m.hao123.com/a/tianqi"

}]

 

},

{

"name":"英语单词",

"sub_button":[

{

"type":"click",

"name":"四级词汇",

"key":"cent4"

},

{

"type":"click",

"name":"六级词汇",

"key":"cent6"

},

{

"type":"click",

"name":"专业词汇",

"key":"more words"

}]

 

}]

}';


 

$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;

$result = https_request($url, $jsonmenu);

var_dump($result);

 

function https_request($url,$data = null){

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

if (!empty($data)){

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

}

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$output = curl_exec($curl);

curl_close($curl);

return $output;

}

 

?>

关注测试号 显示 相应菜单

微信公众号开发

 

微信公众号开发

 

微信公众号开发

 

关键词回复

微信公众号开发

index.php文件

<?php

/*

方倍工作室

http://www.fangbei.org/

CopyRight 2011-2017 All Rights Reserved

*/

 

header('Content-type:text');

define("TOKEN", "weixin");


 

$wechatObj = new wechatCallbackapiTest();

if (!isset($_GET['echostr'])) {

    $wechatObj->responseMsg();

}else{

// $wechatObj->valid();

}

 

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)){

$this->logger("R ".$postStr);

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

$RX_TYPE = trim($postObj->MsgType);

 

switch ($RX_TYPE)

{

case "event":

$result = $this->receiveEvent($postObj);

break;

case "text":

$result = $this->receiveText($postObj);

break;

}

$this->logger("T ".$result);

echo $result;

}else {

echo "";

exit;

}

}

private function receiveEvent($object)

{

$content = "";

switch ($object->Event)

{

case "subscribe":

$content = "我们一起学猫叫,一起喵喵~~";

break;

case "unsubscribe":

$content = "取消关注";

break;

}

$result = $this->transmitText($object, $content);

return $result;

}

//接收文本消息

private function receiveText($object)

{

$keyword = trim($object->Content);

if($keyword=='?'||$keyword=='?'||$keyword='你好'){

$content='你好';

}else{

$content = date("Y-m-d H:i:s",time())."\n你好,我是芝麻妈妈";

}

 

if(is_array($content)){

if (isset($content[0]['PicUrl'])){

$result = $this->transmitNews($object, $content);

}else if (isset($content['MusicUrl'])){

$result = $this->transmitMusic($object, $content);

}

}else{

$result = $this->transmitText($object, $content);

}

 

return $result;

}

 

private function transmitText($object, $content)

{

$textTpl = "<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[text]]></MsgType>

<Content><![CDATA[%s]]></Content>

</xml>";

$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);

return $result;

}

 

private function transmitNews($object, $arr_item)

{

if(!is_array($arr_item))

return;

 

$itemTpl = " <item>

<Title><![CDATA[%s]]></Title>

<Description><![CDATA[%s]]></Description>

<PicUrl><![CDATA[%s]]></PicUrl>

<Url><![CDATA[%s]]></Url>

</item>

";

$item_str = "";

foreach ($arr_item as $item)

$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);

 

$newsTpl = "<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[news]]></MsgType>

<Content><![CDATA[]]></Content>

<ArticleCount>%s</ArticleCount>

<Articles>

$item_str</Articles>

</xml>";

 

$result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item));

return $result;

}

 

private function transmitMusic($object, $musicArray)

{

$itemTpl = "<Music>

<Title><![CDATA[%s]]></Title>

<Description><![CDATA[%s]]></Description>

<MusicUrl><![CDATA[%s]]></MusicUrl>

<HQMusicUrl><![CDATA[%s]]></HQMusicUrl>

</Music>";

 

$item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);

 

$textTpl = "<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[music]]></MsgType>

$item_str

</xml>";

 

$result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());

return $result;

}

private function logger($log_content)

{

if(isset($_SERVER['HTTP_APPNAME'])){ //SAE

sae_set_display_errors(false);

sae_debug($log_content);

sae_set_display_errors(true);

}else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL

$max_size = 10000;

$log_filename = "log.xml";

if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}

file_put_contents($log_filename, date('H:i:s')." ".$log_content."\r\n", FILE_APPEND);

}

}

}


 

?>