jingcai-php/app/Http/Controllers/Api/Seller/WechatController.php

118 lines
3.5 KiB
PHP

<?php
namespace App\Http\Controllers\Api\Seller;
use App\Enums\UserType;
use App\Model\Seller\Seller;
use App\Model\WechatUser;
use App\Service\External\WechatService;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Log;
class WechatController extends BaseController
{
// 静默授权
public function authorizeBase(Request $request, WechatService $wechatService)
{
$code = $request->input('code');
$url = env('WECHAT_AUTH_URL');
try {
$user = $wechatService->oauthSnsapiBaseUser($code);
} catch (\Exception $exception) {
Log::error('authorizeBase 获取token失败');
return redirect($url);
// return $this->jsonFailed('授权失败:'.$exception->getMessage());
}
Log::info('authorizeBase userInfo:', $user->toArray());
$tokenResp = $user->getTokenResponse();
$openId = Arr::get($tokenResp, 'openid');
if (!$openId) {
Log::error('authorizeBase 未获取到openid');
return redirect($url);
// return $this->jsonFailed('授权失败,请重试');
}
$wu = WechatUser::where('open_id', $openId)
->where('type', UserType::SELLER)
->first();
if (!$wu) {
$wu = new WechatUser();
$wu->open_id = $openId;
$wu->type = UserType::SELLER;
$wu->save();
}
return redirect($url. '?wid='.$wu->id);
}
public function bindSeller(Request $request)
{
$wid = $request->input('wid');
$phone = $request->input('phone');
$password = $request->input('password');
$openName = trim($request->input('openname'));
// $openNameLen = mb_strlen($openName);
// if ($openNameLen <=0 || $openNameLen > 6) {
// return $this->jsonFailed('接受者名称长度在1-6之间');
// }
$wecahtUser = WechatUser::find($wid);
if (!$wecahtUser) {
return $this->jsonFailed('授权失败,请重试');
}
$seller = Seller::where('phone', $phone)->first();
if (!$seller) {
return $this->jsonFailed('用户名或密码错误');
}
if (!Seller::checkPassword($password, $seller->password)) {
return $this->jsonFailed('用户名或密码错误');
}
$seller->wechat_user_id = $wecahtUser->id;
$seller->save();
return $this->jsonSuccess();
}
/**
* @param Request $request
* @return void
*/
public function unauthorizeBase(Request $request, WechatService $wechatService)
{
$code = $request->input('code');
try {
$user = $wechatService->oauthSnsapiBaseUser($code);
} catch (\Exception $exception) {
Log::error('unbindSeller 获取token失败:', [
'error' => $exception->getMessage()
]);
return '授权失败,请重试';
}
Log::info('unbindSeller userInfo:', $user->toArray());
$tokenResp = $user->getTokenResponse();
$openId = Arr::get($tokenResp, 'openid');
if (!$openId) {
Log::error('unbindSeller 未获取到openid');
return '授权失败,请重试!';
}
$wu = WechatUser::where('open_id', $openId)->first();
if ($wu) {
Seller::where('wechat_user_id', $wu->id)
->update([
'wechat_user_id' => 0
]);
}
return '解绑成功';
}
}