118 lines
3.5 KiB
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 '解绑成功';
|
|
}
|
|
}
|