发送短信

@param string $mobile 		手机号码
@param string $msg 			短信内容
@param string $needstatus 	是否需要状态报告
13975
public function sendSMS( $mobile, $msg, $needstatus = 'false') {

		//创蓝接口参数
		$postArr = array (
				          'account' => $this->apiAccount,
				          'pswd' => $this->apiPassword,
				          'msg' => $msg,
				          'mobile' => $mobile,
				          'needstatus' => $needstatus
                     );

		$result = $this->curlPost( $this->apiSendUrl , $postArr);
		return $result;
	}
666771
public function info(string $msg) {
		if ($this->level > self::INFO)
			return;
		$this->write('INF', $msg);
	}
144504
public static function addMessage($text, $status = 'info'): void
    {
        $message         = new stdClass();
        $message->text   = $text;
        $message->status = $status;

        $messages   = Session::get(self::FLASH_KEY, []);
        $messages[] = $message;
        Session::put(self::FLASH_KEY, $messages);
    }
1011470
public static function response($mdata = array(), $status = null, $msg = '')
    {
        if (is_array($mdata) && isset($mdata['msg']) && isset($mdata['data']) && isset($mdata['status']) && !$status) {
            $status = $mdata['status'];
            $msg = $mdata['msg'];
            $mdata = $mdata['data'];
        }


        if (!$status && count($mdata)) {
            $status = 200;
        } elseif (!$status) {
            $status = 400;
        }


        $response = array(
            'status' => $status,
            'msg' => $msg,
            'data' => $mdata
        );

        return $response;
    }
