|
|
|
การใช้ webservece ของไปรษณีย์ ในการตรวจสอบสถานะพัสุด |
|
|
|
|
|
|
|
บอกตรงๆ ครับ ผมงงคนถาม ทำไมไม่เข้าไปถามกับ ไปรณีย์ โดยตรงเลยล่ะครับ
เขาก็เปิด ให้เราเข้าไปสอบถาม ขอรายละเอียดการเชื่อมต่ออยู่แล้วนะครับ
คือกะจะไม่หา ไม่อ่าน ไม่ทำเอง หรือเปล่าครับ ถ้าอย่างนั้นประกาศจ้างดีกว่าไหม
บอกตรงๆ หงุดหงิดมาก คือกะจะเอาอย่างเดียวไม่คิดจะให้เขาบ้างเลยเหรอครับ
คือถ้าถามแล้วเขียนโค๊ดออกมาแล้ว แก้ไขไม่ได้ซักที
เอาโค๊ดมาสอบถามทำไม่ถีงไม่ได้ซักที มีเออเร่อร์แบบนี้ แบบนั้น ถามแบบมืออาชีพ
หรือมือสมัครเล่นแต่ดูแล้วขวนขวายหาความรู้ แบบนี้ยินดีช่วยเต็มทีเลยครับ
ไม่ใช่ยังไม่เป็นอะไรเลย แล้วอยากได้งาน หรือเป็นแล้วแต่ขี้เกียจ มันก็ไม่ไหวจะตอบเหมือนกัน
|
|
|
|
|
Date :
2020-03-14 13:05:26 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือทำบ้างแล้วครับ
<?php
$api_token_url = 'https://trackapi.thailandpost.co.th/post/api/v1/authenticate/token';
$api_track_url = 'https://trackapi.thailandpost.co.th/post/api/v1/track';
$token_key = ' COHXP2M!FcYFV0PjUVKnXMW;CqI+YUDTD#APAfNBNcT&RQP$TJN+V$UHHMU_UoI?QKQ8ApU4N3YhJLUwRuOlU9NSO|I:WgEYX+G&';
function api_request($url, $token, $content = null){
$headers = array(
'Authorization: Token '. $token,
'Content-Type: application/json'
);
//echo"$headers";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($content) );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec( $ch );
curl_close($ch);
return json_decode($result, true);
}
$items = "[
'status' => 'all',
'language' => 'TH',
'barcode' => [
' RE461746287TH'
]
]";
$res_token = api_request($api_token_url, $token_key);
$res_items = api_request($api_track_url, $res_token['token'], $items);
print_r($res_items); //ผลลัพธ์
?>
แต่มัน error ว่า Parse error: syntax error, unexpected '[' in C:\AppServ\www\taxq\track1.php on line 27
|
|
|
|
|
Date :
2020-03-16 09:00:00 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
$items = [
'status' => 'all',
'language' => 'TH',
'barcode' => ['RE461746287TH']
];
$res_token = api_request($api_token_url, $token_key);
$res_items = api_request($api_track_url, $res_token['token'], json_encode($items));
print_r($res_items); //ผลลัพธ์
ลองดูครับ เอามาแบบนี้ซะทีแรก ก็น่าจะจบไปแล้ว
มันเป็นปัญหาจากไวยกรณ์
ที่มัน error เพราะ สิ่งที่ครอบอยู่ เป็น double quote ข้อมูลภายใน quote จะมีการอ้างอิงตัวแปร array อะไรต่าง
ต้องมีการ escape อักขระพิเศษด้วย
เช่น $a = "\[ 'abcdef' \]";
ส่วนตัวอย่างที่ผมเขียนให้ดู ใช้ object และเปลี่ยน object เป็น string อีกที ด้วย json_encode ไม่ต้องกลัวเรื่อง อักขระพิเศษ
ปล.แก้ไขตัด json_encode จากตรงนี้ออกเลยครับ ดู funcion มีการ encode แล้ว
|
ประวัติการแก้ไข 2020-03-16 09:58:37 2020-03-16 10:03:42
|
|
|
|
Date :
2020-03-16 09:47:29 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<?php
function api_request($url, $token, $content = null){
$headers = array(
'Authorization: Token '. $token,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($content) );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec( $ch );
curl_close($ch);
return json_decode($result, true);
}
$items = "[
'status' => 'all',
'language' => 'TH',
'barcode' => ['RE461746287TH'] // บันทัดนี้ barcode มันต้องเป็น array จริงหรือเปล่า
]";
$api_token_url = 'https://trackapi.thailandpost.co.th/post/api/v1/authenticate/token';
$api_track_url = 'https://trackapi.thailandpost.co.th/post/api/v1/track';
$token_key = 'COHXP2M!FcYFV0PjUVKnXMW;CqI+YUDTD#APAfNBNcT&RQP$TJN+V$UHHMU_UoI?QKQ8ApU4N3YhJLUwRuOlU9NSO|I:WgEYX+G&';
$res_token = api_request($api_token_url, $token_key);
$res_items = api_request($api_track_url, $res_token['token'], json_encode($items));
print_r($res_items); //ผลลัพธ์
?>
ลองแก้แล้วครับ
ไม่ขึ้น error แต่ขึ้นข้อความนี้แทน
405 Not Allowed
nginx/1.12.2
|
|
|
|
|
Date :
2020-03-16 10:17:44 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ต้องไปอ่าน error ในลิงค์ของ ไปรษณีย์ครับ มีบอก error อะไรต่างๆ เอาไว้
|
|
|
|
|
Date :
2020-03-16 10:40:11 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แสดงว่าโค้ดไม่ได้ผิดแล้ว
error ของไปรษณีย์ก็ไม่มี error ตัวนี้อีก
จะลองแก้ต่อไปครับยังไงก็ขอบคุณมากนะครับ
|
|
|
|
|
Date :
2020-03-16 11:05:26 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$res_items = api_request($api_track_url, $res_token['token'], json_encode($items));
สีแดงผมแก้ใน คห เก่า ให้เอา json_encode ออกนะครับ เพราะใน function มันมีแล้ว
|
|
|
|
|
Date :
2020-03-16 11:23:28 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับ เห็นแล้วครับ แต่ถึงเอาออกก็ไม่ได้ยังขึ้น 405 อยู่ดีครับ
กำลังสงสัยตัวแปร $headers กับ $items ว่ามันส่งค่ากันยังไง มันมีค่าส่งไปเปล่า
|
|
|
|
|
Date :
2020-03-16 11:47:47 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$items = "[
'status' => 'all',
'language' => 'TH',
'barcode' => ['RE461746287TH']
]";
ตัวอย่างผมไม่มี double quote สีแดงนะครับ
|
|
|
|
|
Date :
2020-03-16 12:00:47 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าไม่มีมันจะ error ตรง
Parse error: syntax error, unexpected '[' in C:\AppServ\www\taxq\track1.php on line 25
ซึ่งบรรทัดที่ 25 คือ $items = [ อันนี้ครับ
|
|
|
|
|
Date :
2020-03-16 15:20:58 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double quote หัวท้ายนะครับ
php version ไหนครับเนี่ย
ถ้าไม่ได้ เขียนแบบนี้แทนครับ
$items = array('status' => 'all', 'language' => 'TH', 'barcode' =>array('RE461746287TH'));
แต่มันต้องได้สิ
Code (PHP)
$items = ['status' => 'all', 'language' => 'TH', 'barcode' => ['RE461746287TH']];
|
|
|
|
|
Date :
2020-03-16 15:30:26 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
php 5.2.3
กำลังสงสัยยู่ว่าเก่าไปไหมครับ
|
|
|
|
|
Date :
2020-03-16 16:12:51 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55555 เปลี่ยนได้ก็ดีครับ
แต่ให้ใช้แบบนี้แทน
$items = array('status' => 'all', 'language' => 'TH', 'barcode' =>array('RE461746287TH'));
5.3 + จะอ้างอิง array แบบนี้ ได้ ครับ $a = ['data','1',2'];
ถ้าจะเปลี่ยนก็ใช้ 7+ ไปเลยครับ แข็งแรงกว่ากันเยอะ
แต่ถ้าไม่เปลี่ยน มันต้องเขียนระวังเยอะมาก เครื่องมือในการป้องกันการโดน แฮ็คมีน้อย
ต้องใช้แรงมากในการเขียน แต่ก็ยังใช้ได้ครับ
|
|
|
|
|
Date :
2020-03-16 17:50:35 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองแก้แล้วครับก็ยังขึ้น
405 Not Allowed
เหมือนเดิม
|
|
|
|
|
Date :
2020-03-17 09:08:03 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
https://www.restapitutorial.com/httpstatuscodes.html
405 คือ method not allowed ไม่ใช่ not allowed เฉยๆ
ปัญหานี้มักมาจาก method GET,POST,PUT,etc อะไรก็ตาม ใช้ไม่ตรงที่เขามีรองรับ
ในหน้าเอกสารของปณ.ดูเหมือนจะเริ่มต้นกับการ get token ดังนั้นเอาแค่ตรงนี้ก่อนเลยว่ามันผ่านหรือไม่ผ่าน ยังไม่ต้องเอาอย่างอื่น แล้วเขียนแบบเรียบง่ายที่สุดด้วย เพื่อทดลองหาข้อผิดพลาด พร้อมทั้งเปิด error ให้หมดทุกอย่าง (หาวิธีตั้ง php.ini สำหรับ development เอา เคยบอกไปเยอะแล้ว)
|
|
|
|
|
Date :
2020-03-17 09:27:36 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Array ( [response] => Array ( [items] => Array ( [EF488252529TH] => Array ( [0] => Array ( [barcode] => EF488252529TH [status] => 103 [status_description] => รับฝาก [status_date] => 28/09/2562 09:30:03+07:00 [location] => บ่อวิน [postcode] => 20234 [delivery_status] => [delivery_description] => [delivery_datetime] => [receiver_name] => [signature] => ) [1] => Array ( [barcode] => EF488252529TH [status] => 201 [status_description] => อยู่ระหว่างการขนส่ง [status_date] => 28/09/2562 10:29:23+07:00 [location] => บ่อวิน [postcode] => 20234 [delivery_status] => [delivery_description] => [delivery_datetime] => [receiver_name] => [signature] => ) [2] => Array ( [barcode] => EF488252529TH [status] => 201 [status_description] => อยู่ระหว่างการขนส่ง [status_date] => 28/09/2562 23:30:12+07:00 [location] => ศป.ศรีราชา [postcode] => 20010 [delivery_status] => [delivery_description] => [delivery_datetime] => [receiver_name] => [signature] => ) [3] => Array ( [barcode] => EF488252529TH [status] => 206 [status_description] => ถึงที่ทำการไปรษณีย์ [status_date] => 29/09/2562 04:43:40+07:00 [location] => อ่าวอุดม [postcode] => 20230 [delivery_status] => [delivery_description] => [delivery_datetime] => [receiver_name] => [signature] => ) [4] => Array ( [barcode] => EF488252529TH [status] => 301 [status_description] => อยู่ระหว่างการนำจ่าย [status_date] => 30/09/2562 12:40:07+07:00 [location] => อ่าวอุดม [postcode] => 20230 [delivery_status] => [delivery_description] => [delivery_datetime] => [receiver_name] => [signature] => ) [5] => Array ( [barcode] => EF488252529TH [status] => 501 [status_description] => นำจ่ายสำเร็จ [status_date] => 30/09/2562 12:41:09+07:00 [location] => อ่าวอุดม [postcode] => 20230 [delivery_status] => S [delivery_description] => ผู้รับได้รับสิ่งของเรียบร้อยแล้ว [delivery_datetime] => 30/09/2562 12:41:09+07:00 [receiver_name] => วิเชียร /ผู้รับรับเอง [signature] => https://trackimage.thailandpost.co.th/f/signature/QDUyNTI5YjVzMGx1VDMz/QGI1c0VGMGx1VDMx/QGI1czBsVEh1VDM0/QGI1czBsdTQ4ODJUMzI= ) ) ) [track_count] => Array ( [track_date] => 17/03/2563 [count_number] => 28 [track_count_limit] => 1000 ) ) [message] => successful [status] => 1 )
ได้มาประมาณนี้แล้ว
เราจะแปลงจาก array มาเป็น string ยังไงครับ
|
|
|
|
|
Date :
2020-03-17 12:03:30 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่ต้องแปลงครับ ข้อมูลเป็น text ในรูปแบบ array อยู่แล้ว แค่กำหนด position ให้ถูกต้องเป็นพอครับ
|
|
|
|
|
Date :
2020-03-17 12:08:31 |
By :
Genesis™ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังไงเหรอครับ รบกวนขอคำแนะนำครับ
|
|
|
|
|
Date :
2020-03-17 13:04:32 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอเค ได้แล้วครับ ขอบคุณทุกๆท่านมากๆครับ
โดยเฉพาะคุณ Chaidhanan
|
|
|
|
|
Date :
2020-03-17 13:15:22 |
By :
coop_korat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
document มีบอก
Code (PHP)
<?php
$someJSON = '[{
"items": [
{
"barcode": "EF023395845TH",
"status": "103",
"status_description": "รับฝาก",
"status_date": "04/06/2562 15:53:22+07:00",
"location": "ศูนย์ศิลปาชีพบางไทร",
"postcode": "13290",
"delivery_status": null,
"delivery_description": null,
"delivery_datetime": null,
"receiver_name": null,
"signature": null
},
{
"barcode": "ET180232600TH",
"status": "201",
"status_description": "อยู่ระหว่างการขนส่ง",
"status_date": "05/06/2562 14:42:03+07:00",
"location": "ศูนย์ศิลปาชีพบางไทร",
"postcode": "13290",
"delivery_status": null,
"delivery_description": null,
"delivery_datetime": null,
"receiver_name": null,
"signature": null
}
]
}]';
$someArray = json_decode($someJSON, true);
print_r($someArray); // Dump
echo '<br><br>Code : '.$someArray[0]['items'][0]['barcode'].'<br>'; // Access Array data
foreach($someArray as $items)
{
foreach($items as $item)
{
foreach($item as $arr)
{
print_r($arr);
}
}
}
|
ประวัติการแก้ไข 2020-03-17 13:37:40
|
|
|
|
Date :
2020-03-17 13:37:18 |
By :
Genesis™ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|