- 难度水平:初中级
- 适用人群:对微信公众号开发有认知跟实践的童鞋
- 阅读时间:8分钟
缘起
很久之前做过一次公众号的开发,当时就遇到了一个验证的小坑,但是由于时间紧任务急处理完了也就没在意,可谁知最近刚刚上马一个新的公众号项目又遇到了同样的小坑,痛定思痛决定奋笔疾书留下痕迹,省的以后再次忘记了。"color: #ff0000">开始验证
首先来一张胜过千言万语的图,说明我们要验证的目标:
然后开始扫坑。先扫个盲,微信验证的目的就是你来证明你的服务器地址的有效性,所以带着这个目的我们来看看下面这些问题:
- URL地址怎么写
- 纯PHP的代码怎么写
- Laravel的代码怎么写
- 常见的坑是什么
URL地址怎么写
这个地址可以是路由地址也可以是文件地址:
路由地址形式:
https://mydomain.com/wx,
https://mydomain.com/auth/wx,
https://mydomain.com/utility/wx
文件地址形式:
https://mydomain.com/mywechat...
https://mydomain.com/auth/myw...
https://mydomain.com/utility/...
敲黑板,划重点:
无论哪种形式都可以,重点是可以直接通过GET或者POST访问到
纯PHP的代码怎么写
通常来说纯代码就是非框架的php代码验证方式,废话少说,直接上酸菜:
/*这个是你自定义的令牌,图片里面Token的位置*/ define("TOKEN", "这个是你自定义的令牌"); /*初始化当前的类*/ $wechatObj = new wechatCallbackapiTest(); /*开始验证程序*/ $wechatObj->valid(); /** * Class WXApiVerify */ class WXApiVerify { /** * 检测函数输出 */ public function valid() { $echoStr = $_GET['echostr']; if($this->checkSignature()){ echo $echoStr; #坑点,看下面的常见坑介绍 exit; #一定要停止php运行,避免产生不必要的字串符 } } /** * 前面检测 * @return bool */ private function checkSignature() { #注意: 这里可以不用检验$_GET参数的有效性,因为微信一定会传相关的参数给你的服务器的,你直接开启验证模式即可。 $signature = $_GET['signature']; $timestamp = $_GET['imestamp']; $nonce = $_GET['nonce']; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr === $signature ){ return true; }else{ return false; } } }
Laravel的代码怎么写
首先,强势插个口播(在使用过TP5,CodeIgniter, CakePHP, Yii, Slim之后,我认为Laravel是目前来说最好的PHP框架,不接受其他任何意见。)
其次,验证代码上面是跟纯PHP大同小异的,唯一的区别是在你处理POST请求的时候一定要让Laravel不要检测CSFR Token,否则会出现错误。
首先,设置路由:
Route::any('wx', [ 'uses' => 'WeChatApp@checkSignature' ]); #坑点,看下面的常见坑介绍
其次,取消Laravel的CSFR检查:
#去到你的Middlewarel里面找到VerifyCsrfToken.php然后插入下面代码: protected $except = [ 'wx', #注意这个是你在第一步设置的路由路径,不接受单独的文件路径,太Low逼了 ];
最后,上酸菜:
#在你对应的Controller里面加入以下函数 public function checkSignature( Request $request ) { $input = $request->all(); # 一定要抓取4个参数 $echoStr = $input[ "echostr" ]; $signature = $input[ "signature" ]; $timestamp = $input[ "timestamp" ]; $nonce = $input[ "nonce" ]; # 微信官方验证方式 $token = env( 'TOKEN' ); #或者用config()函数 $tmpArr = [ $token, $timestamp, $nonce ]; sort( $tmpArr, SORT_STRING ); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); # 打印返回结果 if( $tmpStr == $signature ){ return response($echoStr); } else{ return response(); } }
常见的坑是什么
文档坑。有些人看过官方文档之后直接就上代码了,缺忽略了里面的一个参数echostr 随机字符串
而这个恰恰是验证服务器的关键点,你要打印这个返回给微信才能通过验证。但是官方文档说的不够重点。
Laravel路由坑。一定要设置请求为any
这样包括(GET跟POST)
Laravel还有一个测试的坑,就是如果你的APP_DEBUG=false
如果不是false
的话可能会造成抛出多余的字串导致验证失败。
要学会使用微信官方测试工具 https://mp.weixin.qq.com/debug/ 选择消息接口测试
跟文本消息
接口就行。其他的可以看图说话
微信UI的坑。在你通过上面的测试后,并不真正代表你启用了服务器。而是在你保存后要点击启用,然后看到红色 停用
才真正的是真正的启用了。
白名单坑。你一定要去到微信的安全中心
设置你的服务器的白名单
.否则之后的开发工作会有阻碍。
公众号设置坑。你一定要去微信的公众号设置
里面加入你的:
- 业务域名
- JS接口安全域名
- 网页授权域名
结语
微信开发有挑战,细心最关键。遇到问题不要慌,来看哥文章。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】