565158
public function callGetInfo($msisdn = '', $serviceId = '', $telcoId = '')
    {
        try {
            $inputParams = [
                'msisdn'    => $msisdn,
                'serviceId' => $serviceId,
                'telcoId'   => $telcoId,
            ];
            $this->debug->info(__FUNCTION__, 'Input Params: ' . json_encode($inputParams));
            $msisdn = $this->phoneNumber->format($msisdn);
            $this->debug->debug(__FUNCTION__, '$msisdn: ' . json_encode($msisdn));
            $detect_carrier = $this->phoneNumber->detect_carrier($msisdn);
            $this->debug->debug(__FUNCTION__, '$detect_carrier: ' . json_encode($detect_carrier));
            if ($msisdn === NULL || $detect_carrier === NULL) {
                $this->debug->warning(__FUNCTION__, 'MSISDN or Detect Carrier is Empty');

                return NULL;
            }
            if ($this->config === NULL) {
                $this->debug->warning(__FUNCTION__, 'Config is Empty');

                return FALSE;
            }
            $result = [];
            if ($this->telcoStatus[self::VINAPHONE] === TRUE && ($detect_carrier == self::VINAPHONE || $telcoId == self::VINAPHONE_ID)) {
                $this->debug->debug(__FUNCTION__, 'Telco is ' . self::VINAPHONE);
                if (
                    // Nếu set callbackObjectStatus === TRUE
                    $this->callbackObjectStatus === TRUE &&
                    (
                        // & Tồn tại đối tượng Callback
                        isset($this->callbackObject) &&
                        !empty($this->callbackObject)
                    )
                    &&
                    (
                        // & Tồn tại đối tượng Callback của nhà mạng
                        isset($this->callbackObject[self::VINAPHONE]) &&
                        !empty($this->callbackObject[self::VINAPHONE]) &&
                        is_object($this->callbackObject[self::VINAPHONE])
                    )
                ) {
                    $this->debug->debug(__FUNCTION__, 'Sử dụng phương pháp truyền Object vào để xử lý dữ liệu: ' . json_encode($this->callbackObject));
                    $this->callbackObject[self::VINAPHONE]->setHostname($this->config[self::VINAPHONE]['hostname']);
                    $this->callbackObject[self::VINAPHONE]->setConfig($this->config[self::VINAPHONE]);
                    $call = $this->callbackObject[self::VINAPHONE]->getInfo($msisdn);
                } else {
                    $vina = new Vinaphone($this->options);
                    $vina->setHostname($this->config[self::VINAPHONE]['hostname']);
                    $vina->setConfig($this->config[self::VINAPHONE]);
                    $call = $vina->getInfo($msisdn);
                }
                $this->debug->debug(__FUNCTION__, '$call ' . self::VINAPHONE . ' getInfo Params: msisdn: ' . $msisdn);
                $this->debug->debug(__FUNCTION__, '$call ' . self::VINAPHONE . ' getInfo Result: ' . json_encode($call));
                if (isset($call->Result) && $call->Result == 0) {
                    $result['status']        = 0;
                    $result['desc']          = isset($call->Desc) ? $call->Desc : 'Success';
                    $result['data']          = isset($call->Detail) ? $call->Detail : NULL;
                    $result['data_response'] = $call;
                } else {
                    $result = [
                        'status'        => 1,
                        'desc'          => 'False -> Detail into data_response',
                        'data'          => $call,
                        'data_response' => $call,
                    ];
                }
            } elseif ($this->telcoStatus[self::VIETTEL] === TRUE && ($detect_carrier == self::VIETTEL || $telcoId == self::VIETTEL_ID)) {
                $this->debug->debug(__FUNCTION__, 'Telco is ' . self::VIETTEL);
                if (
                    // Nếu set callbackObjectStatus === TRUE
                    $this->callbackObjectStatus === TRUE &&
                    (
                        // & Tồn tại đối tượng Callback
                        isset($this->callbackObject) &&
                        !empty($this->callbackObject)
                    )
                    &&
                    (
                        // & Tồn tại đối tượng Callback của nhà mạng
                        isset($this->callbackObject[self::VIETTEL]) &&
                        !empty($this->callbackObject[self::VIETTEL]) &&
                        is_object($this->callbackObject[self::VIETTEL])
                    )
                ) {
                    $this->debug->debug(__FUNCTION__, 'Sử dụng phương pháp truyền Object vào để xử lý dữ liệu: ' . json_encode($this->callbackObject));
                    $this->callbackObject[self::VIETTEL]->setHostname($this->config[self::VIETTEL]['hostname']);
                    $this->callbackObject[self::VIETTEL]->setConfig($this->config[self::VIETTEL]);
                    $call = $this->callbackObject[self::VIETTEL]->getInfo($msisdn);
                } else {
                    $viettel = new Viettel($this->options);
                    $viettel->setHostname($this->config[self::VIETTEL]['hostname']);
                    $viettel->setConfig($this->config[self::VIETTEL]);
                    $call = $viettel->getInfo($msisdn);
                }
                $this->debug->debug(__FUNCTION__, '$call ' . self::VIETTEL . ' getInfo Params: msisdn: ' . $msisdn);
                $this->debug->debug(__FUNCTION__, '$call ' . self::VIETTEL . ' getInfo Result: ' . json_encode($call));
                if (isset($call->Result) && $call->Result == 0) {
                    $result['status']        = 0;
                    $result['desc']          = isset($call->Desc) ? $call->Desc : 'Success';
                    $result['data']          = isset($call->Detail) ? $call->Detail : NULL;
                    $result['data_response'] = $call;
                } else {
                    $result = [
                        'status'        => 1,
                        'desc'          => 'False -> Detail into data_response',
                        'data'          => $call,
                        'data_response' => $call,
                    ];
                }
            } elseif ($this->telcoStatus[self::MOBIFONE] === TRUE && ($detect_carrier == self::MOBIFONE || $telcoId == self::MOBIFONE_ID)) {
                $this->debug->debug(__FUNCTION__, 'Telco is ' . self::MOBIFONE);
                if (
                    // Nếu set callbackObjectStatus === TRUE
                    $this->callbackObjectStatus === TRUE &&
                    (
                        // & Tồn tại đối tượng Callback
                        isset($this->callbackObject) &&
                        !empty($this->callbackObject)
                    )
                    &&
                    (
                        // & Tồn tại đối tượng Callback của nhà mạng
                        isset($this->callbackObject[self::MOBIFONE]) &&
                        !empty($this->callbackObject[self::MOBIFONE]) &&
                        is_object($this->callbackObject[self::MOBIFONE])
                    )
                ) {
                    $this->debug->debug(__FUNCTION__, 'Sử dụng phương pháp truyền Object vào để xử lý dữ liệu: ' . json_encode($this->callbackObject));
                    $this->callbackObject[self::MOBIFONE]->setHostname($this->config[self::MOBIFONE]['hostname']);
                    $this->callbackObject[self::MOBIFONE]->setConfig($this->config[self::MOBIFONE]);
                    $call = $this->callbackObject[self::MOBIFONE]->getInfo($msisdn);
                } else {
                    $mobi = new Mobifone($this->options);
                    $mobi->setHostname($this->config[self::MOBIFONE]['hostname']);
                    $mobi->setConfig($this->config[self::MOBIFONE]);
                    $call = $mobi->getInfo($msisdn);
                }
                $this->debug->debug(__FUNCTION__, '$call ' . self::MOBIFONE . ' getInfo Params: msisdn: ' . $msisdn);
                $this->debug->debug(__FUNCTION__, '$call ' . self::MOBIFONE . ' getInfo Result: ' . json_encode($call));
                if (isset($call->Result) && $call->Result == 0) {
                    $result['status']        = 0;
                    $result['desc']          = isset($call->Desc) ? $call->Desc : 'Success';
                    $result['data']          = isset($call->Detail) ? $call->Detail : NULL;
                    $result['data_response'] = $call;
                } else {
                    $result = [
                        'status'        => 1,
                        'desc'          => 'False -> Detail into data_response',
                        'data'          => $call,
                        'data_response' => $call,
                    ];
                }
            } elseif ($this->telcoStatus[self::VIETNAMOBILE] === TRUE && ($detect_carrier == self::VIETNAMOBILE || $telcoId == self::VIETNAMOBILE_ID)) {
                $this->debug->debug(__FUNCTION__, 'Telco is ' . self::VIETNAMOBILE);
                if (
                    // Nếu set callbackObjectStatus === TRUE
                    $this->callbackObjectStatus === TRUE &&
                    (
                        // & Tồn tại đối tượng Callback
                        isset($this->callbackObject) &&
                        !empty($this->callbackObject)
                    )
                    &&
                    (
                        // & Tồn tại đối tượng Callback của nhà mạng
                        isset($this->callbackObject[self::VIETNAMOBILE]) &&
                        !empty($this->callbackObject[self::VIETNAMOBILE]) &&
                        is_object($this->callbackObject[self::VIETNAMOBILE])
                    )
                ) {
                    $this->debug->debug(__FUNCTION__, 'Sử dụng phương pháp truyền Object vào để xử lý dữ liệu: ' . json_encode($this->callbackObject));
                    $this->callbackObject[self::VIETNAMOBILE]->setHostname($this->config[self::VIETNAMOBILE]['hostname']);
                    $this->callbackObject[self::VIETNAMOBILE]->setConfig($this->config[self::VIETNAMOBILE]);
                    $call = $this->callbackObject[self::VIETNAMOBILE]->getInfo($msisdn);
                } else {
                    $vnm = new Vietnamobile($this->options);
                    $vnm->setHostname($this->config[self::VIETNAMOBILE]['hostname']);
                    $vnm->setConfig($this->config[self::VIETNAMOBILE]);
                    $call = $vnm->getInfo($serviceId, $msisdn);
                }
                $this->debug->debug(__FUNCTION__, '$call ' . self::VIETNAMOBILE . ' getInfo Params: serviceId: ' . $serviceId . ' - msisdn: ' . $msisdn);
                $this->debug->debug(__FUNCTION__, '$call ' . self::VIETNAMOBILE . ' getInfo Result: ' . json_encode($call));
                if (isset($call->Result) && $call->Result == 0) {
                    $result['status']        = 0;
                    $result['desc']          = isset($call->Desc) ? $call->Desc : 'Success';
                    $result['data']          = isset($call->Detail) ? $call->Detail : NULL;
                    $result['data_response'] = $call;
                } else {
                    $result = [
                        'status'        => 1,
                        'desc'          => 'False -> Detail into data_response',
                        'data'          => $call,
                        'data_response' => $call,
                    ];
                }
            } elseif ($this->telcoStatus[self::MOVITEL] === TRUE && ($detect_carrier == self::MOVITEL || $telcoId == self::MOVITEL_ID)) {
                $this->debug->debug(__FUNCTION__, 'Telco is ' . self::MOVITEL);
                if (
                    // Nếu set callbackObjectStatus === TRUE
                    $this->callbackObjectStatus === TRUE &&
                    (
                        // & Tồn tại đối tượng Callback
                        isset($this->callbackObject) &&
                        !empty($this->callbackObject)
                    )
                    &&
                    (
                        // & Tồn tại đối tượng Callback của nhà mạng
                        isset($this->callbackObject[self::MOVITEL]) &&
                        !empty($this->callbackObject[self::MOVITEL]) &&
                        is_object($this->callbackObject[self::MOVITEL])
                    )
                ) {
                    $this->debug->debug(__FUNCTION__, 'Sử dụng phương pháp truyền Object vào để xử lý dữ liệu: ' . json_encode($this->callbackObject));
                    $this->callbackObject[self::MOVITEL]->setHostname($this->config[self::MOVITEL]['hostname']);
                    $this->callbackObject[self::MOVITEL]->setConfig($this->config[self::MOVITEL]);
                    $call = $this->callbackObject[self::MOVITEL]->getInfo($msisdn);
                } else {
                    $movitel = new Movitel($this->options);
                    $movitel->setHostname($this->config[self::MOVITEL]['hostname']);
                    $movitel->setConfig($this->config[self::MOVITEL]);
                    $call = $movitel->getInfo($msisdn);
                }
                $this->debug->debug(__FUNCTION__, '$call ' . self::MOVITEL . ' getInfo Params: msisdn: ' . $msisdn);
                $this->debug->debug(__FUNCTION__, '$call ' . self::MOVITEL . ' getInfo Result: ' . json_encode($call));
                if (isset($call->Result) && $call->Result == 0) {
                    $result['status']        = 0;
                    $result['desc']          = isset($call->Desc) ? $call->Desc : 'Success';
                    $result['data']          = isset($call->Detail) ? $call->Detail : NULL;
                    $result['data_response'] = $call;
                } else {
                    $result = [
                        'status'        => 1,
                        'desc'          => 'False -> Detail into data_response',
                        'data'          => $call,
                        'data_response' => $call,
                    ];
                }
            } else {
                $this->debug->info(__FUNCTION__, 'Telco Invalid');
                $result = [
                    'status' => 1,
                    'desc'   => 'Telco Invalid',
                ];
            }
            $this->debug->info(__FUNCTION__, 'Final Result: ' . json_encode($result));

            return $result;
        }
        catch (\Exception $e) {
            $message = 'Error File: ' . $e->getFile() . ' - Line: ' . $e->getLine() . ' - Code: ' . $e->getCode() . ' - Message: ' . $e->getMessage();
            $this->debug->error(__FUNCTION__, $message);

            return NULL;
        }
    }
