PHP常用功能组件方法---代码块

工作中常用的几个功能封装,收集整理,留用2018年6月23日15:43:03

xml 转 array数组

   /**
    * 将xml转为array
    * @param string $xml
    * @throws WxPayException
    */
public function FromXml($xml)
{  
   if(!$xml){
      throw new Exception("xml数据异常!");
   }
       //将XML转为array
       //禁止引用外部xml实体
       libxml_disable_entity_loader(true);
       $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);       
   return $this->values;
}

对象中数组 转 xml

/**
 * 输出xml字符
 * @throws WxPayException
**/
public function ToXml()
{
   if(!is_array($this->values) 
      || count($this->values) <= 0)
   {
          throw new Exception("数组数据异常!");
       }
       
       $xml = "<xml>";
       foreach ($this->values as $key=>$val)
       {
          if (is_numeric($val)){
             $xml.="<".$key.">".$val."</".$key.">";
          }else{
             $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
          }
       }
       $xml.="</xml>";
       return $xml; 
}

格式化URL参数

/**
 * 格式化参数格式化成url参数
 */
public function ToUrlParams()
{
   $buff = "";
   foreach ($this->values as $k => $v)
   {
      if($k != "sign" && $v != "" && !is_array($v)){
         $buff .= $k . "=" . $v . "&";
      }
   }
   
   $buff = trim($buff, "&");
   return $buff;
}

生成32位随机数

/**
 * 
 * 产生随机字符串,不长于32位
 * @param int $length
 * @return 产生的随机字符串
 */
public static function getNonceStr($length = 32) 
{
   $chars = "abcdefghijklmnopqrstuvwxyz0123456789";  
   $str ="";
   for ( $i = 0; $i < $length; $i++ )  {  
      $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
   } 
   return $str;
}

curl方法post请求xml提交

/**
 * 以post方式提交xml到对应的接口url
 * 
 * @param string $xml  需要post的xml数据
 * @param string $url  url
 * @param bool $useCert 是否需要证书,默认不需要
 * @param int $second   url执行超时时间,默认30s
 * @throws WxPayException
 */
private static function postXmlCurl($xml, $url, $useCert = false, $second = 30)
{     
   $ch = curl_init();
   //设置超时
   curl_setopt($ch, CURLOPT_TIMEOUT, $second);
   
   //如果有配置代理这里就设置代理
   if(WxPayConfig::CURL_PROXY_HOST != "0.0.0.0" 
      && WxPayConfig::CURL_PROXY_PORT != 0){
      curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST);
      curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT);
   }
   curl_setopt($ch,CURLOPT_URL, $url);
   curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); //调试完务必改回true
   curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, 2);//严格校验 0和2,默认严格校验2
   //设置header
   curl_setopt($ch, CURLOPT_HEADER, FALSE);
   //要求结果为字符串且输出到屏幕上
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

   if($useCert == true){
      //设置证书
      //使用证书:cert 与 key 分别属于两个.pem文件
      curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
      curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::SSLCERT_PATH);
      curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
      curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::SSLKEY_PATH);
   }
   //post提交方式
   curl_setopt($ch, CURLOPT_POST, TRUE);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
   //运行curl
   $data = curl_exec($ch);
   //返回结果
   if($data){
      curl_close($ch);
      return $data;
   } else { 
      $error = curl_errno($ch);
      curl_close($ch);
      throw new WxPayException("curl出错,错误码:$error");
   }
}

获取毫秒时间戳

/**
 * 获取毫秒级别的时间戳
 */
private static function getMillisecond()
{
   //获取毫秒的时间戳
   $time = explode ( " ", microtime () );
   $time = $time[1] . ($time[0] * 1000);
   $time2 = explode( ".", $time );
   $time = $time2[0];
   return $time;
}

文章来源: PHP常用功能组件方法---代码块

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:PHP常用功能组件方法---代码块