微信支付 APP 支付方式的服务器端处理程序

对于微信的APP的支付,客户服务说只能通过微信开放平台申请。后来在公众帐号确实发现了证据: 
这里写图片描述

微信支付在申请的时候就比较严(麻烦),对服务类的一些支付,本来商品就是虚拟的,所以需要将商品描述的比较详细,服务类的嘛,支付流程是如何的,我们提供什么服务的,操作界面如何等。商品描述140个字,考验你的文本组织能力了。

支付帐号申请下来后,收到财付通的一封邮件 
效果如下: 
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=3_1 
这里写图片描述

基本上,app支付的流程就是 
1、统一下单(由自己的服务器处理) 
2、发起支付(客户端) 
3、支付成功回调(服务器端) 
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_1 
这里写图片描述

这里只说第一点,统一下单程序。统一下单的服务器端处理,就是要生成预支付订单的ID 
调试了一下,有一些坑,整理代码如下:

<code class="hljs handlebars has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="xml" style="box-sizing: border-box;"><span class="php" style="box-sizing: border-box;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"><?php</span>
header(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Content-type: text/html; charset=utf-8"</span>);
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">include</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"../../config.php"</span>;

<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$orderBody</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test商品"</span>;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$tade_no</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"abc_"</span> . time();
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$total_fee</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$WxPayHelper</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> WxPayHelper();
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$response</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$WxPayHelper</span>->getPrePayOrder(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$orderBody</span>, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$tade_no</span>, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$total_fee</span>);

p_val(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"---response----"</span>);
p_val(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$response</span>);
p_val(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"---拿到prepayId再次签名----"</span>);
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$x</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$WxPayHelper</span>->getOrder(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$response</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'prepay_id'</span>]);
p_val(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$x</span>);

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 * convert xml string to php array - useful to get a serializable value
 *
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> string $xmlstr
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> array
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @author</span> Adrien aka Gaarf
 */</span>

