QrcodeController.php 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Helpers\PhoneHelper;
  5. use App\Models\QrcodeRecord;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Http;
  8. class QrcodeController extends Controller
  9. {
  10. public function generate(Request $request)
  11. {
  12. $validator = \Validator::make($request->all(), [
  13. 'tel' => 'required|digits:10',
  14. ]);
  15. if ($validator->fails()) {
  16. return response()->json([
  17. 'success' => false,
  18. 'message' => $validator->errors()->first(),
  19. ], 422);
  20. }
  21. $tel = $request->input('tel');
  22. $outletid = '';
  23. $logkey = config('app.oneapp_logkey');
  24. $baseUrl = config('app.oneapp_base_url');
  25. // Step 1: 取得 oneTimeKey
  26. $step1 = Http::post("{$baseUrl}/API/GetPrivateKey.ashx", [
  27. 'outletid' => $outletid,
  28. 'tel' => $tel,
  29. 'logkey' => $logkey,
  30. ]);
  31. if (!$step1->json('Success')) {
  32. return response()->json(['success' => false, 'message' => 'GetPrivateKey failed'], 400);
  33. }
  34. $oneTimeKey = $step1->json('data.oneTimeKey');
  35. // Step 2: 取得 User Data
  36. $step2 = Http::post("{$baseUrl}/API/GetUserData.ashx", [
  37. 'oneTimeKey' => $oneTimeKey,
  38. ]);
  39. if (!$step2->json('Success')) {
  40. return response()->json(['success' => false, 'message' => 'GetUserData failed'], 400);
  41. }
  42. $data = $step2->json('data');
  43. // Step 3: 處理資料
  44. $encryptedPhone = PhoneHelper::encrypt($tel);
  45. $maskedPhone = substr($tel, 0, 2) . '*****' . substr($tel, 7);
  46. // Step 4: 寫入紀錄
  47. QrcodeRecord::create([
  48. 'outlet_id' => $data['outletid'],
  49. 'outlet_name' => $data['name'],
  50. 'name' => $data['username'],
  51. 'phone' => $encryptedPhone,
  52. 'phone' => $tel,
  53. 'qr_generated_at' => now(),
  54. ]);
  55. // Step 5: 回傳
  56. return response()->json([
  57. 'success' => true,
  58. 'data' => [
  59. 'otid' => $data['otid'],
  60. 'outletid' => $data['outletid'],
  61. 'name' => $data['name'],
  62. 'phone' => $encryptedPhone,
  63. 'phone_masked' => $maskedPhone,
  64. ],
  65. ]);
  66. }
  67. }