เรียกใช้งาน Lalamove API ดึงค่าขนส่ง แบบพี่วินนะ


วันนี้ผมจะมาเรียกใช้งาน lalamove แบบเรียกพี่วิน(มอเตอร์ไซส์) มารับของไปส่งให้ลูกค้า ภาษาที่เรียกใช้เป็น PHP เรียกผ่าน CURL นะครับ

เนื่องจาก API ที่ให้เรามามีเยอะมากๆๆๆ  ถ้าอยากรู้ส่วนไหนเพิ่มเติมสามารถอ่านได้เองเลยนะครับที่ https://developers.lalamove.com/

วันนี้ผมจะมาดูเฉพาะการเรียกดูราคาจาก ต้นทาง ส่งไป ยังปลาย ทางผู้รับนะครับ ผมดูจากตรงนี้นะครับ

https://developers.lalamove.com/#get-quotation


 - Postman เผื่อเรียกดู - optional

 - Service Types ของ lalamove ที่มีให้เรา

   - WALKER

   - MOTORCYCLE แบบที่เราจะใช้งานกัน

   - CAR

   - SEDAN

   - VAN

   - TRUCK175

   - TRUCK330

   - TRUCK550


Let's GOOOOO

1. สมัครสมาชิก สร้าง KEY ให้เรียบร้อยก่อน จะได้ API key กับ API secret มานะ

2. ไปดูตรง Authentication ก่อนนะครับ จะเกียวกับการ config ตรง lalamove

https://developers.lalamove.com/?shell#authentication

3. POST  ค่าไปยัง

Sandbox: https://rest.sandbox.lalamove.com/v3/quotations

Production: https://rest.lalamove.com/v3/quotations

- ค่าส่งที่ได้รับระหว่าง Sandbox กับ Production แตกต่างกันมา เหมือนจะสถานที่เดียวกันนะครับ (บอกไว้ก่อน) เพราะตอนผม dev ใช้ Sandbox ทำก็ งง ว่าเรียกไปแบบไปไกลมากๆๆๆๆ เป็น 10 10 โล ค่าส่งหลักสิบบาท

4. Script

หัวใจส่วนสำคัญจริง ก็คือ  lan lng  ของผู้ส่งและผู้ระบ และ serviceType แบบยานพาหนะที่จะส่ง

ผมขอไม่อธิบาย code นะครับ เนื่องจาก code อ่านง่ายมากๆ ต้องดูถึงจะเข้าใจนะครับ

if($dev){

$key = "pk_test_XXXXXXXXXXXXXXXXXXXX";
                $secret = "sk_test_XXXXXXXXXXXXXXXXXXX";
                $baseURL = "https://rest.sandbox.lalamove.com";

}

if($prod){

$key = "DDDDDDDDDDDDDDDDDDD";
                $secret = "WWWWWWWWWWW";
                $baseURL = "https://rest.lalamove.com";

}

 

$time = time() * 1000;

$method = 'POST';

$path = '/v2/quotations';

$region = 'TH_BKK';


$body = '{

"serviceType": "MOTORCYCLE",

"specialRequests": [],

"requesterContact": {

"name": "wakana",

"phone": "0920518855"

},

"stops": [

{

"location": {

"lat": "'.$from__lat.'",

"lng": "'.$from__long.'"

},

"addresses": {

"th_TH": {

"displayString": "Chong Nonsi, Yan Nawa, Bangkok 10120 ประเทศไทย",

"market": "'.$region.'" 

}

}

},

{

"location": {

"lat": "'.$sender__lat.'",

"lng": "'.$sender__long.'"

},

"addresses": {

"th_TH": {

"displayString": "'.$sender_address.'",

"market": "'.$region.'"

}

}

}

],

"deliveries": [{

"toStop": 1,

"toContact": {

"name": "'.$sender__fname.'",

"phone": "'.$sender__phone.'"

},

"remarks": ""

}

]

}';


$rawSignature = "{$time}\r\n{$method}\r\n{$path}\r\n\r\n{$body}";

$signature = hash_hmac("sha256", $rawSignature, $secret);

$startTime = microtime(true);

$token = $key.':'.$time.':'.$signature;


$curl = curl_init();

curl_setopt_array($curl, array(

CURLOPT_URL => $baseURL.$path,

CURLOPT_SSL_VERIFYHOST => false,

CURLOPT_SSL_VERIFYPEER => false,

CURLOPT_RETURNTRANSFER => true,

CURLOPT_ENCODING => '',

CURLOPT_MAXREDIRS => 10,

CURLOPT_TIMEOUT => 3,

CURLOPT_FOLLOWLOCATION => true,

CURLOPT_HEADER => false,

CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

CURLOPT_CUSTOMREQUEST => 'POST',

CURLOPT_POSTFIELDS => $body,

CURLOPT_HTTPHEADER => array(

"Content-type: application/json; charset=utf-8",

"Authorization: hmac ".$token,

"Accept: application/json",

"X-LLM-Market: {$region}"

),

));

$response = curl_exec($curl);

$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

$error_msg = curl_error($curl);

echo $error_msg;

curl_close($curl);

$obj = json_decode($response);


/*

Return 

จะได้ค่าส่ง และ ระยะทาง ที่ส่งกลับมา

{

[response] => stdClass Object

(

[totalFee] => 180

[totalFeeCurrency] => THB

[distance] => stdClass Object

(

[text] => 20.3 km

[value] => 20328

)


)

}

*/


ถ้าแบบ Node.js สามารถดูตาม github ได้จากตรงนี้ ลักษณะการทำงานก็จะเหมือนๆกันเลยครับ

https://github.com/yamdraco/lalamove-js



จบแล้ว ง่ายมากๆๆ เลยใช่ไหมครับ

แต่ก็มีข้อจำกัดอยู่บ้างเรื่องที่ผมทำและขึ้น Prod ไปแล้ว คือ สั่งแต่ละครั้งแม้จะอยู่สถานทีเดียวกัน แต่คนละเวลาจะได้ค่าส่งไม่เท่ากัน diff กับอยู่ 1-10  บาท


ผมก็ได้สอบถามทาง lalamove ไป คือ ถ้าจะให้ค่าส่งเท่ากัน ต้องทำการเรียก เวลาและสถานที่ เดียวกันเท่านั้นนะครับ 


Comments

Popular posts from this blog

Brave Browser คือ อีหยังว่ะ ทำไมสาย dev ต้องใช้งาน

Blockchain Project - Exchange Calculator [Chainlink Fall Hackathon 2021]