一、安装easyWeChat

easyWeChat 文档 :

https://www.easywechat.com/docs/4.1/overview

使用composer下载

composer require overtrue/wechat:~4.0 -vvv

或者直接下载源码放到 extend下

二、引入

use EasyWeChat\Factory;

easywechat配置:  根据需要设置

$config=[/*** Debug 模式,bool 值:true/false** 当值为 false 时,所有的日志都不会记录*/'debug'  => false,/*** 账号基本信息,请从微信公众平台/开放平台获取*/'app_id'  => 'wxc0330dcea9e9a',         // AppID'secret'  => 'c96af0236069b',     // AppSecret'token'   => 'mytest',          // Token'aes_key' => 'i0MbeyhX8lp5tlL7hRCjbLo2GdVNqCD3h7DcmFJmnGU','response_type' => 'array',/*** 日志配置** level: 日志级别, 可选为:*         debug/info/notice/warning/error/critical/alert/emergency* permission:日志文件权限(可选),默认为null(若为null值,monolog会取0644)* file:日志文件位置(绝对路径!!!),要求可写权限*/'log' => ['level'      => 'debug','permission' => 0777,'file'       => '/tmp/easywechat.log',],/*** OAuth 配置** scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login* callback:OAuth授权完成后的回调页地址*/'oauth' => ['scopes'   => ['snsapi_userinfo'],'callback' => '/user/wechat/oauth_callback',],/*** 微信支付*/'payment' => ['merchant_id'        => '135*****602','key'                => '80b8682*****8fdac7784','cert_path'          => ROOT_PATH . 'public/certs/wechat/apiclient_cert.pem', // XXX: 绝对路径!!!!'key_path'           => ROOT_PATH . 'public/certs/wechat/apiclient_key.pem',      // XXX: 绝对路径!!!!'notify_url'       => 'http://*******/notify/wxpay',],/*** Guzzle 全局设置** 更多请参考: http://docs.guzzlephp.org/en/latest/request-options.html*/'guzzle' => ['timeout' => 3.0, // 超时时间(秒)'verify' => false, // 关掉 SSL 认证(强烈不建议!!!)],];return $config;}

三、接入步骤

1.首次接入验证

此处用数据库保存的token对微信提交的参数进行验签比对,如果不需要验证token验证的话直接原样输出

echostr 即可接入
 //微信首次接入验证if (!empty($_GET['echostr']) && $this->checkSignature($_W['config']['token'])) {header('content-type:text');echo $_GET['echostr'];exit;}/** 接入验签*/private function checkSignature($token){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);$tmpStr = implode($tmpArr);$tmpStr = sha1($tmpStr);if ($tmpStr == $signature) {return true;} else {return false;}}

2.消息处理

根据消息类型交给不同模块去处理,只回复字符串的话直接return就好,其他类型消息需要进一步装配,详细参见文档。

public function index(Request $request){global $_W;$app = Factory::officialAccount($_W['config']);$app->server->push(function ($message) {global $_W;$memberModel = new Members();$_W['user'] = $memberModel->getInfoByOpenidAndUniacid($message['FromUserName'], $_W['uniacid']);//用户信息// $message['FromUserName'] // 用户的 openid// $message['MsgType'] // 消息类型:event, text....$handler = new MessageHandler($message);switch ($message['MsgType']) {case 'event'://return '收到事件消息';return $handler->eventHandler($message['FromUserName']);break;case 'text'://return '收到文字消息';return $handler->textHandler();break;case 'image':return '收到图片消息';break;case 'voice':return '收到语音消息';break;case 'video':return '收到视频消息';break;case 'location'://return '收到坐标消息';return $handler->test();break;case 'link':return '收到链接消息';break;case 'file':return '收到文件消息';// ... 其它消息default:return '收到其它消息';break;}});$response = $app->server->serve();$response->send();
}

messageHandler

具体处理各种消息,

class MessageHandler
{/** 消息对象*/private $message;public function __construct($message){$this->message = $message;}/** 事件响应函数*/public function eventHandler($openid){// $message['FromUserName'] // 用户的 openid// $message['MsgType'] // 消息类型:event, text....global $_W;switch ($this->message['Event']) {//关注事件case 'subscribe':return $this->focusEvent($openid, $_W['auid']);break;//取消关注事件case 'unsubscribe':return '取关';break;//点击事件case 'CLICK':if ($this->message['EventKey'] == 'sign') {$res = $this->signEvent($openid);$SignModel = new Signs();$SignModel->SignEventFun($openid,$_W['auid']);return $res;}return '取关';break;default:return '收到其它消息';break;}}
}

发送模板消息

$app = Factory::officialAccount($_W['config']);$res = $app->template_message->send(['touser' => 'oWsdC5tt9ZXVn8YkK2ZvsHDGw','template_id' => '2ujQBy5j1od8JzKfuvZvhTzX','url' => 'https://easywechat.org','data' => ['key1' => 'VALUE','key2' => 'VALUE2',],]);

图文消息

use EasyWeChat\Kernel\Messages\Text;
use EasyWeChat\Kernel\Messages\News;
use EasyWeChat\Kernel\Messages\NewsItem;
$items = [new NewsItem(['title' => $replayInfo->book_name,'description' => $replayInfo->introduction,'url' => $url,'image' => $replayInfo->book_flash,]),];return new News($items);

客服消息

    /*** Notes:发送模板消息* @author:xxf* Date: 2018-06-02* Time: 15:11* @param $touser* @param $template_id* @param $url* @param $data* @param string $topcolor* @return bool* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException*/public function sendTplMessage($touser, $template_id, $url, $data, $topcolor = '#7B68EE'){$config= $this->config();$app = Factory::officialAccount($config);$app->template_message->send(['touser' => $touser,'template_id' => $template_id,'topcolor' => $topcolor,'url' => $url,'data' => $data,]);return true;}/*** Notes:发送客服消息* @author:xxf* Date: 2018-06-04* Time: 14:15* @param $touser* @param $data* @return bool* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException* @throws \EasyWeChat\Kernel\Exceptions\RuntimeException*/public function sendMessage($touser,$msg, $url){$config= $this->config();$app = Factory::officialAccount($config);if (!empty($url)) {$msg .= '<a href=\'' . $url . '\'>点击查看详情</a>';}$message = new Text($msg);$app->customer_service->message($message)->to($touser)->send();return true;}

thinkphp使用easywechat接入微信公众号相关推荐

  1. 微信公众号自动回复html,[.NET] 简单接入微信公众号开发:实现自动回复

    简单接入微信公众号开发:实现自动回复 一.前提 先申请微信公众号的授权,找到或配置几个关键的信息(开发者ID.开发者密码.IP白名单.令牌和消息加解密密钥等). 二.基本配置信息解读 开发者ID:固定 ...

  2. 从零接入微信公众号(Java实现 附源码)

    目录 从零接入微信公众号 一.微信测试号的申请与关注 1.申请 2.访问域名配置 3.关注 二.测试号快速生成底部导航栏 1.获取 access_token 2.自定义菜单 三.微信公众号网页授权 1 ...

  3. 微信开发:springboot接入微信公众号

    微信公众号现今已经成为我们日常生活中获取信息的一个重要途径,今天这篇博客主要是介绍如何用springboot接入微信的公众号.微信的公众号分三种:订阅号,一般个人使用,很多功能受限:服务号,个人与企业 ...

  4. ChatGPT接入微信公众号(手把手教学)

    前言 本篇文章参考国内服务器 3 分钟将 ChatGPT 接入微信公众号(超详细)配置,纠正了一些过时的信息. 准备 一个微信公众号 一个能访问外网的梯子 一个ChatGPT账号 有了这些就可以配置了 ...

  5. 企业宣传片如何快速接入微信公众号中?

    原创文章:2019-8-6 文章内容:快速在微信公众号中接入自己公司的视频宣传片 大家好,我来说说企业视频宣传片.产品宣传片如何接入微信公众号,让关注公众号的用户,轻松点击观看,提升企业形象,提升产品 ...

  6. 搜狗搜索正式接入微信公众号

    搜狗搜索正式接入微信公众号 6月9日中午消息,搜狗搜索今日宣布正式接入微信公众号数据.用户将在搜狗搜索页面查询和浏览微信公众号文章. 据悉,在搜狗搜索框中输入微信公众号关键词,便可在搜索结果页中查看相 ...

  7. chatgpt接入微信公众号

    您好,要想将 chatgpt 接入微信公众号,您需要按照如下步骤进行操作: 在微信公众平台上注册一个订阅号或服务号. 创建一个 chatgpt 的机器人,并获取它的 API 密钥. 在微信公众平台上设 ...

  8. PHP接入微信公众号(一)

    PHP接入微信公众号 前言:微信公众号现在是大家不可缺少的宣传平台,毕竟背靠微信这个巨大流量平台,所以将项目接入微信公众号是必须要掌握的技能 前提 服务器资源:你需要拥有一台公网服务器资源(阿里云.腾 ...

  9. 使用AirCode云平台,两步将ChatGPT接入微信公众号

    使用AirCode云平台,两步将ChatGPT接入微信公众号 最近很火的ChatGPT可以说已经满大街可见了,到处都有各种各样的体验地址,有收费的也有免费的,总之是五花八门.花里胡哨. 所以呢,最近我 ...

  10. 如何接入微信公众号开发?底层原理是什么?

    要接入微信公众号开发,您需要完成以下几个步骤: 注册微信公众平台账号:首先,您需要在微信公众平台上注册一个账号,并创建一个公众号.在注册过程中,您需要提供相关的身份信息和认证材料,以便微信审核和认证您 ...

最新文章

  1. 10 个 Python 工程师,9 个不合格!!
  2. 计算机的硬盘和光盘数,硬盘和光盘属于什么媒体
  3. Java 对象的序列化和反序列化
  4. 兰州大学第一届『飞马杯』程序设计竞赛 - ★★飞马祝福语★★(动态dp)
  5. 《Leetcode》目录
  6. 【HDU - 5090】Game with Pearls (匈牙利算法,二分图匹配)
  7. Cookie、Session 和 Token区别
  8. 深入详解Redis布隆过滤器
  9. oracle用户的追踪文件,Oracle中怎样通过触发器来追踪用户的活动?
  10. 新一代CTR预测服务的GPU优化实践
  11. 关于一个简单算法的递归和循环转换实现
  12. java创建内部面板类_Java图形与文本(18)
  13. Jupyter Notebook使用和基本python命令
  14. 数据结构——队列操作
  15. 什么是JDBC,JDBC的主要功能是什么?
  16. 【从零开始学架构-李运华】02|架构设计的历史背景
  17. Excel中如何往上/往下全选(Mac)
  18. jupyter notebook报错500 : Internal Server Error
  19. jQuery高级选择器
  20. Mysql中Drop删除用户的名字_mysql中drop和delete方法删除用户的区别

热门文章

  1. “衣带渐宽终不悔,为伊消得人憔悴” 读《唐宋词十七讲》有感二 —— 2021.12.23 晚八时
  2. 如何将 png/jpg 图片转换为 eps
  3. ENVI基本操作之彩色合成
  4. 金士顿服务器内存条型号解读,金士顿标签含义,如何鉴别真假?
  5. 业务流程图是什么?怎么画?
  6. 计算机就业前景调查报告问题,计算机专业就业前景调查报告.docx
  7. python三维图像切片成二维_python之画三维图像
  8. 银行柜员绩效考核案例
  9. 第三方接入-飞猪酒店商品发布流程
  10. 【DevOps研发管理方案】一:方案简介