美文网首页
wxpay-func

wxpay-func

作者: xueyueshuai | 来源:发表于2023-05-04 14:01 被阅读0次
    <?php
    /**
     *产生随机字符串,不长于32位
     *@param int $length
     *@return (str)产生的随机字符串 
    */
    function get_nonce_str($length = 32){
        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";  
        $str ="";
        for ( $i = 0; $i < $length; $i++ ){  
            $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
        } 
        return $str;
    }
    
    /**
     *生成微信支付签名 本函数不覆盖sign成员变量
     *@param (arr)$arr 要签名的数组
     *@param (str)$key 商户秘钥
     *@return (str)签名 
    */
    function make_sign($arr, $key){
        //签名步骤一:按字典序排序参数
        ksort($arr);
        $str = to_url_params($arr);
        //签名步骤二:在str后加入KEY
        $str = $str . "&key=".$key;
        //签名步骤三:MD5加密
        $str = md5($str);
        //签名步骤四:所有字符转为大写
        $result = strtoupper($str);
        return $result;
    }
    
    // 关联数组 格式化成 url传参格式的str 
    function to_url_params($arr){
        $str = "";
        foreach ($arr as $k => $v){
            if($k != "sign" && $v != "" && !is_array($v)){
                $str .= $k . "=" . $v . "&";
            }
        }
        $str = trim($str, "&");
        return $str;
    }
    
    // array 转 xml
    function array_to_xml($arr){
        $xml = "<xml>";
        foreach ($arr as $key => $val) {
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">"; 
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
            }
        }
        $xml.="</xml>";
        return $xml; 
    }
    
    // xml 转 array  $xml 为XML格式的str
    function xml_to_array($xml){
        libxml_disable_entity_loader(true);
        $arr= json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        return $arr;
    }
    
    // 以post方式提交xml到对应的接口url
    function post_xml_curl($xml, $url, $second = 30){
        //初始化curl        
        $ch = curl_init();
        //设置超时
        curl_setopt($ch, CURLOPT_TIMEOUT, $second);
        //这里设置代理,如果有的话
        //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
        //设置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        //运行curl
        $data = curl_exec($ch);
        //curl_close($ch);
        //返回结果
        if($data){
            curl_close($ch);
            return $data;
        }else{ 
            $error = curl_errno($ch);
            echo "curl出错,错误码:$error"."<br>"; 
            echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
            curl_close($ch);
            return false;
        }
    }
    
    // 接收 xml (本质为str 符合一定的格式)
    function get_post_xml(){
        // $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
        $xml = file_get_contents('php://input');
        return $xml;
    }
    
    // 回复微信的支付通知
    function reply_notify($bool){
        if($bool){
            $arr = [];
            $arr['return_code'] = 'SUCCESS';
            $arr['return_msg'] = 'OK';  
        }else{
            $arr = [];
            $arr['return_code'] = 'FAIL'; 
            $arr['return_msg'] = 'error';  
        }
        $xml = array_to_xml($arr);
        return $xml;
    }
    
    

    相关文章

      网友评论

          本文标题:wxpay-func

          本文链接:https://www.haomeiwen.com/subject/ispxsdtx.html