微信二次开发接入php代码,适合新手学习的laravel接入微信接口,实现微信公众号二次开发...
最近使用laravel做微信公众号二次开发,发现网上能够参考的资料基本上很少,很多地方都讲的不够详细,致使许多新手采坑无数,所以这篇文章讲一下如何使用laravel接入微信接口,实现微信公众号二次开发,顺便也会穿插一些laravel基础知识的讲解。
首先学习之前我们得有一个已经认证过的微信公众号,当然如果你只是学习一下不想花钱的话,点击这里微信公众平台,即可获得一个测试微信号,已经开通了接口,直接用即可。
其它的还需要一台web服务器,已经备案的域名,这些我就不做赘述。
首先我强调一下,能有兴趣看我这篇文章的,一定是有一定的php基础的,并且对国产thinkphp框架也是有一定了解的。那么laravel相对于thinkphp,有一个明显的区别就是,在域名中访问某个域名,需要定义其所对应的控制器,这个需要在routes里面添加
Route::get('weixin/token', 'WeixinController@token');
Route::post('weixin/token', 'WeixinController@token');
重要的一点一定要定义发请求的方式是POST还是GET,要不然是无法正确响应请求的,这个地方坑过很多使用laravel开发微信的朋友们,而这些在thinkphp中是不用定义的。那么在这里有个坑就是微信验证默认token的请求是GET方式,但是真正接入微信服务器用以开发时采用的确实POST方式,所以我们在微信后台配置验证接口时,要使用GET方式,在验证成功配置完成后再改回POST方式。
另外laravel最主要的是引进了一个中间件的概念,所有通过URL发过来的请求都需要经过中间件一系列验证才能分发给相应的控制器。然后最重要的我们在所有post请求中必须包含一个crsfToken的字段用以防止跨域攻击。但是如果我们是用在微信开发接口中,显然微信服务器是不会发送包含这个字段的,那么就需要我们手动的关闭,关闭的方法后面会讲到。
下面开始,教你一步一步实现微信自动回复。
将laravel安装部署到服务器上面(composer或者从官网下载离线安装包都行),笔者这里用的是最新版的laravel5.4.
打开routes/web.php,在里面增加一行:
Route::any('weixin/api', 'WeixinController@api');
打开app\Http\Middleware\VerifyCsrfToken.php,将第14行
protected $except = [
//
];
双斜杠替换为
'weixin/api',
在app\Http\目录下面新建WeixinCntroller.php,替换内容为:
namespace App\Http\Controllers;
use DB;
use App\Http\Requests;
use Illuminate\Http\Request;
class weixinController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
//验证消息
public function api()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
//检查签名
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = "weixin";
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature){
return true;
}else{
return false;
}
}
//响应消息
}
在微信公众号后台配置接口如下
注意:token令牌应该与WeixinController.php中配置的令牌一致。点击提交,如果提示“提交成功”,那么第一步就大功告成。错了?很正常,仔细检查一下配置信息是否正确,代码是否复制完全?
接下来一步:将之前的api操作方法
public function api(){
.......
}
替换为:
public function api()
{
//get post data, May be due to the different environments
$postStr = file_get_contents("php://input", 'r');//php:input
//写入日志 在同级目录下建立php_log.txt
//chmod 777php_log.txt(赋权) chown wwwphp_log.txt(修改主)
error_log(var_export($postStr,1),3,'php_log.txt');
//日志图片
//extract post data
if (!empty($postStr)){
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
the best way is to check the validity of xml by yourself */
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "
%s
0
";
//订阅事件
if($postObj->Event=="subscribe")
{
$msgType = "text";
$contentStr = "欢迎关注安子尘,微信babyanzichen";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
//语音识别
if($postObj->MsgType=="voice"){
$msgType = "text";
$contentStr = trim($postObj->Recognition,"。");
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
//自动回复
if(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "小朋友你好!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}else {
echo "";
exit;
}
}
此时,打开微信公众号,即可开始愉快的开撩了
用不了?好吧,你赢了,源码奉上,直接拷贝到服务器上就可以用啦
微信二次开发接入php代码,适合新手学习的laravel接入微信接口,实现微信公众号二次开发...相关推荐
- 适合新手学习的laravel接入微信接口,实现微信公众号二次开发
2019独角兽企业重金招聘Python工程师标准>>> 最近使用laravel做微信公众号二次开发,发现网上能够参考的资料基本上很少,很多地方都讲的不够详细,致使许多新手采坑无数,所 ...
- 使用laravel开发微信公众的一个大坑,适合新手学习的laravel接入微信接口
最近使用laravel做微信公众号二次开发,发现网上能够参考的资料基本上很少,很多地方都讲的不够详细,致使许多新手采坑无数,所以这篇文章讲一下如何使用laravel接入微信接口,实现微信公众号二次开发 ...
- 如何获得微信公众号二维码
公众号生成二维码带参数,只有服务号才有的权限,订阅号无法生成二维码,通过公众号开发接口实现获得公众号二维码.微号帮平台现有功能渠道二维码生成可以满足需求. 1.渠道二维码生成 微号帮平台功能渠道二维码 ...
- 微信公众号二次开发实现自动回复文字,图片,图文功能
微信公众号二次开发实现自动回复文字,图片,图文功能 自动回复文字或图片: 表单里需要有关键字和内容.但就这两个字段也需要在两个数据表里分别显示,因为要提前准备字段内容里有可能是图片,图文等等类型.所以 ...
- 微信公众号三方平台开发【全网发布及全网发布接入检测】
经过之前系列内容过后,接下来的代微信公众号实现业务部分跟微信公众号开发业务逻辑一样,所以公众号其他业务功能部分后面我会单独整理一套相关内容,今天,咱们就来说说微信第三方平台开发的最后一步-- 全网发布 ...
- 微信公众号二次开发框架-微擎
一.微擎框架的下载(http://www.we7.cc/) 1.在自己的服务器或者虚拟主机上安装微擎的框架(免费开源的微信二次开发框架,类似ecshop和dz均可以部署在自己的服务器或虚拟主机内) 2 ...
- 微信公众号后台服务开发(一):自动消息回复
微信公众号后台服务开发 简述 微信平台提供的自动回复机制 后台服务开发 配置指定服务器 消息自动回复功能开发 简述 使用Java SpringBoot框架搭建微信工作号后台实现自定义逻辑自动回复 先注 ...
- 微信开放平台 公众号第三方平台开发 教程一 平台介绍
教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 ...
- 微信开放平台公众号第三方平台开发 教程一 平台介绍
微信现在火,火的如火如荼,给我们这些第三方的开发者带来了不少机会,相信现在有不少人在基于微信的公众平台在做二次开发,接下来会一系列的文章来介绍微信的另一种开发模式- 基于微信开发平台的公众号第 ...
最新文章
- 技巧:结合Zabbix与SNMP监控嵌入式设备
- APK 签名中应该注意的一些点 (未完待续)
- GDI中的坐标映射问题
- 转:智能音箱市场深度报告:怎么大家都在抢这个两亿小蛋糕?
- jquery右下角自动弹出关闭层
- java 不安全操作_Java新手求助:怎么会出现使用了未经检查或不安全的操作。
- 男人,得有足够征服女人的本钱
- OpenCV图像锐化
- 按键精灵 获取某网站服务器时间,按键精灵如何获得网络时间的毫秒
- 线下交易如何避免微信和支付宝交易风控
- 基于51单片机的体脂检测系统设计(51+oled+hx711+us100)
- 免费在线图片识别文字工具
- Order by 多条件排序
- epublib java_java中使用Epublib解析EPub文件
- xdoj 字符串部分复制 233237
- React中JSX的用法和理解
- 基于R语言的主成分和因子分析
- 信息可视化的简单概述
- BP神经网络原理公式推导
- 苹果电池ti测试软件,小技巧|不利用第三方软件,查看苹果设备电池循环次数...
热门文章
- 零基础的人应该怎么自学java
- Qt学习总结之QFrame和的QAbstractScrollArea
- Vue 安装 less 报错 While resolving: hblvbigdata@0.1.0
- python 图片文件_初学Python-只需4步,爬取网站图片(附py文件)
- 暑期学习日记27:js实现验证码生成与检验
- 如何用Python绘制圣诞树(极其鬼畜视频) - B站小视频
- 国产视频编码技术终获国家科学奖,从此可甩掉H.265高额专利费
- onBlur事件与onfocus事件 (js)
- redis客户端命令
- Sqli_lib Less 5