SOAP_1_2, 'trace' => true, 'exceptions' => true))); try { $response = $soap->{$request_fun}(['requestXml' => $param]); return $response; } catch (Exception $sf) { return $sf; /*print ($soap->__getLastRequest()); print ($soap->__getLastResponse());*/ } } /** * User:Steven * * Desc:发送post请求(xml) * @param $url * @param $xmlData * @return mixed */ public function xml_post_request($url, $xmlData) { $header[] = "Content-type: text/xml"; //定义content-type为xml,注意是数组 $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData); $response = curl_exec($ch); if (curl_errno($ch)) { print curl_error($ch); } curl_close($ch); return $response; } public function execute($request, $session = null) { $this->data = $this->format == 'json' ? json_encode($request) : $this->xml_encode($request); $this->Url = 'http://' . str_replace(array('http://', 'https://'), '', $this->Url); $postUrl = $this->Url . "?method={$this->requestMethod}&data=" . urlencode($this->data); return $this->request_by_curl($postUrl); } /** * User:Steven * * Desc:编辑符合携程需要的XML格式 * @param $data array 请求体 * @param $RequestTypeName string 请求方法名称 * @return string */ public static function xml_encode($data, $RequestTypeName) { $params = Yii::$app->params['ctrip']['soap']; $timeStamp = date("Y-m-d H:i:s", time()); $xml = ""; $xml .= ""; $xml .= self::data_to_xml($data); $xml .= ""; return $xml; } /** * User:Steven * * Desc:编辑符合携程需要的XML格式 * @param $data array 请求体 * @param $RequestTypeName string 请求方法名称 * @return string */ public static function xml_encode_remain($data, $RequestTypeName) { $params = Yii::$app->params['ctrip']['soap']; $timeStamp = date("Y-m-d H:i:s", time()); $xml = "\n"; $xml .= ""; $xml .= ""; $xml .= self::data_to_xml_ns($data, 'q1:'); $xml .= "]]>"; return $xml; } /** * User: wangxj * * 格式化返回的soap字符串 * * @param $str */ public static function formatResult($str) { $result = "{$str}"; return $result; } /** * User:Steven * * Desc:将xml转换为数组 * @param $xml * @return mixed */ public static function xml_to_array($xml) { $ob = simplexml_load_string($xml); $json = json_encode($ob); $array = json_decode($json, true); return $array; } /** * User:Steven * * Desc:将数组转化成xml * @param $data * @return string */ public static function data_to_xml($data) { if (is_object($data)) { $data = get_object_vars($data); } $xml = ''; foreach ($data as $key => $val) { if (is_null($val) || $val === '') { // $xml .= "<$key/>\n"; $xml .= "<$key>$val"; } else { if (!is_numeric($key)) { $xml .= "<$key>"; } $xml .= (is_array($val) || is_object($val)) ? self::data_to_xml($val) : $val; if (!is_numeric($key)) { $xml .= ""; } } } return $xml; } /** * User:Steven * Desc:拼接带有命名空间的XML * @param $data * @param $namespace * @return string */ public static function data_to_xml_ns($data, $namespace) { if (is_object($data)) { $data = get_object_vars($data); } $xml = ''; foreach ($data as $key => $val) { if (is_null($val) || $val === '') { // $xml .= "<$namespace$key/>\n"; $xml .= "<$namespace$key>$val"; } else { if (!is_numeric($key)) { $xml .= "<$namespace$key>"; } $xml .= (is_array($val) || is_object($val)) ? self::data_to_xml_ns($val, $namespace) : $val; if (!is_numeric($key)) { $xml .= ""; } } } return $xml; } /** * User:Steven * Desc:格式化时间字符串 (适用于Ctrip) * @param $dataTime * @param $type 1: 去掉T 2:拼接T */ public static function formatDataTime($dataTime, $type) { if ($type == 1) { $dateTime_arr = explode('T', $dataTime); $DataTime = $dateTime_arr[0] . ' ' . $dateTime_arr[1]; } else { $DataTime = date('Y-m-d\TH:i:s', strtotime($dataTime)); } return $DataTime; } /** * User: wangxj * * 获取错误信息到字符串 * * @param $model Model * @return string */ public static function getModelError($model) { $tmp = $model->getErrors(); if (!empty($tmp)) { $str = ''; foreach ($tmp as $item) { if (is_array($item)) { foreach ($item as $value) { $str .= $value . ' '; } } else { $str .= $item; } } return trim($str); } else { return ''; } } /** * User: wangxj * * 把时间转换为 * * @param $time * @param $type string 不需要返回 23988 */ public static function timeHour($time, $type = '') { if ($time != '-1' && $time != '-2' || $type == '') { $data = explode(',', $time); if (count($data) > 1) { $tmp = explode(':', $data[1]); return (int)($data[0]) * 24 + (24 - (int)($tmp[0])); } else { $tmp = explode(':', $data[0]); return (24 - (int)($tmp[0])); } } else { return '23988'; } } /** * User:Stevem * * 求两个日期之间相差的天数 * (针对1970年1月1日之后,求之前可以采用泰勒公式) * @param string $day1 * @param string $day2 * @return number */ static function diffBetweenTwoDays($day1, $day2) { $second1 = strtotime($day1); $second2 = strtotime($day2); if ($second1 < $second2) { $tmp = $second2; $second2 = $second1; $second1 = $tmp; } return ($second1 - $second2) / 86400; } /** * User:Steven * Desc:计算两个日期范围内的所有日期 ,不包括期限的结束日期 * @param $strDateFrom * @param $strDateTo * @return array */ static function createDateRangeArray($strDateFrom, $strDateTo) { $aryRange = array(); $iDateFrom = mktime(1, 0, 0, substr($strDateFrom, 5, 2), substr($strDateFrom, 8, 2), substr($strDateFrom, 0, 4)); $iDateTo = mktime(1, 0, 0, substr($strDateTo, 5, 2), substr($strDateTo, 8, 2), substr($strDateTo, 0, 4)); if ($iDateTo >= $iDateFrom) { array_push($aryRange, date('Y-m-d', $iDateFrom)); // first entry while ($iDateFrom + 86400 < $iDateTo) { $iDateFrom += 86400; // add 24 hours array_push($aryRange, date('Y-m-d', $iDateFrom)); } } return $aryRange; } /** * User:Steven * * 想RTX发送推送消息 * 使用企业微信 zOfficeWechat::sendMsg($arr) * * $title 通知标题 * $msg 通知内容 */ static function sendMessageToRTX($title, $msg, $user = 'shifp,wangxj,yuw') { //生产环境才发送RTX if (Yii::$app->params['sendRTX']) { $cuntomer_list = $user; $arr = array( 'title' => $title . '【' . date('Y-m-d H:i:s', time()) . '】' . '[' . microtime() . ']', 'receiver' => $cuntomer_list, 'msg' => substr($msg, 0, 1024), ); self::httpsPost('http://180.168.4.58:8012/SendNotify.cgi', $arr); } } /** * User:Steven * Desc: * @param $url * @param array $param * @return mixed * @throws Exception */ static function httpsPost($url, $param = array()) { $ch = curl_init(); // 初始化一个 cURL 对象 curl_setopt($ch, CURLOPT_URL, $url); // 设置需要抓取的URL curl_setopt($ch, CURLOPT_HEADER, 0); // // 设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 // 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); // 传递一个作为HTTP “POST”操作的所有数据的字符串。//http_build_query:生成 URL-encode 之后的请求字符串 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-type:application/x-www-form-urlencoded;charset=utf-8' )); $rtn = curl_exec($ch); // 运行cURL,请求网页 if ($errno = curl_errno($ch)) { throw new Exception ('Curl Error(' . $errno . '):' . curl_error($ch)); } curl_close($ch); // 关闭URL请求 return $rtn; // 返回获取的数据 } /** * User:Steven * Desc:GET 请求 * @param $url * @return mixed */ static function http_get($url) { $oCurl = curl_init(); if (stripos($url, "https://") !== FALSE) { curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($oCurl, CURLOPT_VERBOSE, 1); curl_setopt($oCurl, CURLOPT_HEADER, 1); // $sContent = curl_exec($oCurl); // $aStatus = curl_getinfo($oCurl); $sContent = self::execCURL($oCurl); curl_close($oCurl); return $sContent; } /** * User:Steven * POST 请求(新) * @param string $url * @param array $param * @param boolean $post_file 是否文件上传 * @return string content */ static function http_post($url, $param, $post_file = false) { $oCurl = curl_init(); if (stripos($url, "https://") !== FALSE) { curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } if (PHP_VERSION_ID >= 50500 && class_exists('\CURLFile')) { $is_curlFile = true; } else { $is_curlFile = false; if (defined('CURLOPT_SAFE_UPLOAD')) { curl_setopt($oCurl, CURLOPT_SAFE_UPLOAD, false); } } if ($post_file) { if ($is_curlFile) { foreach ($param as $key => $val) { if (isset($val["tmp_name"])) { $param[$key] = new \CURLFile(realpath($val["tmp_name"]), $val["type"], $val["name"]); } else if (substr($val, 0, 1) == '@') { $param[$key] = new \CURLFile(realpath(substr($val, 1))); } } } $strPOST = $param; } else { $strPOST = urldecode(json_encode($param)); } curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($oCurl, CURLOPT_POST, true); curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST); curl_setopt($oCurl, CURLOPT_VERBOSE, 1); curl_setopt($oCurl, CURLOPT_HEADER, 1); // $sContent = curl_exec($oCurl); // $aStatus = curl_getinfo($oCurl); $sContent = self::execCURL($oCurl); curl_close($oCurl); return $sContent; } /** * User:Steven * Desc:执行CURL请求,并封装返回对象 * @param $ch * @return array */ static function execCURL($ch) { $response = curl_exec($ch); $error = curl_error($ch); $result = array('header' => '', 'content' => '', 'curl_error' => '', 'http_code' => '', 'last_url' => ''); if ($error != "") { $result['curl_error'] = $error; return $result; } $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $result['header'] = str_replace(array("\r\n", "\r", "\n"), "
", substr($response, 0, $header_size)); $result['content'] = substr($response, $header_size); $result['http_code'] = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result['last_url'] = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); $result["base_resp"] = array(); $result["base_resp"]["ret"] = $result['http_code'] == 200 ? 0 : $result['http_code']; $result["base_resp"]["err_msg"] = $result['http_code'] == 200 ? "ok" : $result["curl_error"]; return $result; } /** * User: wangxj * * 保存日志 * * @param $action * @param $string */ static function writeLog($action, $string) { $string = date('Y-m-d H:i:s') . " $action " . PHP_EOL . $string . PHP_EOL; if (!file_exists(__DIR__ . '/../runtime/logs/soap/receive')) { mkdir(__DIR__ . '/../runtime/logs/soap/receive', 0777, true); } file_put_contents(__DIR__ . '/../runtime/logs/soap/receive/' . date('Y-m-d') . '.log', $string, FILE_APPEND); } /** * 根据时间戳,返回后七天的时间戳 * @param $time * @return array */ static function getWeekTime($time) { $times[] = strtotime('+0 days', $time); $times[] = strtotime('+1 days', $time); $times[] = strtotime('+2 days', $time); $times[] = strtotime('+3 days', $time); $times[] = strtotime('+4 days', $time); $times[] = strtotime('+5 days', $time); $times[] = strtotime('+6 days', $time); $times[] = strtotime('+7 days', $time); $times[] = strtotime('+8 days', $time); $times[] = strtotime('+9 days', $time); $times[] = strtotime('+10 days', $time); $times[] = strtotime('+11 days', $time); $times[] = strtotime('+12 days', $time); $times[] = strtotime('+13 days', $time); return $times; } /** * User:Steven * Desc:获取日期label * @param $number * @param string $tag * @return string */ static function getWeekLabel($number, $tag = '周') { $week = ['日', '一', '二', '三', '四', '五', '六']; return isset($week[$number]) ? $tag . $week[$number] : ''; } /** * 获取日期区间的所有日期 * * @param $start_date string 2017-07-01 * @param $end_date string 2017-07-31 * @param $type bool 是否包含结束日期 * * @author wangxj */ static function getRangeDate($start_date, $end_date, $type=false){ $start = new \DateTime($start_date); $end = new \DateTime($end_date); $interval = new \DateInterval('P1D'); // 1 day interval $period = new \DatePeriod($start, $interval, $end); $result = []; foreach ($period as $day) { // Do stuff with each $day... /* @var $day /DatePeriod */ $result[] = $day->format('Y-m-d'); } if($type=== true){ $result[] = $end_date; } return $result; } /** * Function Description:发送邮件 * Function Name: send_mail * @param $user * @param $pwd * @param $toemail * @param $title * @param $content * * @return mixed * * @author 冒炎 */ static function send_mail($user, $pwd, $toemail, $title, $content) { $currentDir = dirname(__FILE__); include_once $currentDir .'/Smtp.class.php'; //******************** 配置信息 ******************************** $smtpserver = "smtp.exmail.qq.com";//SMTP服务器 $smtpserverport = 25;//SMTP服务器端口 $smtpusermail = $user;//SMTP服务器的用户邮箱 $smtpemailto = $toemail;//发送给谁 $smtpuser = $user;//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名 $smtppass = $pwd;//SMTP服务器的用户密码 $mailtitle = $title;//邮件主题 $mailcontent = "

" . $content . "

";//邮件内容 $mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件 //************************ 配置信息 **************************** set_time_limit(0); $smtp = new \Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证. $smtp->debug = false;//是否显示发送的调试信息 $state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype); if ($state == "") { $data['code'] = '1'; $data['info'] = '邮件发送失败,请联系管理员'; } else { $data['code'] = '0'; $data['info'] = '邮件发送成功'; } return $data; } /** * User:Steven * Desc:计算早餐级别 * @param $breakfast * @return int */ static function calBreakfastLevel($breakfast) { switch ($breakfast) { case 0: $breakfast_desc = '无早'; break; case 1: $breakfast_desc ='单早'; break; case 2: $breakfast_desc = '双早'; break; case 3: $breakfast_desc = '三早'; break; case 4: $breakfast_desc = '四早'; break; case 5: $breakfast_desc = '五早'; break; case 6: $breakfast_desc = '六早'; break; case 7: $breakfast_desc = '七早'; break; case 8: $breakfast_desc ='八早'; break; case 9: $breakfast_desc = '九早'; break; case 10: $breakfast_desc = '十早'; break; default: $breakfast_desc = '多早'; break; } return $breakfast_desc; } /** * Notes:过滤所选日期中符合星期的日期 * User: Steven * Date: 2018/2/2 * Time: 14:33 * @param $strDateFrom * @param $strDateTo * @param $week_arr * @return array */ static function createDateByWeek($strDateFrom, $strDateTo, $week_arr) { $aryRange = array(); $iDateFrom = mktime(1, 0, 0, substr($strDateFrom, 5, 2), substr($strDateFrom, 8, 2), substr($strDateFrom, 0, 4)); $iDateTo = mktime(1, 0, 0, substr($strDateTo, 5, 2), substr($strDateTo, 8, 2), substr($strDateTo, 0, 4)); if ($iDateTo >= $iDateFrom) { if (in_array(date("w", $iDateFrom), $week_arr)) { array_push($aryRange, date('Y-m-d', $iDateFrom));//first entry } while ($iDateFrom < $iDateTo) { $iDateFrom += 86400;//add 24 hours $number_wk = date("w", $iDateFrom); if (in_array($number_wk, $week_arr)) { array_push($aryRange, date('Y-m-d', $iDateFrom)); } } } return $aryRange; } } ?>