วันพุธที่ 8 มิถุนายน พ.ศ. 2554

การเขียน api เพื่อส่ง sms ผ่าน sms gateway ด้วยภาษา PHP

บทความนี้สืบเนื่องมาจากผมได้รับงานจากลูกค้าตัวนึงเป็นเว็บประกาศขายอสังหาริมทรัพย์จึงมีความจำเป็นอย่างยิ่งที่สมาชิกผู้ลงประกาศจะต้องติดตามความเคลื่อนไหวที่เกิดขึ้นกับโพสของตัวเอง เช่นเมื่อมีคนมาคอมเมนท์โพสของสมาชิกระบบจะต้องแจ้งให้เจ้าของโพสทราบในทันที ซึ่งมีอยู่ 2 วิธีการคือ

1.ส่งอีเมลล์ ถ้าเล่น msn อยู่ก็ดีไปเพราะ msn จะ popup ให้ทราบในทันที แต่ถ้าไม่ได้เล่นล่ะครับ ก็รอกันไปกว่าจะได้เห็นก็อีตอนเช็คเมลล์นุ่นล่ะครับ
 2.ส่ง sms ผ่าน sms gateway อันนี้รวดเร็วทันใจรู้ได้แทบจะในทันที ดีเลย์ไม่เกิน 1-2 นาที

ตอนนี้คุณคงเริ่มสงสัยแล้วล่ะสิว่า sms gateway คืออะไร?


sms gateway คือผู้ให้บริการส่ง sms ผ่านระบบ internet โดยที่ผู้ให้บริการจะคิดค่าบริการต่อการส่ง 1 sms อยู่ที่ไม่เกิน 1 บาท โดยที่หลายๆเจ้าเปิดให้เราสามารถใช้โค้ดจากเว็บของเราส่งค่าบางอย่างเข้าไปยังเซิฟเวอร์ของผู้ให้บริการ ด้วยวิธีการ GET หรือ POST ไปยัง url ที่ผู้ให้บริการระบุบางเจ้าอาจจะมีโค้ดตัวอย่างเป็นฟังก์ชั่นให้เอามาใช้กันได้เลย เรียกกันติดปากว่า API บางเจ้าก็ให้แค่รูปแบบ url มา ปัญหาของผมอยู่ตรงนี้แหละคับ เพราะลูกค้าของผมดันไปซื้อแพคเกจจากผู้ให้บริการที่มีแต่รูปแบบ url มาให้เท่านั้นครับ

เข้าเรื่องซะที เนื่องจากเค้าไม่มี api ให้ใช้ เอทำไงดีหว่า...สุดท้ายก็เลยรวบรวมความรู้ทั้งหมด(อันมีอยู่น้อยนิด) เขียน api ขึ้นมาใช้งานเองคับ

ตอนนี้ผมมีรูปแบบของ url ที่ผู้ให้บริการให้มาดังนี้

http://mailbit.co.th/Scripts/mgrqispi.dll?Appname=Port2SMS&prgname=HTTP_SimpleSMS1&AccountID=<AccountID>&UserID=<UserID>&UserPass=<UserPass>&Phone=<PhoneNumber>&Text=<Text>&Sender=<Sender>

*ขออนุญาติโพส url จริง(เจ้านี้ราคาถูกมาก)ไม่ได้เกี่ยวข้องอะไรกะผมนะคับลูกค้าซื้อมาให้ใช้เลยยกตัวอย่างเฉยๆใครจะใช้บริการเจ้าใหนก็แล้วแต่นะครับผมเพียงนำเสนอหลักการเท่านั้น
จากที่ผมทำสีแดงไว้นั้นคือตัวแปรทั้งหมดที่เราจะต้องที่เราจะต้องแทนค่าลงไป
<AccountID>,<UserID>,<UserPass> เราจะได้รับหลังจากทำการซื้อแพคเกจแล้ว(เจ้าอื่นอาจจะมีแค่ Username,Password)
<PhoneNumber> คือหมายเลขโทรศัพท์ของผู้รับ sms
<Text> คือเนื้อหาที่เราต้องการส่ง
<Sender> คือชื่อที่จะแสดงให้ผู้รับเห็นว่าใครส่งมา(บางเจ้า/บางแพคเกจ จะไม่มีตัวเลือกนี้แต่จะแสดงเป็นหมายเลขโทรศัพท์ของ gateway ที่ส่งออกไป)

ตัวอย่าง url ที่ส่งได้จริงๆ เพียงแค่ก็อปแล้ววางลงในช่อง address bar หรือทำเป็นลิงค์ก็สมารถส่งได้เลย
http://mailbit.co.th/Scripts/mgrqispi.dll?Appname=Port2SMS&prgname=HTTP_SimpleSMS1&AccountID=1234&UserID=5678&UserPass=91011&Phone=66876543210&Text=Test Send Message From sms gateway&Sender=M_IScyber

เจ้าของหมายเลข 0876543210 ก็จะได้รับ sms ข้อความว่า Test Send Message From sms gateway และเห็นชื่อผู้ส่งเป็น M_IScyber

*เฉพาะเจ้านี้จะต้องกรอก 66 แทน 0 ตัวหน้าครับ(ซึ่ง 66 ก็คือรหัสประเทศของไทยครับ)