472049
protected function getStatusData($status, $messages = null, $msgKey = 'messages')
	{
		$data = ['status' => $status];

		if ($messages !== null) {
			if ($messages instanceof MessageProviderInterface) {
				$messages = $messages->getMessageBag();
			}

			if ($messages instanceof ArrayableInterface) {
				$messages = $messages->toArray();
			}

			$data[$msgKey] = (array) $messages;
		}

		return $data;
	}
1352296
public function sendMessage(Message $msg)
    {
        $this->lastOutboundActivity = microtime(true);
        $this->dispatchMessage($msg, 'Send');
    }
987006
public function PostSmsMessagesSendTo(XsString $telephoneNumber, ApiSms $apiSms)
    {
        $this->execute(sprintf("/sms-messages/send-to/%s", $telephoneNumber), 'POST', $apiSms->toJson());
    }
1010330
public static function validate($mobileNumber)
    {
        $mobileNumber = Msisdn::clean($mobileNumber);

        return ! empty($mobileNumber) &&
        strlen($mobileNumber) === 10 &&
        is_numeric($mobileNumber);
    }
942908
public function getAuthenticateFromChallenge(ChallengeMessage $msg)
    {
        $token = [
            'id' => $this->authid,
            'exp' => time() + 60,
        ];
        $token = JWT::encode($token, Security::salt());
        return new AuthenticateMessage($token);
    }
