em = $em; $this->user = $user; $this->pass = $pass; $this->usage_type = $usage_type; $this->shortcode = $shortcode; $this->dr_url = $dr_url; } public function sendSMS($mobile_num, $mask, $message) { // make sure number is acceptable to RT // at this point, assume that mobile is numeric and valid mobile number $clean_num = $this->cleanPhoneNumber($mobile_num); if ($clean_num === false) { error_log('Invalid mobile number provided. Cannot send SMS message to ' . $mobile_num); return; } $headers = [ 'Content-Type: application/vnd.net.wyrls.Document-v3+json' ]; $sms = new SMSMessage(); $sms->setFrom($this->shortcode) ->setFromAlias($mask) ->setTo($clean_num) ->setMessage($message) ->setStatus('sent'); $this->em->persist($sms); $this->em->flush(); $date = $sms->getDateCreate(); // $date = new DateTime(); $date_string = $date->format('Y-m-d') . 'T' . $date->format('H:m:s'); $data = [ 'id' => $sms->getID(), 'from' => $this->shortcode, 'from_alias' => $mask, 'to' => $clean_num, 'content_type' => 'text/plain', 'body' => $message, 'date' => $date_string, 'usagetype' => $this->usage_type, 'delivery_receipt_url' => $this->dr_url, ]; // error_log(print_r($data, true)); $data_json = json_encode($data); $userpwd = $this->user . ':' . $this->pass; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, self::SERVER_URL); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_VERBOSE, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, $userpwd); $result = curl_exec($curl); error_log('error_no - ' . curl_errno($curl)); $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); error_log($http_code); curl_close($curl); // error_log($result); } public function validatePhoneNumber($mobile) { // check valid number $num = trim($mobile); // should be 10 digits if (strlen($num) != 10) return false; // should start with '9' if ($num[0] != '9') return false; // should be numeric if (!is_numeric($num)) return false; // should not be 9900000000 if ($num == '9900000000') return false; return true; } protected function cleanPhoneNumber($mobile) { // remove any non digit character from string $clean_number = preg_replace('~\D~', '', $mobile); // error_log('cleaned ' . $clean_number); // does it fit our 09XXXXXXXXX pattern? if (preg_match('/^09[0-9]{9}$/', $clean_number)) { // remove first '0' $clean_number = substr($clean_number, 1); // prepend 63 $clean_number = '63' . $clean_number; // error_log("CONVERTED TO $clean_number"); return $clean_number; } // does it fit our 63XXXXXXXXXX pattern? else if (preg_match('/^63[0-9]{10}$/', $clean_number)) { // leave alone return $clean_number; } // does it fit our 9XXXXXXXXX pattern? else if (preg_match('/^9[0-9]{9}$/', $clean_number)) { // prepend 63 $clean_number = '63' . $clean_number; // error_log("CONVERT TO $clean_number"); return $clean_number; } return false; } }