<?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;
}
?>