# wechat **Repository Path**: Taurus12C/wechat ## Basic Information - **Project Name**: wechat - **Description**: php微信公众号开发包 - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 1 - **Created**: 2019-11-26 - **Last Updated**: 2025-05-28 ## Categories & Tags **Categories**: weixin-dev **Tags**: None ## README # 开发中 ## 使用详情见 `index.php` 文件内注释 > 开发中使用本人申请的微信测试号,如需自己体验可前往 [微信测试号申请地址](https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login) 申请 >项目还在开发阶段,如遇问题请联系我. ## 目录结构 ~~~ |—— cache 文件缓存驱动存储空间 |—— lib 包主文件夹 | |—— cache 缓存驱动 | |—— core 核心文件 | |—— http 接口请求驱动 | |—— Cache.php 缓存类文件 | |—— Config.php 配置获取类 | |—— Http.php 接口请求类 | |—— Wechat.php 主类 |—— vendor composer依赖 |—— config.php 配置文件 |—— index.php 方法示例描述 ~~~ >安装方法 `composer require taurus12c/wechat` ## 使用方法 #### 1、开始 配置好包根目录的config.php文件,导入Wechat类,完成微信开发 `use wechat\lib\Wechat;` --- 实例化对象 `$wechat = new Wechat();` --- #### 2、鉴权 接口配置服务器验证方法。一般只需用到一次 `$wechat->checkSignature();` --- 获取微信全局access_token,公众号给类接口调用时所用的access_token `$global_access_token = $wechat->getGlobalAccessToken();` --- 微信网页授权获取用户信息 `$userInfo = $wechat->getUserInfo();` --- 单独获取用户openid,此获取不跳转用户授权界面,静默授权 `$openid = $wechat->getOpenId();` --- #### 2、自定义菜单 //设置公众号菜单,方法形参$data强制数组,返回bool型。菜单设置方式请遵从微信自定义菜单规则 ``` $data = [ "button"=>[ [ "name" =>"按钮一", "type" =>"view", "url" =>"http://www.baidu.com", ], [ "name" =>"按钮二", "sub_button" =>[ [ "name" =>"二级菜单1", "type" =>"view", "url" =>"http://www.baidu.com" ] ] ] ] ]; $setMenu = $wechat->menu->setMenu($data); ``` --- 获取当前自定义菜单设置 `$getMenu = $wechat->menu->getMenuInfo();` --- 删除自定义菜单 `$delMenu = $wechat->menu->delMenu();` --- 设置个性化菜单,$data菜单设置样式,$matchrule个性化菜单匹配规则,返回bool型,详情微信手册 ``` $data = [ "button"=>[ [ "name" =>"按钮一", "type" =>"view", "url" =>"http://www.baidu.com", ], [ "name" =>"按钮二", "sub_button" =>[ [ "name" =>"二级菜单1", "type" =>"view", "url" =>"http://www.baidu.com" ] ] ] ], ]; $matchrule = [ "matchrule"=>[ "tag_id"=> "2", "sex"=> "1", "country"=> "中国", "province"=> "广东", "city"=> "广州", "client_platform_type"=> "2", "language"=> "zh_CN" ] ]; $setMenuConditional = $wechat->menu->setMenuConditional($data,$matchrule); ``` --- 获取个性化菜单设置 `$getMenuConditionalInfo = $wechat->getMenuConditionalInfo();` --- #### 3、消息管理 接收用户发来的消息,返回数组类型数据,数据内容见微信开发文档 `$msg = $wechat->getMsg();` --- 被动回复文本消息,参数1:接收方openid 参数2:开发者openid 参数3:发送内容,以下使用接收来的数据 `$sendText = $wechat->sendText($msg['FromUserName'],$msg['ToUserName'],'您发送的内容是:'.$msg['Content']);` --- 被动回复图片消息,参数1:接收方openid 参数2:开发者openid 参数3:上传的图片素材id `$sendImg = $wechat->sendImg($toUserName,$fromUserName,$mediaId);` --- 被动回复语音消息,参数1:接收方openid 参数2:开发者openid 参数3:上传的语音素材id `$sendVoice = $wechat->sendVoice($toUserName,$fromUserName,$mediaId);` --- 被动回复视频消息,参数1:接收方openid 参数2:开发者openid 参数3:数组(格式见下方参考) ``` $content = [ 'title' => '', //标题 'desc' => '', //描述 'mediaId' => '', //上传的素材ID ]; $sendVideo = $wechat->sendVoice($toUserName,$fromUserName,$content); ``` --- 被动回复音乐消息,参数1:接收方openid 参数2:开发者openid 参数3:数组(格式见下方参考) ``` $content = [ 'title' => '', //标题 'desc' => '', //描述 'url' => '', //音乐链接 'Hurl' => '', //高品质音乐链接,WIFI状态下默认播放这个 'thumbMediaId' => '', //消息缩略图,上传的图片素材ID ]; $sendMusic = $wechat->sendVoice($toUserName,$fromUserName,$content); ``` --- 被动回复图文消息,参数1:接收方openid 参数2:开发者openid 参数3:数组(格式见下方参考) ``` $articles = [ '第一篇' => [ 'title' => '', //标题 'desc' => '', //描述 'picurl' => '', //缩略图url 'url' => '', //点击跳转页面url ], '第二篇' => [], '第三篇' => [], ... //一次性最多发送8篇,数量限制详情见微信开发文档 ]; $sendNews = $wechat->sendNews($toUserName,$fromUserName,$articles); ``` #### 4、素材管理 ``` 素材上传提示 图片(image): 2M,支持PNG\JPEG\JPG\GIF格式 语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式 视频(video):10MB,支持MP4格式 缩略图(thumb):64KB,支持JPG格式 ``` 上传图片临时素材文件,参数1:文件路径。返回json格式字符串数据内容见微信开发手册 `$tempMedia = $wechat->media->addImgTempMedia($filepath);` --- 上传语音临时素材文件,参数1:文件路径。返回json格式字符串数据内容见微信开发手册 `$tempMedia = $wechat->media->addVoiceTempMedia($filepath);` --- 上传视频临时素材文件,参数1:文件路径。返回json格式字符串数据内容见微信开发手册 `$tempMedia = $wechat->media->addVideoTempMedia($filepath);` --- 上传缩略图临时素材文件,参数1:文件路径。返回json格式字符串数据内容见微信开发手册 `$tempMedia = $wechat->media->addThumbTempMedia($filepath);` --- 获取临时素材,参数1:素材media_id 图片素材返回图片文件流字符串 视频素材返回json格式字符串包含视频url地址。以下示例将获取的图片素材文件流保存为本地文件 ``` $getTempMedia = $wechat->media->getTempMedia($media_id); $file = fopen('test.jpg','w+'); fwrite($file,$getTempMedia); fclose($file); ``` --- 获取jssdk上传的高清语音 `$getJssdkMedia = $wechat->media->getJssdkMedia($media_id)` --- 上传图片永久素材 `$addImgMaterial = $wechat->media->addImgMaterial($file);` --- 上传语音永久素材 `$addVoiceMaterial = $wechat->media->addVoiceMaterial($file);` --- 上传永久视频素材,参数1:文件路径 参数2:视频标题 参数3:视频描述 `$addVideoMaterial = $wechat->media->addVideoMaterial($file,$title,$introduction);` --- 上传永久缩略图素材 `$addThumbMaterial = $wechat->media->addThumbMaterial($file);` --- 上传图文永久素材,参数1:图文内容数组,返回素材media_id ``` $articles = [ [ "title" => 'TITLE', //标题 "thumb_media_id" => 'THUMB_MEDIA_ID', //图文消息的封面图片素材id(必须是永久mediaID) "author" => 'AUTHOR', //作者 "digest" => 'DIGEST', //图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空。如果本字段为没有填写,则默认抓取正文前64个字。 "show_cover_pic" => 'SHOW_COVER_PIC(0 / 1)',//是否显示封面,0为false,即不显示,1为true,即显示 "content" => 'CONTENT', //图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图片url必须来源 "上传图文消息内的图片获取URL"接口获取。外部图片url将被过滤。 "content_source_url"=> 'CONTENT_SOURCE_URL', //图文消息的原文地址,即点击“阅读原文”后的URL "need_open_comment" => '1', //Uint32 是否打开评论,0不打开,1打开 "only_fans_can_comment"=> '1' //Uint32 是否粉丝才可评论,0所有人可评论,1粉丝才可评论 ], [ //... ], //最多八篇 ]; $addArticleMaterial = $wechat->media->addArticleMaterial($articles); ``` --- 上传图文消息内的图片,返回图片url(图片仅支持jpg/png格式,大小必须在1MB以下) `$addArticleImgMaterial = $wechat->media->addArticleImgMaterial($file);` --- 获取永久素材,参数1:素材media_ia,返回 图文素材视频素材为json数据,其他则为文件二进制文件内容 `$getMaterial = $wechat->media->getMaterial($meida_id);` --- 获取素材总数,返回json数据类型 `$getMaterialCount = $wechat->media->getMaterialCount();` --- 获取素材列表,参数1:查询素材类型图片(image)、视频(video)、语音(voice)、图文(news),参数2:从全部素材的该偏移位置开始返回,0表示从第一个素材返回,默认0,参数3:返回素材的数量,取值在1到20之间,默认20。返回json数据 `$getMaterialList = $wechat->media->getMaterialList($type, $offset, $count);` --- 删除永久素材 `$delMaterial = $wechat->media->delMaterial($media_id);` #### 5、用户管理 创建用户标签,参数1:标签名称 `$tag = $wechat->user->createTag($name);` --- 获取已创建的标签 `$tagList = $wechat->user->tagList();` --- 修改标签名称,参数1:要修改的标签ID,参数2:修改后的标签名称 `$upTag = $wechat->user->upTag($id,$name);` --- 删除标签,参数1:标签ID `$delTag = $wechat->user->delTag($id);` --- 获取标签下粉丝列表,参数1:标签ID,参数2:第一个拉取的OPENID,不填默认从头开始拉取 `$tagUserList = $wechat->user->tagUserList($id,$offset);` --- 批量为用户打标签,参数1:openid数组,参数2:标签ID ``` $openid_list=[ //粉丝列表 "ocYxcuAEy30bX0NXmGn4ypqx3tI0", "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" ]; $tagUser = $wechat->user->tagUser($openid_list,$id); ``` --- 批量为用户取消标签,参数1:openid数组,参数2:标签ID ``` $openid_list=[ //粉丝列表 "ocYxcuAEy30bX0NXmGn4ypqx3tI0", "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" ]; $tagUserDel = $wechat->user->tagUserDel($openid_list,$id); ``` --- 获取用户身上的标签列表,参数1:openid `$userTag = $wechat->user->userTag($openid);` --- 指定用户设置备注名,参数1:openid,参数2:备注名 `$userRemark = $wechat->user->userRemark($openid,$remark);` --- 获取用户基本信息(UnionID机制),参数1:openid,参数2:国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语(不填默认简中) `$userBasicInfo = $wechat->user->userBasicInfo($openid,$language);` --- 获取公众号的关注者列表,参数1:第一个拉取的OPENID,不填默认从头开始拉取 `$getUserList = $wechat->user->getUserList($next_openid);` --- 获取公众号的黑名单列表 `$getBlackList = $wechat->user->getBlackList();` --- 拉黑用户,参数1:需要拉入黑名单的用户的openid,一次拉黑最多允许20个 ``` $openid_list=[ //粉丝列表 "ocYxcuAEy30bX0NXmGn4ypqx3tI0", "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" ]; $setBlackList = $wechat->user->setBlackList($openid_list); ``` --- 取消拉黑用户,参数1:需要拉入黑名单的用户的openid,一次拉黑最多允许20个 ``` $openid_list=[ //粉丝列表 "ocYxcuAEy30bX0NXmGn4ypqx3tI0", "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" ]; $delBlackList = $wechat->user->delBlackList($openid_list); ``` --- ## 未完待续