php-server 包括下单 和 接收通知要用到的函数

/**

*产生随机字符串,不长于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 = "";

    foreach ($arr as $key => $val) {

        if (is_numeric($val)){

            $xml.="<".$key.">".$val."";

        }else{

            $xml.="<".$key.">"; 

        }

    }

    $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"."
";

echo "错误原因查询
";

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;

}

你可能感兴趣的:(php-server 包括下单 和 接收通知要用到的函数)