easywechat 公众号 注册自动绑定微信
composer 安装 easywechat
官方文档:https://www.easywechat.com/
1.在app\Http\Kernel.php 路由中间件$routeMiddleware 里面添加中间件
'wechat.oauth' => \Overtrue\LaravelWeChat\Middleware\OAuthAuthenticate::class,
2.路由中使用中间件
Route::any('register', 'IndexController@register')->name('m.register')->middleware('wechat.oauth');
3.在中间件VerifyCsrfToken 排除csrf验证路由
protected $except = [ 'wechat_notify', 'ali_notify', 'wechat', 'wechat/*', 'payments/*', ];
4.获取用户信息 session('wechat.oauth_user.default')
public function register(Request $request){
$current_name = '注册';
$menu = 'member';
if($request->isMethod('post'))
{
$openid = trim($request->get('openid'));
$name = trim($request->get('name'));
$email = trim($request->get('email'));
$password = trim($request->get('password'));
$password2 = trim($request->get('repassword'));
$phone = trim($request->get('phone'));
$code = trim($request->get('code'));
$company_name = trim($request->get('company_name'));
$identity = 'buyer,seller';
if($email){
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
return Y::error('邮箱验证失败!',["code"=>"ERROR_FORMAT"]);
}
//判断邮箱是否已经注册
if(Member::where('email','=',$email)->first()){
return Y::error('邮箱已被注册!' ,["code"=>"EMAIL_ERROR"]);
}
}
if($password !=$password2){
return Y::error('两次密码不一致!',["code"=>"ERROR_PASSWORD"]);
}
//判断手机号码是否注册
if($phone){
if(Member::where('phone','=',$phone)->first()){
return Y::error('手机号码已被注册!' ,["code"=>"PHONE_ERROR"]);
}
}
//判断手机验证码是否正确
$phoneCode = SmsCode::where(['phone' => $phone])->where(['code' => $code])->where(['type' => 'register'])->where(['status' => 1])->where('created_at', '>', date("Y-m-d H:i:s", strtotime("-10 minute")))->first();
if (!$phoneCode) {
return Y::error('手机短信验证码不正确!', ["code" => "VERIFY_ERROR"]);
}
//关联用户和公司,先判断公司是否存在,允许一家公司多个账号存在
$company = Company::where("name_cn", "=", $company_name)->first();
if(!$company){
$companyArr = array(
'name_cn'=> $company_name,
'from'=>'m'
);
$company = Company::create($companyArr);
$company_id = $company->id;
}else{
$company_id = $company->id;
}
$user = array(
'identity'=>$identity,
'username'=>Common::createUserName(),
'name'=>$name,
'email'=>$email,
'phone'=>$phone,
'password'=>Hash::make($password),
'company_name'=>$company_name,
'company_id'=>$company_id,
'from'=>'m'
);
if ($member = Member::create($user)){
$this->guard()->login($member);
//更改短信验证码状态
$phoneCode->status = 0;
$phoneCode->save();
//绑定微信公众号openid
if($openid){
MemberConnect::where('openid', '=', $openid)->update(
array(
'member_id'=>$member->id
)
);
}
}
return Y::success('注册成功!' ,["code"=>"SUCCESS"]);
}
else
{
$openid = '';
try{
//拿到授权用户资料
$wechat = session('wechat.oauth_user.default');
$wechat_info = $wechat->original;
$openid = isset($wechat_info['openid'])?$wechat_info['openid'] : '';
//没有connect 先新建
$memberConnect = MemberConnect::where('openid', '=', $openid)->first();
if(!$memberConnect && $openid !='') {
Log::info('original', $wechat_info);
$user_info = array(
'openid'=>$wechat_info['openid'],
'nickname'=>$wechat_info['nickname'],
'headimgurl'=>$wechat_info['headimgurl'],
'sex'=>$wechat_info['sex'],
'country'=>$wechat_info['country'],
'province'=>$wechat_info['province'],
'city'=>$wechat_info['city'],
);
Log::info('user_info', $user_info);
//没保存先保存memberConnect
Common::createMemberConnect($user_info, 3);
}
}catch (Exception $e){
Log::info('reg_exception', [$e]);
}
return view('new_m.index.register', compact('current_name', 'menu', 'openid'));
}
}