<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use EasyWeChat\Message\Text;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use EasyWeChat\Foundation\Application;
use App\User;
use DB;
class WxController extends Controller
{
protected $app = null;
//..获取用户信息及配置错误日志
public function __construct(){
$options = [
'debug' => true,
'app_id' => '微信id',
'secret' => '微信secret',
'token' => 'weixin',
'log' => [
'level' => 'debug',
'file' => 'D:\xampp\htdocs\fenxiao\public\tmp\easywechat.log',
],
// ...解决php版本不匹配问题加选参数
'guzzle'=>[
'timeout'=>5.0,
'verify'=>false,
]
];
$this->app = new Application($options);
// 从项目实例中得到服务端应用实例。
}
public function index(){
$server = $this->app->server;
$server->setMessageHandler(function ($message) {
// $message->FromUserName // 用户的 openid
// $message->MsgType // 消息类型:event, text....
if ($message->MsgType=='event') {
if ($message->Event=='subscribe') {
return $this->subscribe($message);
}elseif ($message->Event=='unsubscribe') {
$this->unsubscribe($message);
}
}
});
$response = $server->serve();
// $response->send(); // Laravel 里请使用:
return $response;
}
//关注事件
public function subscribe($message){
if ($message->MsgType=='event') {
$openId=$message->FromUserName;
$userService = $this->app->user;
$user = $userService->get($openId);
$usermodel = new User();
//若用户关注过,取消后在关注,将status修改为1
$select = $usermodel->where('openid',$openId)->first();
if ($select && $select->status ==0) {
$select->status = 1;
$select->save();
return "$user->nickname 欢迎再次关注本微信号";
}else{
//用户第一次关注,获取用户信息写入数据库
$usermodel->openid= $openId;
$usermodel->name= $user->nickname;
$usermodel->sex= $user->sex;
$usermodel->city= $user->city;
$usermodel->province= $user->province;
$usermodel->country= $user->country;
$usermodel->subtime =time();
//用户上下级关系
if ($message->EventKey) {
$key = str_replace('qrscene_','',$message->EventKey);
$pid = $usermodel->where('uid',$key)->first();
$usermodel->p1 = $key;
$usermodel->p2 = $pid->p1;
$usermodel->p3 = $pid->p2;
}
$usermodel->save();
$this->qrcode($usermodel->uid);
}
}
return "$user->nickname 欢迎关注本微信号!";
}
//取消关注事件,将状态改为0
public function unsubscribe($message){
$info = User::where('openid',$message->FromUserName)->first();
if ($info) {
$info->status=0;
$info->save();
}
}
//生成带参数的二维码
public function qrcode($uid){
$qrcode = $this->app->qrcode;
$result = $qrcode->forever($uid);// 或者 $qrcode->forever("foo");
$ticket = $result->ticket; // 或者 $result['ticket']
//$url = $result->url;
$url = $qrcode->url($ticket);
$content = file_get_contents($url); // 得到二进制图片内容
$path = $this->mkd().'/qr_'.$uid.'.jpg';
file_put_contents(public_path().$path, $content); // 写入文件
}
//生成按日期月份存储的二维码目录
protected function mkd(){
$today = date('/Y/m');
if (!is_dir(public_path().$today)) {
mkdir(public_path().$today,0777,true);
}
return $today;
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use EasyWeChat\Message\Text;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use EasyWeChat\Foundation\Application;
use App\User;
use DB;
class WxController extends Controller
{
protected $app = null;
//..获取用户信息及配置错误日志
public function __construct(){
$options = [
'debug' => true,
'app_id' => '微信id',
'secret' => '微信secret',
'token' => 'weixin',
'log' => [
'level' => 'debug',
'file' => 'D:\xampp\htdocs\fenxiao\public\tmp\easywechat.log',
],
// ...解决php版本不匹配问题加选参数
'guzzle'=>[
'timeout'=>5.0,
'verify'=>false,
]
];
$this->app = new Application($options);
// 从项目实例中得到服务端应用实例。
}
public function index(){
$server = $this->app->server;
$server->setMessageHandler(function ($message) {
// $message->FromUserName // 用户的 openid
// $message->MsgType // 消息类型:event, text....
if ($message->MsgType=='event') {
if ($message->Event=='subscribe') {
return $this->subscribe($message);
}elseif ($message->Event=='unsubscribe') {
$this->unsubscribe($message);
}
}
});
$response = $server->serve();
// $response->send(); // Laravel 里请使用:
return $response;
}
//关注事件
public function subscribe($message){
if ($message->MsgType=='event') {
$openId=$message->FromUserName;
$userService = $this->app->user;
$user = $userService->get($openId);
$usermodel = new User();
//若用户关注过,取消后在关注,将status修改为1
$select = $usermodel->where('openid',$openId)->first();
if ($select && $select->status ==0) {
$select->status = 1;
$select->save();
return "$user->nickname 欢迎再次关注本微信号";
}else{
//用户第一次关注,获取用户信息写入数据库
$usermodel->openid= $openId;
$usermodel->name= $user->nickname;
$usermodel->sex= $user->sex;
$usermodel->city= $user->city;
$usermodel->province= $user->province;
$usermodel->country= $user->country;
$usermodel->subtime =time();
//用户上下级关系
if ($message->EventKey) {
$key = str_replace('qrscene_','',$message->EventKey);
$pid = $usermodel->where('uid',$key)->first();
$usermodel->p1 = $key;
$usermodel->p2 = $pid->p1;
$usermodel->p3 = $pid->p2;
}
$usermodel->save();
$this->qrcode($usermodel->uid);
}
}
return "$user->nickname 欢迎关注本微信号!";
}
//取消关注事件,将状态改为0
public function unsubscribe($message){
$info = User::where('openid',$message->FromUserName)->first();
if ($info) {
$info->status=0;
$info->save();
}
}
//生成带参数的二维码
public function qrcode($uid){
$qrcode = $this->app->qrcode;
$result = $qrcode->forever($uid);// 或者 $qrcode->forever("foo");
$ticket = $result->ticket; // 或者 $result['ticket']
//$url = $result->url;
$url = $qrcode->url($ticket);
$content = file_get_contents($url); // 得到二进制图片内容
$path = $this->mkd().'/qr_'.$uid.'.jpg';
file_put_contents(public_path().$path, $content); // 写入文件
}
//生成按日期月份存储的二维码目录
protected function mkd(){
$today = date('/Y/m');
if (!is_dir(public_path().$today)) {
mkdir(public_path().$today,0777,true);
}
return $today;
}
}
绑定微信公众号,下面只差一个微信网页授权登录,做完这个授权登录后,我们就可以挣脱微信的束缚,进行自己的业务逻辑了,不必再去
看那一堆xml格式的错误信息.下一篇我会介绍如何用easywechat做一个微信网页授权登录