Laravel学习记录--微信开发(day2)

回复音乐信息

参数 是否必须 说明
ToUserName 接收方帐号(收-到的OpenID)
FromUserName 开发者微信号
CreateTime 消息创建时间 (整型)
MsgType 消息类型,音乐为music
Title 音乐标题
Description 音乐描述
MusicURL 音乐链接
HQMusicUrl 高质量音乐链接,WIFI环境优先使用该链接播放音乐
ThumbMediaId 缩略图的媒体id,通过素材管理中的接口上传多媒体文件,得到的id
 $musicModel = "<xml>
                 <ToUserName><![CDATA[%s]]></ToUserName>
                 <FromUserName><![CDATA[%s]]></FromUserName>
                 <CreateTime>%s</CreateTime>
                 <MsgType><![CDATA[%s]]></MsgType>
                 <Music>
                 <Title><![CDATA[%s]]></Title>
                 <Description><![CDATA[%s]]></Description>
                 <MusicUrl><![CDATA[%s]]></MusicUrl>
                 <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
                 </Music>
                 </xml>";
 $toUserName = $txtObj->FromUserName;//接受方等于发送此消息的用户名
 $fromUserName = $txtObj->ToUserName;//发送方等用户发送消息的ToUserName
 $time = time(); 
 

```php
if($txtObj->Content == 'Music'){
		    $msgType = 'music';
		    $title = '告白气球';
		    $descript = '用一首歌的时间想你';
		    $musicUrl = $hqUrl = 'http://590c1c9e.nat123.cc/gbqq.mp3';

		    $sendText = sprintf($musicModel,$toUserName,$fromUserName,$time,$msgType,$title,$descript,$musicUrl,$hqUrl);
		    echo $sendText;
	    }

在这里插入图片描述

回复图文消息

参数 是否必须 说明
ToUserName 接收方帐号(收到的OpenID)
FromUserName 开发者微信号
CreateTime 消息创建时间 (整型)
MsgType 消息类型,图文为news
ArticleCount 图文消息个数;当用户发送文本、图片、视频、图文、地理位置这五种消息时,开发者只能回复1条图文消息;其余场景最多可回复8条图文消息
Articles 图文消息信息,注意,如果图文数超过限制,则将只发限制内的条数
Title 图文消息标题
Description 图文消息描述
PicUrl 图片链接,支持JPG、PNG格式,较好的效果为大图360200,小图200200
Url 点击图文消息跳转链接
 
    $articleModel="<xml>
                   <ToUserName><![CDATA[%s]]></ToUserName>
                   <FromUserName><![CDATA[%s]]></FromUserName>
                   <CreateTime>%s</CreateTime>
                   <MsgType><![CDATA[%s]]></MsgType>
                   <ArticleCount>1</ArticleCount>
                   <Articles>
                   <item>
                   <Title><![CDATA[%s]]></Title>
                   <Description><![CDATA[%s]]></Description>
                   <PicUrl><![CDATA[%s]]></PicUrl>
                   <Url><![CDATA[%s]]></Url>
                  </item>
                  </Articles>
                  </xml>";
$toUserName = $txtObj->FromUserName;//接受方等于发送此消息的用户名
$fromUserName = $txtObj->ToUserName;//发送方等用户发送消息的ToUserName
$time = time();
if($txtObj->Content=='文章')){
			$msgType = 'news' ;
			$title = '“小三”插足了我的家庭,破坏了我的婚姻,我却不恨她';
			$dec = '郑梅因为前夫出轨和他离了婚,可是郑梅从发现前夫有小三到离婚,她的心里对小三始终恨不起来,反而是同情可怜她,甚至还有点感激她。郑梅的朋友都想不通她竟然能如此开明,还说她太傻了,怎么可以同情坏女人。';
			$imgUrl = 'https://590c1c9e.nat123.cc/2.jpg';

		    $sendText = sprintf($articleModel,$toUserName,$fromUserName,$time,$msgType,$title,$des,$imgUrl,$url,$title2,$descript2,$imgUrl2,$url2);
		    echo $sendText;
		}

在这里插入图片描述
自定义菜单

  1. 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
  2. 一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“…”代替。
  3. 创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
    自定义菜单接口可实现多种类型按钮
  • click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
  • view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。
  • scancode_push:扫码推事件用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。
  • scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。
  • pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。
  • pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。
  • pic_weixin:弹出微信相册发图器用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。
  • location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
  • media_id:下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
  • view_limited:跳转图文消息URL用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。​
    请注意,3到8的所有事件,仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送。9和10,是专门给第三方平台旗下未微信认证(具体而言,是资质认证未通过)的订阅号准备的事件类型,它们是没有事件推送的,能力相对受限,其他类型的公众号不必使用。

接口调用请求说明
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
这里需要ACCESS_TOKEN才能调用接口

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

Access_token的获取方法
接口调用
https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数说明

参数 是否必须 说明
grant_type 获取access_token填写client_credential
appid 第三方用户唯一凭证
secret 第三方用户唯一凭证密钥,即appsecret

返回值
正常情况返回json格式的数据

{"access_token":"ACCESS_TOKEN","expires_in":7200}

access_token:获取的ACCESS_TOKEN
expires_in:ACCESS_TOKEN的有效期(秒)

错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):

{"errcode":40013,"errmsg":"invalid appid"}

返回码说明

返回码 说明
-1 系统繁忙,此时请开发者稍候再试
0 请求成功
40001 AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性
40002 请确保grant_type字段值为client_credential
40164 调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。)

这里我们通过开发调试工具获取access_token
在这里插入图片描述
获取到access_token后我们就可以创建自定义菜单了,调用https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
接口或者使用开发工具调用
代码方式

$acUrl ='https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$ac;
	$curl = curl_init();
    //设置参数
    $data = '{
       "button":[
        {
        	
        	"name":"志愿四川",
        	"sub_button":[
                {
                	"type":"view",
                	"name":"青春汇",
                	"url":"https://www.baidu.com"
                },
                {

                	"type":"view",
                	"name":"志愿四川",
                	"url":"https://www.baidu.com"
                }
        	]
        },
        {
             "type":"view",
             "name":"青创商城",
             "url":"https://www.baidu.com"

        },
        {
        	"type":"click",
        	"name":"今日歌曲",
        	"key":"music"
        }
       ]

    }'
    curl_setopt($curl, CURLOPT_URL,$acUrl);
    curl_setopt($curl, CURLOPT_HEADER,0);//不返回header头
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//数据返回而不是输出
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);//使用ssl证书加密
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//post提交
    //发送请求信息
    $data = curl_exec($curl);
    //关闭请求资源
    curl_close($curl);
    $arr = json_decode($data,true);//将返回的数据转换为php数组
    var_dump($arr);

开发者调试工具方式
在这里插入图片描述

自定义菜单参数说明

参数 是否必须 说明
button 一级菜单数组,个数应为1~3个
sub_button 二级菜单数组,个数应为1~5个
type 菜单的响应动作类型,view表示网页类型,click表示点击类型,miniprogram表示小程序类型
name 菜单标题,不超过16个字节,子菜单不超过60个字节
key click等点击类型必须 菜单KEY值,用于消息接口推送,不超过128字节
url view、miniprogram类型必须 网页 链接,用户点击菜单可打开链接,不超过1024字节。 type为miniprogram时,不支持小程序的老版本客户端将打开本url。
media_id media_id类型和view_limited类型必须 调用新增永久素材接口返回的合法media_id
appid miniprogram类型必须 小程序的appid(仅认证公众号可配置)
pagepath miniprogram类型必须 小程序的页面路径

创建好菜单后我们就可以给菜单复于相应行为,这里以“今日歌曲”为例
参考开发文档 “自定义菜单”----“事件推送”

用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报

$txt = file_get_contents('php://input');//获取post数据
$txtObj = simplexml_load_string($txt,'SimpleXMLElement',LIBXML_NOCDATA);//XML数据转换为对象
$toUserName = $txtObj->FromUserName;//接受方等于发送此消息的用户名
 $fromUserName = $txtObj->ToUserName;//发送方等用户发送消息的ToUserName
 $time = time();
 $musicModel = "<xml>
                 <ToUserName><![CDATA[%s]]></ToUserName>
                 <FromUserName><![CDATA[%s]]></FromUserName>
                 <CreateTime>%s</CreateTime>
                 <MsgType><![CDATA[%s]]></MsgType>
                 <Music>
                 <Title><![CDATA[%s]]></Title>
                 <Description><![CDATA[%s]]></Description>
                 <MusicUrl><![CDATA[%s]]></MusicUrl>
                 <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
                 </Music>
                 </xml>";
if($txtObj->MsgType == 'event'){
		//触发事件
		if($txtObj->Event == 'CLICK' && $txtObj->EventKey=='music'){
			//点击事件并且由“今日歌曲触发”
			$msgType = 'music';
		    $title = '告白气球';
		    $descript = '用一首歌的时间想你';
		    $musicUrl = $hqUrl = 'http://590c1c9e.nat123.cc/gbqq.mp3';
		    $sendText = sprintf($musicModel,$toUserName,$fromUserName,$time,$msgType,$title,$descript,$musicUrl,$hqUrl);
		    echo $sendText;
		

		}
	}

在这里插入图片描述

点击事件被触发
返回给开发者xml数据包

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[EVENTKEY]]></EventKey>
</xml>

参数说明

参数 描述
ToUserName 开发者 微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 消息类型,event
Event 事件类型,CLICK
EventKey 事件KEY值,与自定义菜单接口中KEY值对应

跳转事件被触发
返回的xml数据包

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[VIEW]]></Event>
<EventKey><![CDATA[www.qq.com]]></EventKey>
<MenuId>MENUID</MenuId>
</xml>

参数说明

参数 描述
ToUserName 开发者 微信号
FromUserName 发送方帐号(一个OpenID)
CreateTime 消息创建时间 (整型)
MsgType 消息类型,event
Event 事件类型,VIEW
EventKey 事件KEY值,设置的跳转URL
MenuID 指菜单ID,如果是个性化菜单,则可以通过这个字段,知道是哪个规则的菜单被点击了。

还有其他的事件。按钮类型用到在来补充

发布了44 篇原创文章 · 获赞 1 · 访问量 1561

猜你喜欢

转载自blog.csdn.net/weixin_45143481/article/details/104177159