การที่เราจะทำลิงค์หรือ redirect ไปที่ url ข้างต้นจะทำให้สมาชิกของเว็บเราสามารถมองเห็นค่าทั้งหมดที่เราส่งให้กับเกทเวย์ สำหรับคนที่พอมีความรู้ก็จะเดาได้ว่าแค่เปลี่ยนเบอร์โทร,เนื้อหา ก็สามารถส่งข้อความให้ใครก็ได้ ซึ่งแบบนี้ถือว่าความปลอดภัยเป็น 0 วันดีคืนดีเครดิตที่เราซื้อมาเป็นร้อยเป็นพัน อาจจะลดฮวบๆทั้งๆที่เวปไม่มีการเคลื่อนไหวเลยก็เป็นได้

ดังนั้นเราจะต้องแอบเปิด url ข้างบนแบบลับเฉพาะคนรู้ใจ (ว่าไปนั่น 555) ด้วยโค้ดด้านล่างนี้ครับ (หลอกให้อ่านมาตั้งยืดยาวเนื้อหาจริงๆมีแค่นี้แหละ 555)

<?php
//ฟังก์ชั่นสำหรับส่ง sms
function sendsms($AccountID,$UserID,$UserPass,$Phone,$Text,$Sender){

    $url="http://mailbit.co.th/Scripts/mgrqispi.dll?Appname=Port2SMS&prgname=HTTP_SimpleSMS1&AccountID=$AccountID&UserID=$UserID&UserPass=$UserPass&Phone=$Phone&Text=$Text&Sender=$Sender";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    $ressult=curl_exec($ch);
    return $result;
}

//วิธีเรียกใช้
$AccountID="1234";
$UserID="5678";
$UserPass="91011";
$Phone="66876543210";
$Text="Test Send Message From sms gateway";
$Sender="M_IScyber";
$result=sendsms($AccountID,$UserID,$UserPass,$Phone,$Text,$Sender);
echo $result;

/*
ตัวอย่างผลลัพธ์ที่ได้จากการใช้ฟังก์ชั่น :
OK: RequestID=123456 ผ่าน
Error: Authentication พิสูจน์ตัวตนไม่ผ่าน
Error: Account is not active แอคเคาท์ยังไม่แอคทีพ
Error: empty Phone_Number ไม่ได้ส่งหมายเลขโทรศัพท์ของผู้รับ
Error: empty Text ไม่ได้ส่งเนื้อหา
Error: Credit  หมดโควตาแพคเกจที่ซื้อมาแล้ว
*/
?>

จบแระ หวังว่าจะเป็นประโยชน์กับทุกท่าน (ที่หลงเข้ามา) ไม่มากก็น้อยขอบคุณที่ติดตามผลงานครับ
มีข้อสงสัยประการไดทิ้งโพสทิ้งไว้ได้ครับ ถ้ารู้ก็จะตอบให้ถ้าไม่รู้ก็ตัวใครตัวมันละค้าบบบบ

4 ความคิดเห็น:

  1. ไม่ระบุชื่อ5 กรกฎาคม 2554 เวลา 00:37

    สอบถามนิดครับ SMS เจ้าตามตัวอย่าง เท่าที่ใช้มา มีข้อจำกัดอะไรบ้างเป่าครับ?

    ตอบลบ
  2. มันเป็นของนอกที่คนไทยซื้อรีเซลเลอร์มาขาย(เท่าที่ทราบมา) เวลาที่เรายิงค่าเข้า api มันจะยิงไปที่
    เซิฟเวอร์ของไทย(reseller)->เซิฟเวอร์นอก(ผู้ให้บริการตัวจริง)->เซิฟเวอร์ประเทศปลายทาง(เช่น AIS,DTAC,TRUE,CAT)->มือถือผู้รับ

    ซึ่ง api จะบอกแค่ว่าส่งจาก reseller ถึงผู้ให้บริการตัวจริงผ่านหรือไม่เท่านั้น ไม่สามารถบอกได้ว่าส่งถึง AIS,DTAC,TRUE,CAT ผ่านหรือไม่ (เนื่องจากมันส่งกันหลายทอด ที่ยกตัวอย่างมานี่ย่อให้แล้ว)

    ผมลองทดสอบมาระยะหนึ่งแล้วผลการส่งแจ้งว่าผ่านแทบทั้งหมด แต่ก็ไม่เข้าหลายต่อหลายครั้ง

    สำหรับคนที่ต้องการความชัวร์ในการส่งแนะนำให้ใช้ของไทยดีกว่าครับ (ขออนุญาติไม่ระบุชื่อเดี๋ยวหาว่าโฆษณา อิๆ)

    รูปแบบการเชื่อมต่อของเจ้าในไทยจะเป็นประมาณนี้ครับ
    เซิฟเวอร์ไทย(ผู้ให้บริการตัวจริง)->(AIS,DTAC,TRUE,CAT)->มือถือผู้รับ
    ซึ่งแทบทุกเจ้าสามารถเช็คผลการส่งได้ชัวร์ 100% ไม่ผ่านก็บอกไม่ผ่าน

    ณ ตอนนี้ผมใช้ทั้งของไทยและของนอกครับ โดยส่งจากเจ้าของไทยก่อนถ้าไม่ผ่านค่อยส่งจากเซิฟนอกอีกที ใหนๆเค้าก็ซื้อมาแล้วจะทิ้งไปเลยก็เสียดายเอามาสำรองไว้ก็แล้วกัน 555

    ตอบลบ
  3. ถ้าข้อความที่ต้องส่ง sms สามารถอ่านจาก file CSV หรือ อ่านจาก MS SQL table

    ตอบลบ
  4. Casinos Near Casinos Near Casinos & Locate Closest Ones
    Find your nearest casinos 수원 출장마사지 near you and 포천 출장샵 stay 속초 출장마사지 updated on all the latest news and 충주 출장안마 reviews 경상북도 출장안마 of local casinos and places to stay closest to you.

    ตอบลบ