php微信_分享一个完整的微信开发php代码

这篇文章主要为大家分享一个完整的微信开发php代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了微信开发php代码,供大家参考,具体内容如下

//封装成一个微信接口类

class WeixinApi

{

private $appid;

private $appsecret;

//构造方法 初始化赋值

public function construct($appid="",$appsecret="")

{

$this->appid = $appid;

$this->appsecret = $appsecret;

}

//验证服务器地址有效性

public function valid()

{

if($this->checkSignature())

{

$echostr = $_GET['echostr'];//随机的字符串

return $echostr;

}

else

{

return "Error";

}

}

//检查签名

private function checkSignature()

{

//一、接收微信服务器GET方式提交过来的4个参数数据

$signature = $_GET['signature'];//微信加密签名

$timestamp = $_GET['timestamp'];//时间戳

$nonce = $_GET['nonce'];//随机数

//二、加密/校验过程

// 1. 将token、timestamp、nonce三个参数进行字典序排序;

// bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) 对数组排序

$tmpArr = array(TOKEN,$timestamp,$nonce);//将上面三个参数放到一个数组里面

sort($tmpArr,SORT_STRING);

// 2. 将三个参数字符串拼接成一个字符串进行sha1加密;

$tmpStr = implode($tmpArr); //将数组转化成字符串

$signatureStr = sha1($tmpStr);

// 3. 开发者获得加密后的字符串与signature对比。

if($signatureStr == $signature)

{

return true;

}

else

{

return false;

}

}

//响应消息

public function responseMsg()

{

//接收微信服务器发送POST请求到开发者服务器,携带的XML数据包

$postData = $GLOBALS['HTTP_RAW_POST_DATA'];

//处理xml数据包

$xmlObj = simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);

if(!$xmlObj)

{

echo "";

exit;

}

//获取接收消息中的参数内容

$toUserName = $xmlObj->ToUserName;//开发者微信号

$fromUserName = $xmlObj->FromUserName;//发送方的微信号(openid)

$msgType = $xmlObj->MsgType;//消息类型

switch ($msgType) {

//接收文本消息

case 'text':

//获取文本消息的关键字

$keyword = $this->receiveText($xmlObj);

//进行关键字回复

switch($keyword)

{

case "w001":

case "W001":

return $this->replyText($xmlObj,"Hi~你好");

break;

case "w002":

case "W002":

return $this->replyText($xmlObj,"Hi~尴尬了");

break;

case "笑话":

$key = "dee9ebc68fd5a61f67286063932afe56";

return $this->replyNews($xmlObj,$this->joke_text($key));

break;

default:

$key = "dee9ebc68fd5a61f67286063932afe56";

return $this->replyNews($xmlObj,$this->joke_text($key));

break;

}

break;

//接收图片消息

case 'image':

return $this->receiveImage($xmlObj);

break;

//接收事件推送

case 'event':

return $this->receiveEvent($xmlObj);

break;

}

}

//接收事件推送

public function receiveEvent($obj)

{

//接收事件类型

$event = $obj->Event;

switch ($event)

{

//关注事件

case 'subscribe':

//下发欢迎消息

$newsArr = array(

array(

"Title"=>"做有价值的头条资讯!",

"Description"=>"把握价值头条资讯,日常更加有谈资呢!",

"PicUrl"=>"http://jober.applinzi.com/news/img/news.png",

"Url"=>"http://jober.applinzi.com/news/index.php"

)

);

//回复图文消息

return $this->replyNews($obj,$newsArr);

break;

//取消关注事件

case 'unsubscribe':

//账号的解绑操作等等

break;

//自定义菜单推送CLICK事件

case 'CLICK':

$eventKey = $obj->EventKey;//获取事件KEY值,与自定义菜单接口中KEY值对应

switch ($eventKey)

{

case 'old':

$weixinArr = $this->history("da675ebc6a0d72920dca3f676122a693");

$weixinArr = array_slice($weixinArr, 0,5);

$newsArr = array();

foreach ($weixinArr as $item)

{

$newsArr = array(array(

"Title" => $item['Description'],

"Description" => $item['Title'],

"PicUrl" => "http://1.jober.applinzi.com/news/img/2.jpg",

"Url" => "http://www.todayonhistory.com/"

));

}

return $this->replyNews($obj,$newsArr);

break;

}

break;

}

}

//接收文本消息

public function receiveText($obj)

{

$content = trim($obj->Content);//文本消息的内容

return $content;

}

//接收图片消息

public function receiveImage($obj)

{

$picUrl = $obj->PicUrl;//图片的链接

$mediaId = $obj->MediaId;//图片消息媒体id

return $this->replyImage($obj,$mediaId);

}

//回复图片消息

public function replyImage($obj,$mediaId)

{

$replyXml = "

%s

";

return sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$mediaId);

}

//回复文本消息

public function replyText($obj,$content)

{

$replyXml = "

%s

";

return sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time(),$content);

}

//回复图文消息

public function replyNews($obj,$newsArr)

