· 5 years ago · Apr 16, 2020, 05:22 AM
1<?php
2/***
3* === English ===
4* PHP API Using Devkurov Facebook API
5* Based on Facebook API SDK JS V.6.0
6* Based on Application: https://devkurov.in.th
7* Authorize: Tuntikorn Supapkul
8*
9* *** Requirement ***
10* PHP v.5.4.0++ (Recommended PHP7+ or lastest for anti-hack)
11*
12* === Thai ===
13* PHP API ใช้แอพของ Devkurov Facebook API
14* อ้างอิงถึง Facebook API SDK JS V.6.0
15* อ้างอิงถึงแอพลิเคชัน: https://devkurov.in.th
16* ผู้จัดทำ: ตันติกร สุภาพกุล
17*
18* *** ความต้องการของระบบ ***
19* PHP v.5.4.0 ขึ้นไป (แนะนำ PHP7+ หรืออัพเดทล่าสุดตลอดเวลา เพื่อป้องกันช่องโหว่ระบบ)
20**/
21
22class devkurov_fbapp
23{
24 //secret key ที่ตั้งค่าในระบบ FB API
25 protected $secret_key = "your_secret_key";
26 //หากใช้ php 5.6 ขึ้นไปให้เปลี่ยนเป็น true ครับ
27 protected $php56_mode = false;
28
29 /***
30 * ========================================
31 * ตั้งแต่ช่วงนี้ จะเป็น Core Script Library กรุณาอย่าแก้ไขด้วยตนเองหากไม่มีความเข้าใจที่ถูกต้องนะครับ
32 * ========================================
33 **/
34
35 /***
36 * Construct function
37 * เรียกใช้ฟังก์ชัน Data_prepare เพื่อเตรียมข้อมูล request input ทั้งหมด
38 **/
39 public function __construct()
40 {
41 $hashed_key = (!empty($_POST["secret_key"])) ? $_POST["secret_key"] : null;
42 if(!empty($hashed_key)){
43 return $this->API_CheckSecretKey($hashed_key);
44 }
45 $data["message"] = "ตรวจสอบ API_KEY ล้มเหลว, กรุณาติดต่อ GM";
46 return $this->response($data, false);
47 }
48
49 /***
50 * Data Prepare function
51 * เตรียมข้อมูล Request เพื่อทำงานต่อ
52 * - ต้องการ input "action_type" เพื่อเลือกการกระทำต่อไป
53 * *** เมนูการกระทำ ***
54 * 1 = ตรวจสอบสถานะ API
55 * 2 = ตรวจสอบสถานะ User Account ว่าตรวจพบข้อมูลหรือไม่ ก่อนทำการแชร์ (ต้องการ input "game_account")
56 * 3 = เพิ่มเติมให้ User Account เมื่อแชร์โพสต์สำเร็จ (รับ input "game_account" และ "post_shared" และ "fb_uid")
57 **/
58 public function Data_prepare()
59 {
60 $data = [];
61 $username = (!empty($_POST["game_account"])) ? $_POST["game_account"] : null;
62 $type = (!empty($_POST["action_type"])) ? (int)$_POST["action_type"] : 0;
63 switch($type){
64 case 1: return $this->API_CheckStatus();
65 break;
66 case 2: return $this->API_CheckAccount($username);
67 break;
68 case 3: return $this->API_PostShared($username);
69 break;
70 default: return $this->response($data, false);
71 break;
72 }
73 return $this->response($data, false);
74 }
75
76 /***
77 * API CheckKey function
78 * ตรวจสอบ Secret Key เพื่อป้องกันการเรียกใช้ API โดยไม่ได้รับอนุญาติ
79 **/
80 private function API_CheckSecretKey($hashed_key)
81 {
82 $hash_localkey = hash_hmac("sha256", "devkurov", $this->secret_key);
83
84 if($this->php56_mode && !hash_equals($hashed_key, $hash_localkey)){
85 $data["message"] = "ตรวจสอบ API_KEY ล้มเหลว, กรุณาติดต่อ GM";
86 return $this->response($data, false);
87 }else if($hashed_key !== $hash_localkey){
88 $data["message"] = "ตรวจสอบ API_KEY ล้มเหลว, กรุณาติดต่อ GM";
89 return $this->response($data, false);
90 }
91 return $this->Data_prepare();
92 }
93
94 /***
95 * API CheckStatus function
96 * ส่งกลับสถานะ API เป็น true เพื่อยืนยันการเชื่อมต่อ API
97 **/
98 private function API_CheckStatus()
99 {
100 $data["api_status"] = true;
101 return $this->response($data);
102 }
103
104 /***
105 * API CheckAccount function
106 * ส่งกลับสถานะ game_account ว่าตรวจพบหรือไม่
107 * ทำงานร่วมกับ Script_CheckAccount
108 **/
109 private function API_CheckAccount($username)
110 {
111 if($this->Script_CheckAccount($username)){
112 $data["game_account"] = true;
113 return $this->response($data);
114 }
115 $data["game_account"] = false;
116 return $this->response($data, false);
117 }
118
119 /***
120 * API PostShared function
121 * ส่งกลับ success ว่าสำเเร็จหรือไม่ (true / false)
122 * ทำงานร่วมกับ Script_SharedDone
123 **/
124 private function API_PostShared($username)
125 {
126 $post_shared = (!empty($_POST["post_shared"])) ? $_POST["post_shared"] : false;
127 $facebook_uid = (!empty($_POST["fb_uid"])) ? (int)$_POST["fb_uid"] : 0;
128 if($this->Script_SharedDone($username, $facebook_uid, $post_shared)){
129 return $this->response(null, true);
130 }
131 $data["message"] = "UPDATE ข้อมูลล้มเหลว, กรุณาติดต่อ GM";
132 return $this->response($data, false);
133 }
134
135 /***
136 * Response function
137 * ส่งกลับข้อมูลต่างๆเป็น JSON RESPONSE
138 **/
139 public function response($data=[], $success = true, $code = 200)
140 {
141 $data["success"] = $success;
142 echo json_encode($data);
143 return $this->httpresponse($code);
144 }
145
146 /***
147 * HTTP Response function
148 * ส่งกลับสถานะต่างๆของ HTTP
149 **/
150 public function httpresponse($code = 200)
151 {
152 http_response_code($code);
153 header("Content-type: application/json");
154 }
155
156 /***
157 * ========================================
158 * ตั้งแต่ช่วงนี้จะเป็น Custom Script ของท่านนะครับ เพื่อส่งกลับค่าต่างๆที่ API ต้องการ
159 * ========================================
160 **/
161
162 /***
163 * Script_CheckAccount
164 * - ข้อมูลนำเข้า $username = string เป็น ID เกมหรือ Email ฯลฯ ที่ให้ผู้เล่นกรอกในช่องตรวจสอบ ID
165 * @ การ Return ค่า
166 * true = จริง กรณีเมื่อพบข้อมูลผู้เล่น (กรอก id ถูกต้อง)
167 * false = เท็จ กรณีเมื่อค้นหาไม่พบข้อมูลผู้เล่น (กรอก id ผิด)
168 **/
169 private function Script_CheckAccount($username)
170 {
171 /***
172 * ตัวอย่าง Script RO
173 **/
174 $con = $this->Script_ConnectDB();
175
176 //SQL Statement
177 $stmt = $con->prepare("SELECT account_id FROM login WHERE userid='?' LIMIT 1");
178 $stmt->bind_param("s", $username);
179 $stmt->execute();
180
181 $stmt->fetch();
182 $count_row = $stmt->num_rows;
183 $stmt->close();
184
185 //return true or false
186 if($count_row > 0){
187 return true;
188 }
189 return false;
190 }
191
192 /***
193 * Script_SharedDone
194 * ***รับค่าข้อมูลจาก API ดังนี้***
195 * - $username = username ที่อ้างอิงแบบเดียวกับ Script_CheckAccount
196 * - $facebook_uid = facebook uid ที่ทำการแชร์ (จะเอาข้อมูลไปใช้เก็บ log, etc ตามสบาย)
197 * - $post_shared = true/false เมื่อผู้เล่นแชร์ไปอย่างถูกต้องค่านี้จะเป็น true (ไม่จำเป็นต้องเช็คต่อ api จะส่งค่ามาก็ต่อเมื่อ true เท่านั้น)
198 * ***การส่งกลับค่า***
199 * return true เมื่อทำรายการอย่างถูกต้อง และระบบ API จะบันทึกประวัติการแชร์+คูลดาวน์
200 * return false เมื่อระบบทำงานผิดพลาดโดย API จะไม่บันทึกประวัติการแชร์นั้น
201 **/
202 private function Script_SharedDone($username, $facebook_uid, $post_shared)
203 {
204 /***
205 * ตัวอย่าง Script RO
206 * ตาราง login = ตารางเดียวกับเก็บข้อมูล id
207 * ฟิลด์ที่เก็บแต้ม = share_point
208 **/
209 $con = $this->Script_ConnectDB();
210
211 //SQL Statement
212 $stmt = $con->prepare("UPDATE share_point FROM login WHERE userid='?'");
213 $stmt->bind_param("s", $username);
214
215 //return true or false
216 if($stmt->execute() === false){
217 $stmt->close();
218 return false;
219 }
220 $stmt->close();
221 return true;
222 }
223
224 /***
225 * Custom Script ConnectDB
226 * สามารถดัดแปลงเองได้ ตามความต้องการครับ
227 * อันนี้เป็นตัวอย่างฟังก์ชั่นเรียกการเชื่อมต่อ DB ของท่าน
228 **/
229 private function Script_ConnectDB()
230 {
231 $host = "localhost";
232 $user = "root";
233 $pass = "";
234 $database = "laravel_ragnarok";
235 $con = new mysqli($host, $user, $pass, $database);
236
237 if($con->connect_error){
238 //เรียก response กลับเป็นข้อความได้ครับ
239 $data["message"] = "เชื่อมต่อ DB ล้มเหลว, กรุณาติดต่อ GM";
240 return $this->response($data, false, 200);
241 }
242 return $con;
243 }
244
245}//end class
246$app = new devkurov_fbapp(); // call class instance
247?>