316256
public function msisdnDetect()
    {
        try {
            $currentConnectIp = $this->getCurrentConnectIp();
            $this->logger->debug(__FUNCTION__, 'getCurrentConnectIp: ' . $currentConnectIp);
            $mobileDetect = new MobileDetect();
            if ($mobileDetect->isMobile() || $mobileDetect->isTablet()) {
                $currentSessionIp = $this->getUserIpInSession();
                $currentTelco     = $this->getTelcos();
                $currentTelcoId   = $currentTelco['telco_id'];
                $this->logger->debug(__FUNCTION__, 'getUserIpInSession: ' . $currentSessionIp);
                $this->logger->debug(__FUNCTION__, 'currentTelco: ' . json_encode($currentTelco));
                $this->logger->debug(__FUNCTION__, 'currentTelcoId: ' . $currentTelcoId);
                /**
                 * Nhận diện thuê bao
                 * Logic u mê vãi :))
                 */
                if (// Nếu như người dùng thay đổi ip và đã nhận diện nhà mạng
                    (($currentConnectIp != $currentSessionIp) && ($currentTelcoId != 0) && ($this->getDetectChannelInSession() === NULL || strtoupper($this->getDetectChannelInSession()) != self::CHANNEL_IS_LOGIN)) ||
                    // Hoặc Nếu như người dùng là khách & check ip ra nhà mạng
                    ($this->getMsisdnInSession() !== NULL && $this->getMsisdnInSession() == 'GUEST' && $currentTelcoId != 0 && ($this->getDetectChannelInSession() === NULL || strtoupper($this->getDetectChannelInSession()) != self::CHANNEL_IS_LOGIN)) ||
                    // Hoặc Nếu chưa nhận diện nhà mạng mà check ip ra nhà mạng
                    ($this->msisdnHasDetect() !== NULL && $this->msisdnHasDetect() == FALSE && $currentTelcoId != 0 && ($this->getDetectChannelInSession() === NULL || strtoupper($this->getDetectChannelInSession()) != self::CHANNEL_IS_LOGIN))
                ) {
                    /**
                     * Trường hợp cần nhận diện thuê bao
                     * Xử lý lưu session và callback trong thư viện MSISDN
                     */
                    $msisdn = $this->getMsisdn();
                    // Chỗ này cần xử lý Redirect nà
                    if (isset($this->objectSession) && $this->objectSession != NULL && is_object($this->objectSession)) {
                        $this->logger->info(__FUNCTION__, 'Session with CI Session Class');
                        $link_redirect = ($this->objectSession->has_userdata('link_redirect_affer_detect') ? $this->objectSession->userdata('link_redirect_affer_detect') : '');
                    } else {
                        $this->logger->info(__FUNCTION__, 'Session with The Http Foundation Component');
                        $link_redirect = ($this->session->has('link_redirect_affer_detect') ? $this->session->get('link_redirect_affer_detect') : '');
                    }
                    $this->logger->debug(__FUNCTION__, 'Link Redirect: ' . $link_redirect);
                    if (isset($this->objectSession) && $this->objectSession != NULL && is_object($this->objectSession)) {
                        $this->logger->info(__FUNCTION__, 'Session with CI Session Class');
                        if (!$this->objectSession->has_userdata(self::SESSION_ID_LINK_REDIRECT_MSISDN_DETECT)) {
                            $this->objectSession->set_userdata(self::SESSION_ID_LINK_REDIRECT_MSISDN_DETECT, self::SESSION_VALUE_LINK_REDIRECT_MSISDN_DETECT);
                            Utils::redirect($link_redirect);
                        }
                    } else {
                        $this->logger->info(__FUNCTION__, 'Session with The Http Foundation Component');
                        if (!$this->session->has(self::SESSION_ID_LINK_REDIRECT_MSISDN_DETECT)) {
                            $this->session->set(self::SESSION_ID_LINK_REDIRECT_MSISDN_DETECT, self::SESSION_VALUE_LINK_REDIRECT_MSISDN_DETECT);
                            Utils::redirect($link_redirect);
                        }
                    }

                    return $msisdn;
                }
            } else {
                $this->logger->warning(__FUNCTION__, 'Device is not Mobile or Tablet');

                return NULL;
            }
        }
        catch (\Exception $e) {
            $message = 'Error File: ' . $e->getFile() . ' - Line: ' . $e->getLine() . ' - Code: ' . $e->getCode() . ' - Message: ' . $e->getMessage();
            $this->logger->error(__FUNCTION__, $message);

            return FALSE;
        }

        return NULL;
    }
