HealthyPassPortController.php 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Carbon\Carbon;
  4. use App\Models\Tag;
  5. use App\Models\Survey;
  6. use Illuminate\Http\Request;
  7. use GuzzleHttp\Client;
  8. use Illuminate\Support\Facades\Log;
  9. use Illuminate\Support\Facades\Storage;
  10. class HealthyPassPortController extends Controller
  11. {
  12. private $api_header = array();
  13. public function __construct()
  14. {
  15. $this->api_header = [
  16. 'Authorization' => 'Bearer ' . config('botApi.botToken'),
  17. 'Accept' => 'application/json'
  18. ];
  19. }
  20. public function file(Request $request){
  21. }
  22. public function profile(Request $request){
  23. $profile = Survey::where('line_user_id',$request->lineUserId)->first();
  24. $profile_tag_list = $profile->getTagList();
  25. }
  26. /**
  27. * 送出問卷
  28. *
  29. */
  30. public function post(Request $request){
  31. $lineUserId = $request->lineUserId; //line UID
  32. $headSticker = $request->headSticker; //頭貼
  33. $healthAction = $request->healthAction; //平常你有什麼健康行動(複選)
  34. $healthTopic = $request->healthTopic; //你對什麼健康話題有興趣(複選)
  35. $healthStatus = $request->healthStatus; //你覺得自己的身體狀況如何
  36. $healthAdapt = $request->healthAdapt; //面對疫情趨緩,以下哪一個敘述最符合你的應對
  37. $healthThought = $request->healthThought; //下列哪一個敘述最符合你的想法
  38. $healthAge = $request->healthAge; //你的年齡
  39. $healthNickname = $request->healthNickname; //暱稱
  40. $healthGender = $request->healthGender; //性別
  41. $healthGenderRole = $request->healthGenderRole;//性別 male or female
  42. $buildActions = [];
  43. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAction));
  44. array_push($buildActions, $this->buildActionsRequest("addTag", $healthTopic));
  45. array_push($buildActions, $this->buildActionsRequest("addTag", $healthStatus));
  46. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAdapt));
  47. array_push($buildActions, $this->buildActionsRequest("addTag", $healthThought));
  48. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAge));
  49. array_push($buildActions, $this->buildActionsRequest("addTag", $healthGender));
  50. if($healthGenderRole != "")array_push($buildActions, $this->buildActionsRequest("saveParams", $healthGenderRole, "demographics", "gender"));
  51. $statusCode = $this->botActionsSend($lineUserId,$buildActions);
  52. if($statusCode == 200){
  53. //確認完成填寫問卷後,建立完成問券標籤
  54. $buildActions = [];
  55. array_push($buildActions, $this->buildActionsRequest("addTag", config("botApi.doneSurvey")));
  56. array_push($buildActions, $this->buildActionsRequest("setMenu", config("botApi.setMenuDoneSurvey")));
  57. $this->botActionsSend($lineUserId,$buildActions);
  58. return response()->json(["result" => 'successed']);
  59. }else{
  60. return response()->json(["result" => 'failed'] );
  61. }
  62. }
  63. function buildActionsRequest($type, $values, $groupId = null, $paramName = ""){
  64. if($type == "addTag"){
  65. if(is_array($values)){
  66. $tags = $values;
  67. }else{
  68. $tags = [$values];
  69. }
  70. return [
  71. "type" => $type,
  72. "value" => $tags
  73. ];
  74. }elseif($type == "saveParams"){
  75. return [
  76. "type" => $type,
  77. "groupId" => $groupId,
  78. "values" => [
  79. [
  80. "name" => $paramName,
  81. "value" => $values
  82. ]
  83. ]
  84. ];
  85. }elseif($type == "setMenu"){
  86. return [
  87. "type" => $type,
  88. "platform" => 1,
  89. "value" => $values
  90. ];
  91. }
  92. }
  93. function botActionsSend($lineUserId,$actions){
  94. $client = new Client();
  95. $res_users = $client->request('POST', config('botApi.botActions'),[
  96. 'headers'=>$this->api_header,
  97. 'json' => [
  98. 'userId' => $lineUserId,
  99. 'pageId' => config('botApi.lineOAId'),
  100. 'platform' => 1,
  101. 'actions' => $actions
  102. ]
  103. ]);
  104. $statusCode = $res_users->getStatusCode();
  105. return $statusCode;
  106. }
  107. }