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

2022-09-14 14:45:48 浏览数 (1)

回复音乐信息

参数

是否必须

说明

ToUserName

接收方帐号(收-到的OpenID)

FromUserName

开发者微信号

CreateTime

消息创建时间 (整型)

MsgType

消息类型,音乐为music

Title

音乐标题

Description

音乐描述

MusicURL

音乐链接

HQMusicUrl

高质量音乐链接,WIFI环境优先使用该链接播放音乐

ThumbMediaId

缩略图的媒体id,通过素材管理中的接口上传多媒体文件,得到的id

代码语言:javascript复制
 $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

点击图文消息跳转链接

代码语言:javascript复制
    $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>";
代码语言:javascript复制
$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格式的数据

代码语言:javascript复制
{"access_token":"ACCESS_TOKEN","expires_in":7200}

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

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

代码语言:javascript复制
{"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

接口或者使用开发工具调用

代码方式

代码语言:javascript复制
$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类型必须

小程序的页面路径

创建好菜单后我们就可以给菜单复于相应行为,这里以“今日歌曲”为例

参考开发文档 “自定义菜单”----“事件推送”

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

代码语言:javascript复制
$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数据包

代码语言:javascript复制
<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数据包

代码语言:javascript复制
<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,如果是个性化菜单,则可以通过这个字段,知道是哪个规则的菜单被点击了。

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

0 人点赞