AuthController.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace App\Http\Controllers\api\thirdPart\weixin;
  3. use App\Components\ApiProcurementResponse;
  4. use App\User;
  5. use App\UserDetail;
  6. use Firebase\JWT\JWT;
  7. use App\Http\Controllers\Controller;
  8. use Illuminate\Database\Eloquent\Builder;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Hash;
  12. use Illuminate\Support\Facades\Http;
  13. class AuthController extends Controller
  14. {
  15. use ApiProcurementResponse;
  16. public function login(): \Illuminate\Http\JsonResponse
  17. {
  18. $phone=request('phone');
  19. $password = request("password");
  20. $user=User::query()->with('roles')
  21. ->whereHas('userDetail',function ($query)use($phone){
  22. /** @var Builder $query */
  23. $query->where('mobile_phone',$phone);
  24. })->whereHas('roles',function ($builder){
  25. /** @var Builder $builder */
  26. $builder->whereIn('name',['供应商','收货员']);
  27. })
  28. ->first();
  29. if (!$user)return $this->error('当前用户不存在');
  30. if (!Hash::check($password,$user->password))return $this->error('很抱歉,您的手机号和密码不匹配');
  31. $credentials = [
  32. 'id'=>$user->id,
  33. 'name'=>$user->name,
  34. ];
  35. $token = $this->getJWTToken($credentials);
  36. $userType=0;
  37. foreach ($user->roles as $role){
  38. if ($role->name=='供应商')$userType=1;
  39. if ($role->name=='收货员')$userType=2;
  40. }
  41. return $this->success($token,$userType);
  42. }
  43. public function getJWTToken($value): string
  44. {
  45. $time = time();
  46. $payload = [
  47. 'iat' => $time,
  48. 'nbf' => $time,
  49. 'exp' => $time+7200,
  50. 'data' => [
  51. 'id' => $value['id'],
  52. 'name' => $value['name']
  53. ]
  54. ];
  55. $key = env('JWT_SECRET');
  56. $alg = 'HS256';
  57. $token = JWT::encode($payload,$key,$alg);
  58. return $token;
  59. }
  60. public function banding(Request $request): \Illuminate\Http\JsonResponse
  61. {
  62. if (!$request->input('code'))return $this->error('code 不能为空!');
  63. $requests= [
  64. 'appid'=>config('weiXin.xiaoChengXu.appId'), //小程序appid
  65. 'secret'=>config('weiXin.xiaoChengXu.appSecret'), //小程序appsecret
  66. 'js_code'=>$request->input('code'),
  67. 'grant_type'=>'authorization_code',
  68. ];
  69. $url='https://api.weixin.qq.com/sns/jscode2session?';
  70. $get=Http::get($url,$requests);
  71. $resp=$get->json();
  72. if (!$resp['openid']) return $this->error('授权失败,无法获取openid');
  73. UserDetail::query()
  74. ->where('user_id',Auth::user()['id'])
  75. ->update(['procurement_wechat_open_id'=>$resp['openid'],]);
  76. return $this->success($resp['openid'],'获取openID成功');
  77. }
  78. }