【php开发】实现微信公众号图文消息回复与access_token(代码示例)

本篇文章主要讲述的是PHP实现微信公众号图文消息回复与access_token,具有一定的参考价值,感兴趣的朋友可以了解一下。

 //代码如下<?phpclass IndexAction extends Action {public function __construct(){}public function index(){//获得参数 signature nonce token timestamp echostr$nonce     = $_GET['nonce'];$token     = 'imooc';$timestamp = $_GET['timestamp'];$echostr   = $_GET['echostr'];$signature = $_GET['signature'];//形成数组,然后按字典序排序$array = array();$array = array($nonce, $timestamp, $token);sort($array);//拼接成字符串,sha1加密 ,然后与signature进行校验$str = sha1( implode( $array ) );if( $str  == $signature && $echostr ){//第一次接入weixin api接口的时候echo  $echostr;exit;}else{$this->reponseMsg();}}// 接收事件推送并回复public function reponseMsg(){//1.获取到微信推送过来post数据(xml格式)$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//2.处理消息类型,并设置回复类型和内容/*<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[FromUser]]></FromUserName><CreateTime>123456789</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[subscribe]]></Event></xml>*/$postObj = simplexml_load_string( $postArr );//$postObj->ToUserName = '';//$postObj->FromUserName = '';//$postObj->CreateTime = '';//$postObj->MsgType = '';//$postObj->Event = '';// gh_e79a177814ed//判断该数据包是否是订阅的事件推送if( strtolower( $postObj->MsgType) == 'event'){//如果是关注 subscribe 事件if( strtolower($postObj->Event == 'subscribe') ){//回复用户消息(纯文本格式)	$toUser   = $postObj->FromUserName;$fromUser = $postObj->ToUserName;$time     = time();$msgType  =  'text';$content  = '欢迎关注我们的微信公众账号'.$postObj->FromUserName.'-'.$postObj->ToUserName;$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);echo $info;/*<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好]]></Content></xml>*/}}//当微信用户发送imooc,公众账号回复‘imooc is very good'/*<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好]]></Content></xml>*//*if(strtolower($postObj->MsgType) == 'text'){switch( trim($postObj->Content) ){case 1:$content = '您输入的数字是1';break;case 2:$content = '您输入的数字是2';break;case 3:$content = '您输入的数字是3';break;case 4:$content = "<a href='http://www.imooc.com'>慕课</a>";break;case '英文':$content = 'imooc is ok';break;}	$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";//注意模板中的中括号 不能少 也不能多$fromUser = $postObj->ToUserName;$toUser   = $postObj->FromUserName; $time     = time();// $content  = '18723180099';$msgType  = 'text';echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content);}}*///用户发送tuwen1关键字的时候,回复一个单图文if( strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='tuwen2' ){$toUser = $postObj->FromUserName;$fromUser = $postObj->ToUserName;$arr = array(array('title'=>'imooc','description'=>"imooc is very cool",'picUrl'=>'http://www.imooc.com/static/img/common/logo.png','url'=>'http://www.imooc.com',),array('title'=>'hao123','description'=>"hao123 is very cool",'picUrl'=>'https://www.baidu.com/img/bdlogo.png','url'=>'http://www.hao123.com',),array('title'=>'qq','description'=>"qq is very cool",'picUrl'=>'http://www.imooc.com/static/img/common/logo.png','url'=>'http://www.qq.com',),);$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><ArticleCount>".count($arr)."</ArticleCount><Articles>";foreach($arr as $k=>$v){$template .="<item><Title><![CDATA[".$v['title']."]]></Title> <Description><![CDATA[".$v['description']."]]></Description><PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl><Url><![CDATA[".$v['url']."]]></Url></item>";}$template .="</Articles></xml> ";echo sprintf($template, $toUser, $fromUser, time(), 'news');//注意:进行多图文发送时,子图文个数不能超过10个}else{switch( trim($postObj->Content) ){case 1:$content = '您输入的数字是1';break;case 2:$content = '您输入的数字是2';break;case 3:$content = '您输入的数字是3';break;case 4:$content = "<a href='http://www.imooc.com'>慕课</a>";break;case '英文':$content = 'imooc is ok';break;}	$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";//注意模板中的中括号 不能少 也不能多$fromUser = $postObj->ToUserName;$toUser   = $postObj->FromUserName; $time     = time();// $content  = '18723180099';$msgType  = 'text';echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content);}//if end}//reponseMsg endfunction http_curl(){//获取imooc//1.初始化curl$ch = curl_init();$url = 'http://www.baidu.com';//2.设置curl的参数curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//3.采集$output = curl_exec($ch);//4.关闭curl_close($ch);var_dump($output);}function getWxAccessToken(){//1.请求url地址$appid = 'wx08d5c2cb632bb5e4';$appsecret =  '06d3444fb9abd8d00314eb4a38ad61a8';$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;//2初始化$ch = curl_init();//3.设置参数curl_setopt($ch , CURLOPT_URL, $url);curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);//4.调用接口 $res = curl_exec($ch);//5.关闭curlcurl_close( $ch );if( curl_errno($ch) ){var_dump( curl_error($ch) );}$arr = json_decode($res, true);var_dump( $arr );}function getWxServerIp(){$accessToken = "6vOlKOh7r5uWk_ZPCl3DS36NEK93VIH9Q9tacreuxJ5WzcVc235w_9zONy75NoO11gC9P0o4FBVxwvDiEtsdX6ZRFR0Lfs_ymkb8Bf6kRfo";$url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$accessToken;$ch = curl_init();curl_setopt($ch, CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);$res = curl_exec($ch);curl_close($ch);if(curl_errno($ch)){var_dump(curl_error($ch));}$arr = json_decode($res,true);echo "<pre>";var_dump( $arr );echo "</pre>";}}//class end