<span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">WxPayHelper</span>{</span>
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*
    配置参数
    */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$config</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">array</span>(
        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'appid'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"wx7e26b00000000000"</span>,    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*微信开放平台上的应用id*/</span>
        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'mch_id'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1233000000"</span>,   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*微信申请成功之后邮件中的商户id*/</span>
        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'api_key'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"s6aITei3J3d4UYcCn3k0Mq0000000000"</span>,    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*在微信商户平台上自己设定的api密钥 32位*/</span>
        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'notify_url'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'http://mycompany.com/pub_v2/pay/notify.v2.php'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*自定义的回调程序地址id*/</span>
    );

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span>  <span class="hljs-title" style="box-sizing: border-box;">__construct</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> {</span>

    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//获取预支付订单</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">getPrePayOrder</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$body</span>, <span class="hljs-variable" style="box-sizing: border-box;">$out_trade_no</span>, <span class="hljs-variable" style="box-sizing: border-box;">$total_fee</span>)</span>{</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"https://api.mch.weixin.qq.com/pay/unifiedorder"</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$notify_url</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->config[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"notify_url"</span>];

        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$onoce_str</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->getRandChar(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span>);

        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"appid"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->config[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"appid"</span>];
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"body"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$body</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"mch_id"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->config[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'mch_id'</span>];
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"nonce_str"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$onoce_str</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"notify_url"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$notify_url</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"out_trade_no"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$out_trade_no</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"spbill_create_ip"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->get_client_ip();
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"total_fee"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$total_fee</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"trade_type"</span>] = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"APP"</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$s</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->getSign(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"sign"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$s</span>;

        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xml</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->arrayToXml(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$response</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->postXmlCurl(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xml</span>, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span>);

        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//将微信返回的结果xml转成数组</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->xmlstr_to_array(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$response</span>);
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//执行第二次签名,才能返回给客户端使用</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">getOrder</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$prepayId</span>)</span>{</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"appid"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->config[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"appid"</span>];
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"noncestr"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->getRandChar(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span>);;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"package"</span>] = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Sign=WXPay"</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"partnerid"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->config[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'mch_id'</span>];
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"prepayid"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$prepayId</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"timestamp"</span>] = time();
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$s</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->getSign(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"sign"</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$s</span>;

        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>;
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*
        生成签名
    */</span>
    <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">getSign</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$Obj</span>)</span>
    {</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$Obj</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$k</span> => <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>)
        {
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$Parameters</span>[strtolower(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$k</span>)] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>;
        }
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//签名步骤一:按字典序排序参数</span>
        ksort(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$Parameters</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$String</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->formatBizQueryParaMap(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$Parameters</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//echo "【string】 =".$String."</br>";</span>
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//签名步骤二:在string后加入KEY</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$String</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$String</span>.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"&key="</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->config[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'api_key'</span>];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<textarea style='width: 50%; height: 150px;'>$String</textarea> <br />"</span>;
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//签名步骤三:MD5加密</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result_</span> = strtoupper(md5(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$String</span>));
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result_</span>;
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//获取指定长度的随机字符串</span>
    <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">getRandChar</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$length</span>)</span>{</span>
       <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$str</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>;
       <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$strPol</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"</span>;
       <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$max</span> = strlen(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$strPol</span>)-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;

       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span>=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span><<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$length</span>;<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span>++){
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$str</span>.=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$strPol</span>[rand(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$max</span>)];<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//rand($min,$max)生成介于min和max两个数之间的一个随机整数</span>
       }

       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$str</span>;
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//数组转xml</span>
    <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">arrayToXml</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$arr</span>)</span>
    {</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xml</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<xml>"</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$arr</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$key</span>=><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$val</span>)
        {
             <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (is_numeric(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$val</span>))
             {
                <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xml</span>.=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<"</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$key</span>.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">">"</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$val</span>.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"</"</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$key</span>.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">">"</span>; 

             }
             <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>
                <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xml</span>.=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<"</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$key</span>.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"><![CDATA["</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$val</span>.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"]]></"</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$key</span>.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">">"</span>;  
        }
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xml</span>.=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"</xml>"</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xml</span>; 
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//post https请求,CURLOPT_POSTFIELDS xml格式</span>
    <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">postXmlCurl</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$xml</span>,<span class="hljs-variable" style="box-sizing: border-box;">$url</span>,<span class="hljs-variable" style="box-sizing: border-box;">$second</span>=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30</span>)</span>
    {</span>       
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//初始化curl        </span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span> = curl_init();
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//超时时间</span>
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>,CURLOPT_TIMEOUT,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$second</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//这里设置代理,如果有的话</span>
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');</span>
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);</span>
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>,CURLOPT_URL, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span>);
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>,CURLOPT_SSL_VERIFYPEER,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">FALSE</span>);
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>,CURLOPT_SSL_VERIFYHOST,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">FALSE</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置header</span>
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>, CURLOPT_HEADER, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">FALSE</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//要求结果为字符串且输出到屏幕上</span>
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>, CURLOPT_RETURNTRANSFER, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">TRUE</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//post提交方式</span>
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>, CURLOPT_POST, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">TRUE</span>);
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>, CURLOPT_POSTFIELDS, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xml</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//运行curl</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span> = curl_exec(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//返回结果</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>)
        {
            curl_close(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>);
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> 
        { 
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$error</span> = curl_errno(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>);
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"curl出错,错误码:$error"</span>.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<br>"</span>;
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>"</span>;
            curl_close(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ch</span>);
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>;
        }
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*
        获取当前服务器的IP
    */</span>
    <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">get_client_ip</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>
    {</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$_SERVER</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'REMOTE_ADDR'</span>]) {
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$cip</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$_SERVER</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'REMOTE_ADDR'</span>];
        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">elseif</span> (getenv(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"REMOTE_ADDR"</span>)) {
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$cip</span> = getenv(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"REMOTE_ADDR"</span>);
        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">elseif</span> (getenv(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"HTTP_CLIENT_IP"</span>)) {
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$cip</span> = getenv(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"HTTP_CLIENT_IP"</span>);
        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$cip</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"unknown"</span>;
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$cip</span>;
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//将数组转成uri字符串</span>
    <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">formatBizQueryParaMap</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$paraMap</span>, <span class="hljs-variable" style="box-sizing: border-box;">$urlencode</span>)</span>
    {</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$buff</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>;
        ksort(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$paraMap</span>);
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$paraMap</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$k</span> => <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>)
        {
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$urlencode</span>)
            {
               <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span> = urlencode(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>);
            }
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$buff</span> .= strtolower(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$k</span>) . <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"="</span> . <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span> . <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"&"</span>;
        }
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$reqPar</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (strlen(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$buff</span>) > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) 
        {
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$reqPar</span> = substr(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$buff</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, strlen(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$buff</span>)-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$reqPar</span>;
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
    xml转成数组
    */</span>
    <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">xmlstr_to_array</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$xmlstr</span>)</span> {</span>
      <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$doc</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> DOMDocument();
      <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$doc</span>->loadXML(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$xmlstr</span>);
      <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->domnode_to_array(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$doc</span>->documentElement);
    }
    <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">domnode_to_array</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$node</span>)</span> {</span>
      <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">array</span>();
      <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$node</span>->nodeType) {
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> XML_CDATA_SECTION_NODE:
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> XML_TEXT_NODE:
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span> = trim(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$node</span>->textContent);
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> XML_ELEMENT_NODE:
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span>=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$m</span>=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$node</span>->childNodes->length; <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span><<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$m</span>; <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span>++) {
         <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$child</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$node</span>->childNodes->item(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span>);
         <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->domnode_to_array(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$child</span>);
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">isset</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$child</span>->tagName)) {
           <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$t</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$child</span>->tagName;
           <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(!<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">isset</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span>[<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$t</span>])) {
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span>[<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$t</span>] = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">array</span>();
           }
           <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span>[<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$t</span>][] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>;
         }
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">elseif</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>) {
          <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span> = (string) <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>;
         }
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(is_array(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span>)) {
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$node</span>->attributes->length) {
          <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$a</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">array</span>();
          <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$node</span>->attributes <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$attrName</span> => <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$attrNode</span>) {
           <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$a</span>[<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$attrName</span>] = (string) <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$attrNode</span>->value;
          }
          <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'@attributes'</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$a</span>;
         }
         <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">foreach</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">as</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$t</span> => <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>) {
          <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(is_array(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>) && count(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>)==<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> && <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$t</span>!=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'@attributes'</span>) {
           <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span>[<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$t</span>] = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$v</span>[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>];
          }
         }
        }
       <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
      }
      <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$output</span>;
    }
}
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">?></span></span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li><li style="box-sizing: border-box; padding: 0px 5px;">145</li><li style="box-sizing: border-box; padding: 0px 5px;">146</li><li style="box-sizing: border-box; padding: 0px 5px;">147</li><li style="box-sizing: border-box; padding: 0px 5px;">148</li><li style="box-sizing: border-box; padding: 0px 5px;">149</li><li style="box-sizing: border-box; padding: 0px 5px;">150</li><li style="box-sizing: border-box; padding: 0px 5px;">151</li><li style="box-sizing: border-box; padding: 0px 5px;">152</li><li style="box-sizing: border-box; padding: 0px 5px;">153</li><li style="box-sizing: border-box; padding: 0px 5px;">154</li><li style="box-sizing: border-box; padding: 0px 5px;">155</li><li style="box-sizing: border-box; padding: 0px 5px;">156</li><li style="box-sizing: border-box; padding: 0px 5px;">157</li><li style="box-sizing: border-box; padding: 0px 5px;">158</li><li style="box-sizing: border-box; padding: 0px 5px;">159</li><li style="box-sizing: border-box; padding: 0px 5px;">160</li><li style="box-sizing: border-box; padding: 0px 5px;">161</li><li style="box-sizing: border-box; padding: 0px 5px;">162</li><li style="box-sizing: border-box; padding: 0px 5px;">163</li><li style="box-sizing: border-box; padding: 0px 5px;">164</li><li style="box-sizing: border-box; padding: 0px 5px;">165</li><li style="box-sizing: border-box; padding: 0px 5px;">166</li><li style="box-sizing: border-box; padding: 0px 5px;">167</li><li style="box-sizing: border-box; padding: 0px 5px;">168</li><li style="box-sizing: border-box; padding: 0px 5px;">169</li><li style="box-sizing: border-box; padding: 0px 5px;">170</li><li style="box-sizing: border-box; padding: 0px 5px;">171</li><li style="box-sizing: border-box; padding: 0px 5px;">172</li><li style="box-sizing: border-box; padding: 0px 5px;">173</li><li style="box-sizing: border-box; padding: 0px 5px;">174</li><li style="box-sizing: border-box; padding: 0px 5px;">175</li><li style="box-sizing: border-box; padding: 0px 5px;">176</li><li style="box-sizing: border-box; padding: 0px 5px;">177</li><li style="box-sizing: border-box; padding: 0px 5px;">178</li><li style="box-sizing: border-box; padding: 0px 5px;">179</li><li style="box-sizing: border-box; padding: 0px 5px;">180</li><li style="box-sizing: border-box; padding: 0px 5px;">181</li><li style="box-sizing: border-box; padding: 0px 5px;">182</li><li style="box-sizing: border-box; padding: 0px 5px;">183</li><li style="box-sizing: border-box; padding: 0px 5px;">184</li><li style="box-sizing: border-box; padding: 0px 5px;">185</li><li style="box-sizing: border-box; padding: 0px 5px;">186</li><li style="box-sizing: border-box; padding: 0px 5px;">187</li><li style="box-sizing: border-box; padding: 0px 5px;">188</li><li style="box-sizing: border-box; padding: 0px 5px;">189</li><li style="box-sizing: border-box; padding: 0px 5px;">190</li><li style="box-sizing: border-box; padding: 0px 5px;">191</li><li style="box-sizing: border-box; padding: 0px 5px;">192</li><li style="box-sizing: border-box; padding: 0px 5px;">193</li><li style="box-sizing: border-box; padding: 0px 5px;">194</li><li style="box-sizing: border-box; padding: 0px 5px;">195</li><li style="box-sizing: border-box; padding: 0px 5px;">196</li><li style="box-sizing: border-box; padding: 0px 5px;">197</li><li style="box-sizing: border-box; padding: 0px 5px;">198</li><li style="box-sizing: border-box; padding: 0px 5px;">199</li><li style="box-sizing: border-box; padding: 0px 5px;">200</li><li style="box-sizing: border-box; padding: 0px 5px;">201</li><li style="box-sizing: border-box; padding: 0px 5px;">202</li><li style="box-sizing: border-box; padding: 0px 5px;">203</li><li style="box-sizing: border-box; padding: 0px 5px;">204</li><li style="box-sizing: border-box; padding: 0px 5px;">205</li><li style="box-sizing: border-box; padding: 0px 5px;">206</li><li style="box-sizing: border-box; padding: 0px 5px;">207</li><li style="box-sizing: border-box; padding: 0px 5px;">208</li><li style="box-sizing: border-box; padding: 0px 5px;">209</li><li style="box-sizing: border-box; padding: 0px 5px;">210</li><li style="box-sizing: border-box; padding: 0px 5px;">211</li><li style="box-sizing: border-box; padding: 0px 5px;">212</li><li style="box-sizing: border-box; padding: 0px 5px;">213</li><li style="box-sizing: border-box; padding: 0px 5px;">214</li><li style="box-sizing: border-box; padding: 0px 5px;">215</li><li style="box-sizing: border-box; padding: 0px 5px;">216</li><li style="box-sizing: border-box; padding: 0px 5px;">217</li><li style="box-sizing: border-box; padding: 0px 5px;">218</li><li style="box-sizing: border-box; padding: 0px 5px;">219</li><li style="box-sizing: border-box; padding: 0px 5px;">220</li><li style="box-sizing: border-box; padding: 0px 5px;">221</li><li style="box-sizing: border-box; padding: 0px 5px;">222</li><li style="box-sizing: border-box; padding: 0px 5px;">223</li><li style="box-sizing: border-box; padding: 0px 5px;">224</li><li style="box-sizing: border-box; padding: 0px 5px;">225</li><li style="box-sizing: border-box; padding: 0px 5px;">226</li><li style="box-sizing: border-box; padding: 0px 5px;">227</li><li style="box-sizing: border-box; padding: 0px 5px;">228</li><li style="box-sizing: border-box; padding: 0px 5px;">229</li><li style="box-sizing: border-box; padding: 0px 5px;">230</li><li style="box-sizing: border-box; padding: 0px 5px;">231</li><li style="box-sizing: border-box; padding: 0px 5px;">232</li><li style="box-sizing: border-box; padding: 0px 5px;">233</li><li style="box-sizing: border-box; padding: 0px 5px;">234</li><li style="box-sizing: border-box; padding: 0px 5px;">235</li><li style="box-sizing: border-box; padding: 0px 5px;">236</li><li style="box-sizing: border-box; padding: 0px 5px;">237</li><li style="box-sizing: border-box; padding: 0px 5px;">238</li><li style="box-sizing: border-box; padding: 0px 5px;">239</li><li style="box-sizing: border-box; padding: 0px 5px;">240</li><li style="box-sizing: border-box; padding: 0px 5px;">241</li><li style="box-sizing: border-box; padding: 0px 5px;">242</li><li style="box-sizing: border-box; padding: 0px 5px;">243</li><li style="box-sizing: border-box; padding: 0px 5px;">244</li><li style="box-sizing: border-box; padding: 0px 5px;">245</li><li style="box-sizing: border-box; padding: 0px 5px;">246</li><li style="box-sizing: border-box; padding: 0px 5px;">247</li><li style="box-sizing: border-box; padding: 0px 5px;">248</li><li style="box-sizing: border-box; padding: 0px 5px;">249</li><li style="box-sizing: border-box; padding: 0px 5px;">250</li><li style="box-sizing: border-box; padding: 0px 5px;">251</li><li style="box-sizing: border-box; padding: 0px 5px;">252</li><li style="box-sizing: border-box; padding: 0px 5px;">253</li><li style="box-sizing: border-box; padding: 0px 5px;">254</li><li style="box-sizing: border-box; padding: 0px 5px;">255</li><li style="box-sizing: border-box; padding: 0px 5px;">256</li><li style="box-sizing: border-box; padding: 0px 5px;">257</li></ul>

注意点: 
①post必须支持https,且参数格式必须是xml 
②sign签名的参数包括所有$data,除了自己 
这里写图片描述 
③$data[“spbill_create_ip”]不能随便设定一个ip地址,不要以为调试方便随便设定,结果返回签名错误坑你没商量。一定要是程序执行时所在的服务器ip地址,所以使用get_client_ip()获取就好。 
④api_key是需要自己进入商户平台设定的,邮件不会发给你哦 
这里写图片描述
使用随机程序产生32个字符就好了 
⑤相当重要的是:返回给各户端发起支付时,还要进行二次签名 $WxPayHelper->getOrder

3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值