微信公众号开发 同时回复用户多条信息(包括图片和文字)
2016-12-30 16:18
615 查看
相信对于大多数的微信公众号开发的初学者来说,由于微信提供的文档过于简洁,所以这无疑是对我们的巨大考验。
但是,苦心人,天不负。在强烈的“我能行”这一自我暗示下,经过在各大网站上的查询、电子书籍类的读阅,经过无数次的尝试,终于能够实现一次事件同时回复用户多条信息的功能了。额,不说废话了,下面展示我的最终成果。
(公众号是接管过来自己开发的)
首先,创建公众号子菜单的点击事件
然后在网页运行 createmenu方法,微信公众号菜单就创建好了。
这些都是前期的准备。
下面是点击事件的处理
上传媒体素材,这里上传的是图片,所以传的参数则是一张图片的路径
最后,说明一下,我的图片是能都通过网络访问到的,比如(http://www.image.****.com)
但是,当我将这个图片的地址添加到上传媒体素材进行上传的时候,结果是上传失败,也就没有了本来应该返回的 media_id,所以采用了获取路径上传的方法
在这里如果有更好的方法,欢迎留言艾特我,大家相互交流,共同进步!!!
但是,苦心人,天不负。在强烈的“我能行”这一自我暗示下,经过在各大网站上的查询、电子书籍类的读阅,经过无数次的尝试,终于能够实现一次事件同时回复用户多条信息的功能了。额,不说废话了,下面展示我的最终成果。
(公众号是接管过来自己开发的)
首先,创建公众号子菜单的点击事件
const APPID = '你的微信appid'; const SECRET = '你的secret'; const ACCESS_TOKEN_URL = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='; const GET_MENU_URL = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token='; const CREATE_MENU_URL = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=';
/** * createmenu * 创建菜单 * @access public * @param void * @since 1.0 * @return array */ public function actioncreatemenu() { $access_token_url = self::ACCESS_TOKEN_URL.self::APPID.'&secret='.self::SECRET; $wdata =json_decode($this->curl_get($access_token_url),true); $create_menu_url = self::CREATE_MENU_URL.$wdata['access_token']; $menu = json_encode($this->getMenuConfig(),JSON_UNESCAPED_UNICODE); $data = $this->curl_post($create_menu_url,$menu); echo $data;exit; }
private function getMenuConfig() { $data = array(); $data = Array( 'button' => Array( Array( 'name' => '你关心的', 'sub_button' => Array( Array( 'type' => 'click', 'name' => '邀友有礼', 'key' => 'V1001_INVITE_GIFT' ) ) ) ) }
public function curl_post($url, $data) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); 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); $output = curl_exec($ch); if (curl_errno($ch)) { return curl_error($ch); } curl_close($ch); return $output; }
然后在网页运行 createmenu方法,微信公众号菜单就创建好了。
这些都是前期的准备。
下面是点击事件的处理
$this->sendIMG($media_id , $open_id , $token);这行代码中的 media_id ,是通过微信接口上传媒体素材返回的微信独有的标识,上传素材的代码在最后面展示
libxml_disable_entity_loader(true); $postObj = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $event = $postObj->Event; $time = $postObj->CreateTime; $open_id = trim($fromUsername); $MsgType = $postObj->MsgType; file_put_contents('/tmp/test.log', $MsgType, FILE_APPEND); switch ($event) { case 'CLICK': $token = $this->token(); $this->sendText($open_id , $token); $resultIMG = '图片相对于服务器下的路径'; $media_id = $this->add_m($resultIMG); $this->sendIMG($media_id , $open_id , $token); /* $returnTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Image> <MediaId><![CDATA[%s]]></MediaId> </Image> </xml>"; $resultStr = sprintf($returnTpl,$fromUsername , $toUsername , time(), 'image' ,$media_id); echo $resultStr; */ break; }
function sendText($open_id , $token) { $data = '{ "touser" : "'.$open_id.'", "msgtype" : "text", "text" : { "content" : "敬请期待" } }'; $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$token; $result = $this->https_request($url , $data); var_dump($result); } function sendIMG($media_id , $open_id , $token) { $data = '{ "touser" : "'.$open_id.'", "msgtype" : "image", "image" : { "media_id" : "'.$media_id.'" } }'; $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$token; $result = $this->https_request($url , $data); var_dump($result); }
上传媒体素材,这里上传的是图片,所以传的参数则是一张图片的路径
function add_m($img) { $path = '这里填写图片上传的相对路径'.$img ; //$img = 'web/image/qrcode/20161229/10.jpg'; if (class_exists ( '\CURLFile' )) {//关键是判断curlfile,官网推荐php5.5或更高的版本使用curlfile来实例文件 $filedata = array ( 'fieldname' => new \CURLFile ( realpath ( $path ), 'image/jpeg' ) ); } else { $filedata = array ( 'fieldname' => '@' . realpath ( $path ) ); } $url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=".$this->token()."&type=image"; $result = $this->https_request($url , $filedata); $data = json_decode($result); return $data->media_id; }(通过 path ,必须能够在服务器下访问到图片)
最后,说明一下,我的图片是能都通过网络访问到的,比如(http://www.image.****.com)
但是,当我将这个图片的地址添加到上传媒体素材进行上传的时候,结果是上传失败,也就没有了本来应该返回的 media_id,所以采用了获取路径上传的方法
在这里如果有更好的方法,欢迎留言艾特我,大家相互交流,共同进步!!!
相关文章推荐
- IOS开发之UIButton同时设置图片文字以及触发按钮时文字图片的切换
- IOS开发之UIButton同时设置图片文字以及出发按钮时文字图片的切换
- 微信公众号开发(一、接收用户消息自动回复)
- 微信公众号开发——网页授权 (页面分享 、获取用户基本信息)
- 微信硬件平台设备直连全讲解(4)接收和回复微信客户端的文字、图片等信息
- 使用mmit进行移动开发,如何在一行同时显示图片和文字.
- 微信公众号开发:用户授权获取用户信息
- 微信公众号开发获取用户信息
- 微信公众号的开发之 回复用户消息和事件响应(四)
- 微信公众号开发系列-网页授权获取用户基本信息
- 微信公众号开发系列-网页授权获取用户基本信息
- QT 自定义Qcombobox样式,下拉项同时包括图片和文字
- C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一)
- 微信公众号开发--获取用户信息中文乱码的解决方案
- 微信公众号PHP开发怎么获取用户的基本信息(姓名、性别、年龄等)
- 微信开发(三)获取用户信息,同时整理代码
- 微信公众号开发系列-网页授权获取用户基本信息
- 本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能
- yershop商城系统Thinkphp开发(四)——微信篇1:微信公众号静默授权注册及获取用户信息