【PHP】微信支付JsApi 40163错误

本文将和大家分享一下微信支付JsApi 40163错误以及解决方案代码。
错误:
未定义数组索引:openid 。
经过检查发现是 :微信支付授权获取 openId {“errcode”:40163,“errmsg”:“code been used”,}
原因为:微信支付code 只能使用一次,当第二次重复使用时就会出现此错误。
解决相关参考:https://www.e-learn.cn/content/php/1102683

php实现微信企业付款到零钱

我们知道微信支付企业付款到零钱功能应用广泛,比如微信红包奖励,业务结算等。通过企业向个人付款,付款资金将直接进…

机器人微信消息推送实现方案

最近有不少发明者量化的用户总是提问,如何可以随心所欲的向微信群推送消息,比如自己的策略发出了交易信号,但是又不想自动化交易,希望让机器人提供的信号作为参考发到微信群中。

如何设计一个自己的类微信系统?怎么考虑其扩展性?

作者:xiaojiaqi 来源:https://github.com/xiaojiaqi/fakewechat/wiki/Design# 前言正如你们所知的那样,微信是一个非常成功的在线服务系统,由几万台服务器组成的系统为几亿人提供着稳定的业务服务。

超详细教程!Golang实现一个微信抽奖小程序后台

之前在学区块链,然后看到很多区块链项目都是基于golang在开发,包括以太坊的官方go-ethereum。

企业微信开发简明教程(一):用户授权

声明:本文为原创文章,转发请注明来处。如有错误之处,欢迎批评指正。一、前言本教程根据应用场景进行划分,重点阐述企业微信在不同应用场景下的开发思路,同时讲解使用的接口及细节。进行企业微信应用开发之前需要准备:1.

支持企业微信、钉钉登录和Windows会话监控,JumpServer v2.10发布

5月24日,JumpServer开源堡垒机正式发布v2.10.0版本。在该版本中,JumpServer支持用户通过企业微信、钉钉进行登录,满足了更多企业用户的实际需求。这一版本的JumpServer还新增了Lion图形化连接组件,该组件主要是使用Golang和Vue.

go语言实现微信支付宝QQ支付简单容易操作

一、安装$ go get github.com/iGoogle-ink/gopay查看 GoPay 版本版本更新记录import ( “fmt” “github.com/iGoogle-ink/gopay”)func main() { fmt.

详解Java中的微信支付(1):API V3版本签名

.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body