AuthController.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. $key = config('weiXin.jwt.JWT_SECRET');
  57. $alg = 'HS256';
  58. $token = JWT::encode($payload,$key,$alg);
  59. return $token;
  60. }
  61. public function banding(Request $request): \Illuminate\Http\JsonResponse
  62. {
  63. if (!$request->input('code'))return $this->error('code 不能为空!');
  64. $requests= [
  65. 'appid'=>config('weiXin.xiaoChengXu.appId'), //小程序appid
  66. 'secret'=>config('weiXin.xiaoChengXu.appSecret'), //小程序appsecret
  67. 'js_code'=>$request->input('code'),
  68. 'grant_type'=>'authorization_code',
  69. ];
  70. $url='https://api.weixin.qq.com/sns/jscode2session?';
  71. $get=Http::get($url,$requests);
  72. $resp=$get->json();
  73. if (!$resp['openid']) return $this->error('授权失败,无法获取openid');
  74. UserDetail::query()
  75. ->where('user_id',Auth::user()['id'])
  76. ->update(['procurement_wechat_open_id'=>$resp['openid'],]);
  77. // return $this->success($resp['openid'],'获取openID成功');
  78. }
  79. }