《一》将关注订阅号用户的基本信息入库

来源:互联网 发布:网络有重名怎么恢复 编辑:程序博客网 时间:2024/06/05 10:44

一、下载laravel+wechat

下载 Laravel:
composer create-project –prefer-dist laravel/laravel xiangmu

这里写图片描述

下载 wechat 插件:
composer require overtrue/wechat=2.*
wechat 官方文档:https://github.com/overtrue/wechat/wiki

这里写图片描述

二、申请订阅号

微信公众平台技术文档:https://mp.weixin.qq.com/wiki

这里写图片描述

三、配置 url,将请求发送到我们的服务器

这里面配置的 url 要在公网能访问到。如果没有线上域名,可以参考:《使用 ngrok 将内网暴露在公网上》

这里写图片描述

四、创建 weixin 路由

配置 weixin 路由

这里写图片描述

<?phpRoute::any('weixin', 'WelcomeController@index');

微信与我们的本地成功握手,url 配置成功。

<?php namespace App\Http\Controllers;use Overtrue\Wechat\Server;class WelcomeController extends Controller {    public function index()    {        //$encodingAESKey 可以为空【这里将appid和token写在了.env文件里面】        $server =new Server(env('WX_APPID'),env('WX_TOKEN'));        return $server->serve();    }}

点击提交,配置成功。

这里写图片描述

五、将关注用户信息写到数据库

1、写入之前先将 weixin 路由的 csrf 关闭,因为关注时是 post 请、求,laravel 对于 post 请求有 csrf防御。

这里写图片描述

<?php namespace App\Http\Middleware;use Closure;use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;class VerifyCsrfToken extends BaseVerifier {    //不过滤的 url    protected $except=array(        'weixin'    );    /**     * Handle an incoming request.     *     * @param  \Illuminate\Http\Request  $request     * @param  \Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {        $_url=$request->decodedPath();        if(in_array($_url,$this->except)){            unset($_url);            // 禁用CSRF            return $next($request);        }else{            unset($_url);            // 使用CSRF            return parent::handle($request, $next);        }    }}

2、创建表的 sql 语句:

CREATE TABLE `users` (  `uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '//用户id',  `openid` varchar(32) COLLATE utf8_unicode_ci NOT NULL COMMENT '//用户openid',  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '//用户昵称',  `subtime` int(11) NOT NULL COMMENT '//关注时间',  `status` int(11) NOT NULL DEFAULT '1' COMMENT '//用户状态',  PRIMARY KEY (`uid`),  UNIQUE KEY `users_openid_unique` (`openid`)) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

3、操作 users 表的 模型

<?php namespace App\Http\Models\home;use Illuminate\Database\Eloquent\Model;class Users extends Model {    protected $table='users';    protected $primaryKey='uid';    public $timestamps=false;}

4、WelcomeController 控制器:

<?php namespace App\Http\Controllers;use App\Http\Models\home\Users;use Overtrue\Wechat\Server;use Overtrue\Wechat\User as WxUser;class WelcomeController extends Controller {    public function index()    {        //$encodingAESKey 可以为空        $server =new Server(env('WX_APPID'),env('WX_TOKEN'));        // 只监听指定类型事件        $server->on('event', 'subscribe',[$this,'guanzhu']);        //        return $server->serve();    }    //@关注方法。    public function guanzhu($event)    {        //WX_APPID 是 appid        //WX_SEC 是 appsecret        $wxuser=new WxUser(env('WX_APPID'),env('WX_SEC'));        $wx_res=$wxuser->get($event->FromUserName);        $user=new Users();        $user->openid=$event->FromUserName;        $user->name=$wx_res->nickname;        $user->subtime=time();        $user->save();        return '感谢您的关注。';    }}

扫码关注成功,并在数据库写入了一条数据。

这里写图片描述

结束。

阅读全文
0 0
原创粉丝点击