1338153
public static function setTypeMsg($type, $msg=null)
    {
        if (is_array($type)) {
            self::$typeMsg=array_merge(self::$typeMsg, $type);
        } else {
            self::$typeMsg[$type]=$msg;
        }
    }
127977
static function message($msg)
    {
        $msg = empty($msg) ? '' : $msg;

        if(!is_string($msg)) {
            $msg = json_encode($msg);
        }

        echo $msg;

        return true;
    }
465278
private function msg($msg): string
    {
        // 将数组转为字符串
        if (is_array($msg) or is_object($msg) or is_bool($msg)) {
            return json($msg);
        }

        // 返回可显示的字符串
        return (string)$msg;
    }
1281209
public function stdout($msg, $status = self::STATUS_OK)
    {
        $msg = $this->removeColors($msg);
        $msg = $this->replaceEOLs($msg);

        if (defined('STDOUT')) {
            fwrite(STDOUT, $msg);
        } else {
            echo $msg;
            if (count(\ob_get_status()) !== 0) {
                ob_flush();
            }
        }
        return $this;
    }
790241
public function sendSms($mobile, $text)
    {
        if ($this->useFileTransport) {
            return $this->saveSms($mobile, $text);
        }

        if (!is_array($mobile)) {
            $mobile = explode(',', $mobile);
        }

        if (empty($mobile)) {
            $this->setError("手机号不得为空");

            return false;
        }

        $mobileArr = array_chunk($mobile, 90);
        $mobile = array_pop($mobileArr);
        foreach ($mobileArr as $val) {
            self::sendSms($val, $text);
        }

        $mobile = array_filter($mobile, function ($val) {
            $isPhoneNumber = strlen($val) === 11;
            if ($isPhoneNumber) {
                return true;
            } else {
                $this->setError("Error phone number: " . $val);

                return false;
            }
        });

        $body = ['mobile' => implode(',', $mobile), 'text' => $text,];
        $url = sprintf($this->urlFormat, self::RESOURCE_SMS, self::FUNCTION_SEND);

        if (($body = $this->post($url, $body)) === false) {
            return false;
        }

        $code = $body['code'];
        if ($code != self::CODE_0) {
            $n = new ConstDocHelper(__CLASS__);
            if ($code < 0) {
                $const = 'CODE_N' . (-$code);
            } else {
                $const = 'CODE_' . $code;
            }
            $this->setError($n->getDocComment($const), $code, $body['detail']);

            return false;
        }
        $this->body = $body;

        return true;
    }
714706
public function write($msg, $type = 'info', $force = false)
    {
        // 封装日志信息
        $log = $this->log;

        if (true === $force || empty($this->config['level'])) {
            $log[$type][] = $msg;
        } elseif (in_array($type, $this->config['level'])) {
            $log[$type][] = $msg;
        } else {
            return false;
        }

        // 写入日志
        $result = $this->driver->save($log);

        if ($result) {
            $this->log = [];
        }

        return $result;
    }