酒店预订平台
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Util.php 7.1 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. /**
  3. * 全局通用方法集合
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 倪宗锋
  12. * PhpStorm Util.php
  13. * Create By 2017/2/22 19:44 $
  14. */
  15. namespace app\admin\command;
  16. use common\models\AdmUser;
  17. use common\models\FxUser;
  18. use common\models\LogUserOperation;
  19. use common\models\OrderMain;
  20. use common\models\ProdCategory;
  21. use common\models\ShUser;
  22. use yii\base\Exception;
  23. class Util
  24. {
  25. /**
  26. * Function Description:返回成功数组数据
  27. * Function Name: returnArrSu
  28. * @param string $msg 提示信息
  29. * @param string $url 跳转地址
  30. * @param string|array $data 需要传递的数据
  31. * @param string $code 错误码
  32. *
  33. * @return array
  34. *
  35. * @author 倪宗锋
  36. */
  37. public static function returnArrSu($msg = '', $data = '', $url = '', $code = '')
  38. {
  39. $return = array();
  40. $return['flag'] = true;
  41. $return['msg'] = $msg;
  42. $return['url'] = $url;
  43. $return['code'] = $code;
  44. $return['data'] = $data;
  45. return $return;
  46. }
  47. /**
  48. * Function Description:返回错误数组数据
  49. * Function Name: returnArrEr
  50. * @param string $msg 提示信息
  51. * @param string $url 跳转地址
  52. * @param string|array $data 需要传递的数据
  53. * @param string $code 错误码
  54. *
  55. * @return array
  56. *
  57. * @author 倪宗锋
  58. */
  59. public static function returnArrEr($msg = '', $data = '', $url = '', $code = '')
  60. {
  61. $return = array();
  62. $return['flag'] = false;
  63. $return['msg'] = $msg;
  64. $return['url'] = $url;
  65. $return['code'] = $code;
  66. $return['data'] = $data;
  67. return $return;
  68. }
  69. /**
  70. * Function Description:json转换为xml
  71. * Function Name: jsonToXml
  72. * @param $json
  73. *
  74. * @return bool|string
  75. *
  76. * @author 倪宗锋
  77. */
  78. public static function jsonToXml($json)
  79. {
  80. if (empty($json)) {
  81. return false;
  82. }
  83. $array = json_decode($json);
  84. $xml = '';
  85. $xml .= '<?xml version="1.0" encoding="UTF-8"?>' . self::arraysToXml(['response' => $array]);
  86. return $xml;
  87. }
  88. /**
  89. * Function Description:数组转换成xml
  90. * Function Name: arrayToXml
  91. * @param $array
  92. * @param $key
  93. * @return string
  94. *
  95. * @author 倪宗锋
  96. */
  97. public static function arraysToXml($array, $key = '')
  98. {
  99. $string = '';
  100. if (count($array) == 0) {
  101. return '';
  102. }
  103. foreach ($array as $k => $v) {
  104. if (is_array($v) && isset($v['0'])) {
  105. $string .= self::arraysToXml($v, $k);//是数组或者对像就的递归调用
  106. } else {
  107. if ($key != '') {
  108. $k = $key;
  109. }
  110. $string .= '<' . $k . '>';
  111. if (is_array($v) || is_object($v)) {//判断是否是数组,或者,对像
  112. $string .= self::arraysToXml($v);//是数组或者对像就的递归调用
  113. } elseif (is_numeric($v)) {
  114. $string .= $v;
  115. } elseif ($v != '') {
  116. $string .= '<![CDATA[' . $v . ']]>';
  117. } else {
  118. $string .= '';
  119. }
  120. $string .= '</' . $k . '>';
  121. }
  122. }
  123. return $string;
  124. }
  125. /**
  126. * Function Description:xml转换为json
  127. * Function Name: xml_to_json
  128. * @param $source
  129. *
  130. * @return string
  131. *
  132. * @author 倪宗锋
  133. */
  134. public static function xmlToJson($source)
  135. {
  136. if (is_file($source)) { //传的是文件,还是xml的string的判断
  137. $xml_array = simplexml_load_file($source);
  138. } else {
  139. $xml_array = simplexml_load_string(trim($source));
  140. }
  141. $json = json_encode($xml_array, true);
  142. return $json;
  143. }
  144. /**
  145. * Function Description:xml转换成数组
  146. * Function Name: xmlToArray
  147. * @param $source
  148. *
  149. * @return mixed
  150. *
  151. * @author 倪宗锋
  152. */
  153. public static function xmlToArray($source)
  154. {
  155. libxml_disable_entity_loader(true);
  156. $getResult = json_decode(json_encode(simplexml_load_string(trim($source), 'SimpleXMLElement', LIBXML_NOCDATA)), true);
  157. return $getResult;
  158. }
  159. /** Function Description:加密解密函数
  160. * Function Name: authCode
  161. * @param $string
  162. * @param string $operation
  163. * @param int $expiry
  164. * @return string|array
  165. * @author 倪宗锋
  166. */
  167. static function authCode($string, $operation = 'DECODE', $expiry = 0)
  168. {
  169. $key = 'udM5A8S50eg8veH15dd0m601de7073N8Bcn7d1I8Res7C7o7z274D6y342I4C7t7';
  170. $ckey_length = 4; // 随机密钥长度 取值 0-32;
  171. // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
  172. // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
  173. // 当此值为 0 时,则不产生随机密钥
  174. $key = md5($key);
  175. $keya = md5(substr($key, 0, 16));
  176. $keyb = md5(substr($key, 16, 16));
  177. $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : '';
  178. $cryptkey = $keya . md5($keya . $keyc);
  179. $key_length = strlen($cryptkey);
  180. $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string;
  181. $string_length = strlen($string);
  182. $result = '';
  183. $box = range(0, 255);
  184. $rndkey = array();
  185. for ($i = 0; $i <= 255; $i++) {
  186. $rndkey[$i] = ord($cryptkey[$i % $key_length]);
  187. }
  188. for ($j = $i = 0; $i < 256; $i++) {
  189. $j = ($j + $box[$i] + $rndkey[$i]) % 256;
  190. $tmp = $box[$i];
  191. $box[$i] = $box[$j];
  192. $box[$j] = $tmp;
  193. }
  194. for ($a = $j = $i = 0; $i < $string_length; $i++) {
  195. $a = ($a + 1) % 256;
  196. $j = ($j + $box[$a]) % 256;
  197. $tmp = $box[$a];
  198. $box[$a] = $box[$j];
  199. $box[$j] = $tmp;
  200. $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
  201. }
  202. if ($operation == 'DECODE') {
  203. if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $keyb), 0, 16)) {
  204. return substr($result, 26);
  205. } else {
  206. return '';
  207. }
  208. } else {
  209. return $keyc . str_replace('=', '', base64_encode($result));
  210. }
  211. }
  212. }