{

//判断是否为数组类型

if(!is_array($newsArr))

{

return;

}

// 判断数组是否为空数组

if(!$newsArr)

{

return;

}

$itemStr = "";

//定义item模板

$itemXml = "

";

foreach($newsArr as $item)

{

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

}

$replyXml = "

%s

".count($newsArr)."

".$itemStr."

";

return sprintf($replyXml,$obj->FromUserName,$obj->ToUserName,time());

}

//封装https请求(GET和POST)

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

{

//1、初始化curl

$ch = curl_init();

//2、设置传输选项

curl_setopt($ch, CURLOPT_URL, $url);//请求的url地址

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//将请求的结果以文件流的形式返回

if(!empty($data))

{

curl_setopt($ch,CURLOPT_POST,1);//请求POST方式

curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//POST提交的内容

}

//3、执行请求并处理结果

$outopt = curl_exec($ch);

//把json数据转化成数组

$outoptArr = json_decode($outopt,TRUE);

//4、关闭curl

curl_close($ch);

//如果返回的结果$outopt是json数据,则需要判断一下

if(is_array($outoptArr))

{

return $outoptArr;

}

else

{

return $outopt;

}

}

public function juhe_weixin($key,$type)

{

$url ="http://v.juhe.cn/toutiao/index?type={$type}&key={$key}";

$result = $this->https_request($url);

if($result['error_code'] == 0)

{

return $result['result']['data'];

}

else

{

return array();

}

}

//聚合数据-获取最新趣图

public function joke_text($key,$pagesize=10)

{

$url = "http://japi.juhe.cn/joke/img/text.from?key={$key}&pagesize={$pagesize}";

$jokeArr = $this->https_request($url);

$resultArr = $jokeArr['result']['data'];

// $content = $resultArr[0]['content'];

// return $this->replyText($xmlObj,$content);

$newsArr = array();

//判断笑话接口是否获取数据

if($jokeArr['error_code'] == 0)

{

foreach($resultArr as $item)

{

$newsArr[] = array(

"Title"=>$item['content'],

"Description"=>$item['updatetime'],

"PicUrl"=>$item['url'],

"Url"=>$item['url']

);

}

}

return $newsArr;

}

//聚合数据-获取历史上的今天

public function history($key)

{

$m = idate('m');

$d = idate('d');

$day = "{$m}/{$d}";

$url = "http://v.juhe.cn/todayOnhistory/queryEvent.php?key={$key}&date={$day}";

$historyArr = $this->https_request($url);

$resultArr = $historyArr['result'];

// $content = $resultArr['title'];

// return $this->replyText($xmlObj,$content);

$newsArr = array();

//判断接口是否获取数据

if($jokeArr['error_code'] == 0)

{

foreach($resultArr as $item)

{

$newsArr[] = array(

"Title"=>$item['title'],

"Description"=>$item['date'],

"PicUrl"=>"",

"Url"=>""

);

}

}

return $newsArr;

}

public function fund($key)

{

$url = "http://japi.juhe.cn/jingzhi/query.from?key={$key}";

$fundArr = $this->https_request($url);

$resultArr = $fundArr['result'];

// $content = $resultArr['title'];

// return $this->replyText($xmlObj,$content);

$newsArr = array();

//判断接口是否获取数据

if($jokeArr['error_code'] == 0)

{

foreach($resultArr as $item)

{

$newsArr[] = array(

"Title"=>$item['day'],

"Description"=>$item['title'],

"PicUrl"=>"",

"Url"=>"http://www.baidu.com"

);

}

}

return $newsArr;

}

/**

*获取基础支持里面的接口调用凭证access_token并缓存access_token

*@return access_token string 接口凭证

**/

public function getAccessToken()

{

//获取memcache缓存的access_token

$access_token = $this->_memcache_get("access_token");

//如果缓存的access_token失效

if(!$access_token)

{

//如果失效调用获取接口凭证来获取access_token

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

$outoptArr = $this->https_request($url);

if(!isset($outoptArr['errcode']))

{

//memcache缓存access_token

$this->_memcache_set("access_token",$outoptArr['access_token'],7000);

return $outoptArr['access_token'];

}

}

return $access_token;

}

//初始化memcache

private function _memcache_init()

{

$mmc = new Memcache;

$ret = $mmc -> connect();

if ($ret == false)

{

return;

}

return $mmc;

}

//设置memcache

private function _memcache_set($key,$value,$time=0)

{

$mmc = $this->_memcache_init();

$mmc -> set($key,$value,0,$time);

}

//获取memcahce

private function _memcache_get($key)

{

$mmc = $this->_memcache_init();

return $mmc -> get($key);

}

//自定义菜单创建

public function menu_create($data)

{

$access_token = $this->getAccessToken();

//自定义菜单创建接口地址

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

return $this->https_request($url,$data);

}

//自定义菜单删除

public function menu_delete()

{

$access_token = $this->getAccessToken();

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

return $this->https_request($url);

}

}

?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值