<?php
/*
MO/MT Adaptor สำหรับ TRUEMOVE
จัดทำโดย นายสราวุธ ศรีษะเกตุ
iamatt.com@gmail.com
Tel 0860070880
Version 1.0
Last revision 18 มกราคม 2555
*/
$path = “/home/enjoy/public_html/newsystem”;
$path_script = “/home/enjoy/public_html”;
$debug = true;
require_once $path . “/init.php”;
global $config;
require_once $config['site_path'].”/program/classes/class.SMS.php”;
require_once $config['site_path'].”/program/classes/class.TRUEMOVE.php”;
require_once $config['site_frontpath'].”/adaptor/includes/minixml.class.lib.inc.php”;
require_once $config['site_frontpath'].”/adaptor/includes/domit/xml_domit_include.php”;
// เรียก DB
global $DB;
// ประกาศ Class ของ SMS (Common)
$SMS = new SMS();
// ประกาศ Class ของ TRUEMOVE
$TRUEMOVE = new TRUEMOVE();
// รับ MO Data เข้ามา
$Incoming_Data = null;
$inputdata = fopen(“php://input”,”rb”);
while(!feof( $inputdata ))
$Incoming_Data .= fread($inputdata, 4096 );
fclose($inputdata);
if ($debug){$SMS->Log(“TRUE_Adaptor”,”MO IN\n”.$Incoming_Data);}
// ถ้า MO ที่เข้ามาไม่ว่างเปล่า ก็จะทำงาน
if(!empty($Incoming_Data)){
$method = detectXML($Incoming_Data);
switch ($method['type'])
{
case “SMS”:
$dataXML = processSMS($Incoming_Data);
$service_number = $SMS->ServiceNumberByServiceID($dataXML['service_id']);
if ($method['data'] == “mo”)
{
if (empty($service_number))
{
$re = 1;
$dataXML['rsr_status'] = “failure”;
$dataXML['code'] = “1″;
$dataXML['description'] = “Invalid content ID or keyword.”;
$TRUEMOVE->logDeliverMessage($dataXML);
echo $TRUEMOVE->Acknowledge($dataXML);
flush();
exit;
}
else
{
// ถ้า service number match กับ ฐานข้อมูล ให้ดำเนินการ process MO Request
$TRUEMOVE->logDeliverMessage($dataXML);
switch ($service_number['service_status'])
{
// เบอร์ใช้งานจริงแล้ว
case “production”:
$data['TEST'] = false;
$data['CHARGE'] = true;
break;
// เบอร์อยู่ระหว่างเปิดทดสอบ
case “implementation”:
$data['TEST'] = true;
$data['CHARGE'] = false;
break;
// เบอร์ระงับบริการชั่วคราว
case “disabled”:
$re = 1;
$dataXML['rsr_status'] = “failure”;
$dataXML['code'] = “1″;
$dataXML['description'] = “Invalid content ID or keyword.”;
$TRUEMOVE->logDeliverMessage($dataXML);
echo $TRUEMOVE->Acknowledge($dataXML);
flush();
exit;
break;
}
$dataXML['rsr_status'] = “success”;
$dataXML['code'] = “0″;
$dataXML['description'] = “Success receive request”;
echo $ack = $TRUEMOVE->Acknowledge($dataXML);
flush();
// pack data เพื่อส่งเข้าไปยัง service 2way,download,subscribe
$data['service_number'] = $service_number;
$data['MSISDN'] = $dataXML['source_number'];
$data['MESSAGE'] = $dataXML['ud'];
$data['OPERATOR'] = “TRUEMOVE”;
$data['TYPE'] = “GSM”;
$data['CHANNEL'] = “SMS”;
$data['SERVICE_NUMBER'] = $dataXML['destination_number'];
if ($data['CHANNEL'] == “IVR”)
{
$data['MESSAGE'] = substr($data['MESSAGE'],strlen($dataXML['destination_number']),strlen($data['MESSAGE']) – strlen($dataXML['destination_number']));
$TRUEMOVE->logIVRRequest($data);
}
if ($data['CHANNEL'] == “SMS”)
{
$TRUEMOVE->logSMSRequest($data);
}
if ($debug){$SMS->Log(“TRUE_Adaptor”,”Process MO and send MT Back \n\n”);}
if ($debug){$SMS->Log(“TRUE_Adaptor”,”Service Number = “.serialize($service_number).”\n\n”);}
if ($debug){$SMS->Log(“TRUE_Adaptor”,”DATA PROCESS = “.serialize($data).”\n\n”);}
switch ($service_number['service_type'])
{
case “2way” :
require_once $config['site_path'].”/program/classes/class.SMS2Way.php”;
$SMS2Way = new SMS2Way();
$return = $SMS2Way->process($data);
break;
case “download” :
require_once $config['site_path'].”/program/classes/class.SMSDownload.php”;
$SMSDownload = new SMSDownload();
$return = $SMSDownload->process($data);
break;
case “subscription” :
require_once $config['site_path'].”/program/classes/class.SMSSubscription.php”;
$SMSSubscription = new SMSSubscription();
$return = $SMSSubscription->process($data);
break;
}
if ($debug){$SMS->Log(“TRUE_Adaptor”,”Return = “.serialize($return).”\n\n”);}
sleep(2);
$TRUEMOVE->service_id = $dataXML['service_id'];
$TRUEMOVE->ud = $return['MESSAGE'];
$TRUEMOVE->destination_number = $dataXML['source_number'];
$TRUEMOVE->orange_serviceid = $dataXML['service_id'];
$TRUEMOVE->source_number = $dataXML['destination_number'];
$TRUEMOVE->stcs = $dataXML['stcs'];
$TRUEMOVE->username = $service_number['username'];
$TRUEMOVE->password = $service_number['password'];
$TRUEMOVE->sender = $dataXML['destination_number'];
switch ($return['TYPE'])
{
case “TEXT” :
$TRUEMOVE->ud_type= “text”;
if ($return['LANGUAGE'] == “T”)
{
$TRUEMOVE->encode = “TIS-620″;
$TRUEMOVE->char_encoding = “TIS-620″;
$TRUEMOVE->ud = $SMS->utf82tis($TRUEMOVE->ud);
}
else
{
$TRUEMOVE->encode = “default”;
$TRUEMOVE->char_encoding = “UTF-8″;
}
$TRUEMOVE->textSMS();
$TRUEMOVE->SendSMS();
break;
case “URL” :
$TRUEMOVE->ud_type= “text”;
break;
case “MMS” :
$TRUEMOVE->ud_type= “text”;
$TRUEMOVE->MMS($return,$this->recipient,$deliverMessage->getSender()->getAddress(),$deliverMessage->getLinkedID());
break;
}
}
}
break;
case “RSR”:
$dataXML = processRSL($Incoming_Data);
print_r($dataXML);
exit;
break;
}
}
function detectXML($XML)
{
$MOXMLDom =& new DOMIT_Document();
$success = $MOXMLDom->parseXML($XML, true);
// sms_type คือชนิดของข้อความที่ส่งเข้ามา
$sms_tag =& $MOXMLDom->getElementsByTagName(“sms”);
$sms_node = $sms_tag->item(0);
if ($sms_node != “”)
{
$sms_type = trim($sms_node->getAttribute(“type”));
}
$rsr_tag =& $MOXMLDom->getElementsByTagName(“rsr”);
$rsr_node = $rsr_tag->item(0);
if ($rsr_node != “”)
{
$rsr_type = trim($rsr_node->getAttribute(“type”));
}
if ($sms_type != “”)
{
$return['type'] = “SMS”;
$return['data'] = $sms_type;
return $return;
}
else if ($rsr_type != “”)
{
$return['type'] = “RSR”;
$return['data'] = $rsr_type;
return $return;
}
}
function processSMS($data)
{
$MOXML = new MiniXMLDoc();
$MOXML->fromString($data);
// destination_number ** คือหมายเลข Service number
$response = $MOXML->getElementByPath(“destination/address/number”);
$Return_Data['destination_number'] = $response->getValue();
// source_number ** คือหมายเลขโทรศัพท์ที่ส่ง SMS เข้ามา
$response = $MOXML->getElementByPath(“source/address/number”);
$Return_Data['source_number'] = $response->getValue();
// service_id ** คือหมายเลข service id
$response = $MOXML->getElement(“service-id”);
$Return_Data['service_id'] = $response->getValue();
// ud ** คือข้อความที่พิมพ์มาจากมือถือ
$response = $MOXML->getElement(“ud”);
$Return_Data['ud'] = $response->getValue();
// scts ** คือเวลาที่ข้อความนี้ถูกส่งเข้ามา
$response = $MOXML->getElement(“scts”);
$Return_Data['scts'] = $response->getValue();
// from ** คือถูกส่งมาจาก SMPP แบบใหน
$response = $MOXML->getElement(“from”);
$Return_Data['data_from'] = $response->getValue();
// to ** คือส่งเข้า Adaptor แบบใหน
$response = $MOXML->getElement(“to”);
$Return_Data['data_to'] = $response->getValue();
$MOXMLDom =& new DOMIT_Document();
$success = $MOXMLDom->parseXML($data, true);
// message_id ** คือเลข message จาก SMPP
$message_tag =& $MOXMLDom->getElementsByTagName(“message”);
$message_node = $message_tag->item(0);
$Return_Data['message_id'] = $message_node->getAttribute(“id”);
// sms_type คือชนิดของข้อความที่ส่งเข้ามา
$sms_tag =& $MOXMLDom->getElementsByTagName(“sms”);
$sms_node = $sms_tag->item(0);
$Return_Data['sms_type'] = $sms_node->getAttribute(“type”);
// destination_messageid คือเลข message ของ Service number
$des_tag =& $MOXMLDom->getElementsByTagName(“destination”);
$des_node = $des_tag->item(0);
$Return_Data['destination_messageid'] = $des_node->getAttribute(“messageid”);
// destination number type คือ ชนิดของ number ในส่วนของ Service number
$number_tag =& $MOXMLDom->getElementsByTagName(“number”);
$number_node = $number_tag->item(0);
$Return_Data['number_destination_type'] = $number_node->getAttribute(“type”);
// source number type คือ ชนิดของ number ในส่วนของผู้ใช้งานที่ส่งข้อความเข้ามา
$number_node = $number_tag->item(1);
$Return_Data['number_source_type'] = $number_node->getAttribute(“type”);
// source number type คือ ชนิดของ number ในส่วนของผู้ใช้งานที่ส่งข้อความเข้ามา
$ud_tag =& $MOXMLDom->getElementsByTagName(“ud”);
$ud_node = $ud_tag->item(0);
$Return_Data['ud_type'] = $ud_node->getAttribute(“type”);
$Return_Data['ud_encoding'] = $ud_node->getAttribute(“encode”);
return $Return_Data;
}
function processRSL($data)
{
$MOXML = new MiniXMLDoc();
$MOXML->fromString($data);
// destination_number ** คือหมายเลข Service number
$response = $MOXML->getElementByPath(“destination/address/number”);
$Return_Data['destination_number'] = $response->getValue();
// source_number ** คือหมายเลขโทรศัพท์ที่ส่ง SMS เข้ามา
$response = $MOXML->getElementByPath(“source/address/number”);
$Return_Data['source_number'] = $response->getValue();
// service_id ** คือหมายเลข service id
$response = $MOXML->getElement(“service-id”);
$Return_Data['service_id'] = $response->getValue();
// code ** คือ status code ที่ตอบกลับมาจาก SMSG
$response = $MOXML->getElementByPath(“rsr_detail/code”);
$Return_Data['code'] = $response->getValue();
// description ** คือรายละเอียดของ code
$response = $MOXML->getElementByPath(“rsr_detail/description”);
$Return_Data['description'] = $response->getValue();
$MOXMLDom =& new DOMIT_Document();
$success = $MOXMLDom->parseXML($data, true);
// message_id ** คือเลข message จาก SMPP
$message_tag =& $MOXMLDom->getElementsByTagName(“message”);
$message_node = $message_tag->item(0);
$Return_Data['message_id'] = $message_node->getAttribute(“id”);
// rsr_type คือ status ที่ตอบกลับมาจาก SMSG
$rsr_tag =& $MOXMLDom->getElementsByTagName(“rsr”);
$rsr_node = $rsr_tag->item(0);
$Return_Data['rsr_type'] = $rsr_node->getAttribute(“type”);
// rsr_detail คือ status ที่ตอบกลับมาจาก SMSG
$rsr_tag =& $MOXMLDom->getElementsByTagName(“rsr_detail”);
$rsr_node = $rsr_tag->item(0);
$Return_Data['rsr_detail'] = $rsr_node->getAttribute(“status”);
// destination_messageid คือเลข message ของ Service number
$des_tag =& $MOXMLDom->getElementsByTagName(“destination”);
$des_node = $des_tag->item(0);
$Return_Data['destination_messageid'] = $des_node->getAttribute(“messageid”);
// destination number type คือ ชนิดของ number ในส่วนของ Service number
$number_tag =& $MOXMLDom->getElementsByTagName(“number”);
$number_node = $number_tag->item(0);
$Return_Data['number_destination_type'] = $number_node->getAttribute(“type”);
// source number type คือ ชนิดของ number ในส่วนของผู้ใช้งานที่ส่งข้อความเข้ามา
$number_node = $number_tag->item(1);
$Return_Data['number_source_type'] = $number_node->getAttribute(“type”);
return $Return_Data;
}
?>









