php微信支付

1.开发环境 
Thinkphp 3.2.3 
微信:服务号,已认证 
开发域名:http://test.paywechat.com (自定义的域名,外网不可访问)

2.需要相关文件和权限 
微信支付需申请开通 
微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/home/index.html 
微信支付开发者文档:https://pay.weixin.qq.com/wiki/doc/api/index.html 
微信支付SDK下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

3.开发 
下载好微信支付PHP版本的SDK,文件目录为下图: 
这里写图片描述

这里写图片描述 
把微信支付SDK的Cert和Lib目录放入Thinkphp,目录为 
这里写图片描述 
现在介绍微信支付授权目录问题,首先是微信支付开发配置里面的支付授权目录填写, 
这里写图片描述

然后填写JS接口安全域。 
这里写图片描述

最后设置网页授权 
这里写图片描述

这里写图片描述

这些设置完,基本完成一半,注意设置的目录和我thinkphp里面的目录。 
这里写图片描述

4.微信支付配置

这里写图片描述

把相关配置填写正确。

<code class="hljs java has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
*   配置账号信息
*/</span>

class WxPayConfig
{
    <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;">//</span>
    <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     * TODO: 修改这里配置为您自己申请的商户信息
     * 微信公众号信息配置
     * 
     * APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
     * 
     * MCHID:商户号(必须配置,开户邮件中可查看)
     * 
     * KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
     * 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
     * 
     * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
     * 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @var</span> string
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> APPID = <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;">const</span> MCHID = <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;">const</span> KEY = <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;">const</span> APPSECRET = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//=======【证书路径设置】=====================================</span>
    <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     * TODO:设置商户证书路径
     * 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要,可登录商户平台下载,
     * API证书下载地址:https://pay.weixin.qq.com/index.php/account/api_cert,下载之前需要安装商户操作证书)
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @var</span> path
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> SSLCERT_PATH = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'../cert/apiclient_cert.pem'</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> SSLKEY_PATH = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'../cert/apiclient_key.pem'</span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//=======【curl代理设置】===================================</span>
    <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     * TODO:这里设置代理机器,只有需要代理的时候才设置,不需要代理,请设置为0.0.0.0和0
     * 本例程通过curl使用HTTP POST方法,此处可修改代理服务器,
     * 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @var</span> unknown_type
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> CURL_PROXY_HOST = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"0.0.0.0"</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//"10.152.18.220";</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> CURL_PROXY_PORT = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//8080;</span>

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//=======【上报信息配置】===================================</span>
    <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     * TODO:接口调用上报等级,默认紧错误上报(注意:上报超时间为【1s】,上报无论成败【永不抛出异常】,
     * 不会影响接口调用流程),开启上报之后,方便微信监控请求调用的质量,建议至少
     * 开启错误上报。
     * 上报等级,0.关闭上报; 1.仅错误出错上报; 2.全量上报
     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @var</span> int
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> REPORT_LEVENL = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</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: 1px solid 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></ul>

现在开始贴出代码:

<code class="hljs php has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span> <span class="hljs-title" style="box-sizing: border-box;">Wechat</span>\<span class="hljs-title" style="box-sizing: border-box;">Controller</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">use</span> <span class="hljs-title" style="box-sizing: border-box;">Think</span>\<span class="hljs-title" style="box-sizing: border-box;">Controller</span>;
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 * 父类控制器,需要继承
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @file</span> ParentController.class.php
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @author</span> Gary <lizhiyong2204@sina.com>
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @date</span> 2015年8月4日
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @todu</span>
 */</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);">ParentController</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Controller</span> {</span> 
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">protected</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$options</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;">'token'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 填写你设定的key</span>
            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'encodingaeskey'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 填写加密用的EncodingAESKey</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;">''</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 填写高级调用功能的app id</span>
            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'appsecret'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 填写高级调用功能的密钥</span>
            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'debug'</span> => <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>,
            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'logcallback'</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;">public</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$errCode</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">40001</span>;   
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$errMsg</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"no access"</span>;  

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     * 获取access_token
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> mixed|boolean|unknown
     */</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;">getToken</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>{</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$cache_token</span> = S(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'exp_wechat_pay_token'</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;">empty</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$cache_token</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;">$cache_token</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.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s'</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span> = sprintf(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->options[<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>->options[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'appsecret'</span>]);      
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->http_get(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span> = json_decode(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</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;">empty</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</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>;
        }   
        S(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'exp_wechat_pay_token'</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'access_token'</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;">'type'</span>=><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'file'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'expire'</span>=><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3600</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-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'access_token'</span>];
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     * 发送客服消息
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> array $data 消息结构{"touser":"OPENID","msgtype":"news","news":{...}}
     */</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;">sendCustomMessage</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$data</span>)</span>{</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$token</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->getToken();
        <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;">empty</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$token</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-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.weixin.qq.com/cgi-bin/message/custom/send?access_token=%s'</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span> = sprintf(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$token</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->http_post(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span>,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>::json_encode(<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;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>)
        {
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$json</span> = json_decode(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</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;">$json</span> || !<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">empty</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$json</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'errcode'</span>])) {
                <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->errCode = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$json</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'errcode'</span>];
                <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->errMsg = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$json</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'errmsg'</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-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;">$json</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;">/**
     * 发送模板消息
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> unknown $data
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> boolean|unknown
     */</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;">sendTemplateMessage</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$data</span>)</span>{</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$token</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->getToken();
        <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;">empty</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$token</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-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.weixin.qq.com/cgi-bin/message/template/send?access_token=%s"</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span> = sprintf(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$token</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->http_post(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$url</span>,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>::json_encode(<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;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>)
        {
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$json</span> = json_decode(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</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;">$json</span> || !<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">empty</span>(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$json</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'errcode'</span>])) {
                <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->errCode = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$json</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'errcode'</span>];
                <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->errMsg = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$json</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'errmsg'</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-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;">$json</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-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;">getFileCache</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$name</span>)</span>{</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> S(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$name</span>);
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     * 微信api不支持中文转义的json结构
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> array $arr
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</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;">json_encode</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;">$parts</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;">$is_list</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;">//Find out if the given array is a numerical array</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$keys</span> = array_keys ( <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$arr</span> );
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$max_length</span> = count ( <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$arr</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;">if</span> ((<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$keys</span> [<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</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;">$keys</span> [<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$max_length</span>] === <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$max_length</span> )) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//See if the first key is 0 and last key is length - 1</span>
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$is_list</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</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> < count ( <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$keys</span> ); <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span> ++) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//See if each key correspondes to its position</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;">$i</span> != <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$keys</span> [<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$i</span>]) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//A key fails at position check.</span>
                    <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$is_list</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;">//It is an associative array.</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;">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;">$value</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;">$value</span> )) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Custom handling for arrays</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;">$is_list</span>)
                    <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$parts</span> [] = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">self</span>::json_encode ( <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$value</span> ); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/* :RECURSION: */</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;">$parts</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;">self</span>::json_encode ( <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$value</span> ); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/* :RECURSION: */</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;">$str</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;">if</span> (! <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$is_list</span>)
                    <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$str</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-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Custom handling for multiple data types</span>
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (!is_string ( <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$value</span> ) && is_numeric ( <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$value</span> ) && <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$value</span><<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2000000000</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;">$value</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Numbers</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;">$value</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;">$str</span> .= <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'false'</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//The booleans</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;">$value</span> === <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>)
                <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$str</span> .= <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'true'</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;">$str</span> .= <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'"'</span> . addslashes ( <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$value</span> ) . <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'"'</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//All other things</span>
                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// :TODO: Is there any more datatype we should be in the lookout for? (Object?)</span>
                <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$parts</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;">$json</span> = implode ( <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;">$parts</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;">$is_list</span>)
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</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;">$json</span> . <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">']'</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Return numerical JSON</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</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;">$json</span> . <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'}'</span>; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//Return associative JSON</span>
    }

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     +----------------------------------------------------------
     * 生成随机字符串
     +----------------------------------------------------------
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> int       $length  要生成的随机字符串长度
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> string    $type    随机码类型:0,数字+大小写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符
     +----------------------------------------------------------
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> string
     +----------------------------------------------------------
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</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;">randCode</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 class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>, <span class="hljs-variable" style="box-sizing: border-box;">$type</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)</span>{</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;">array</span>(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"0123456789"</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"abcdefghijklmnopqrstuvwxyz"</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</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;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$type</span> == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>) {
            array_pop(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$arr</span>);
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$string</span> = implode(<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;">$arr</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;">$type</span> == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"-1"</span>) {
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$string</span> = implode(<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;">$arr</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;">$string</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$arr</span>[<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$type</span>];
        }
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$count</span> = strlen(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$string</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;">$code</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;">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;">$code</span> .= <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$string</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;">$count</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;">$code</span>;
    }   


    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
     * GET 请求
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> string $url
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</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;">http_get</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$url</span>)</span>{</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</span> = curl_init();
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(stripos(<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://"</span>)!==<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;">$oCurl</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;">$oCurl</span>, CURLOPT_SSL_VERIFYHOST, <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;">$oCurl</span>, CURLOPT_SSLVERSION, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//CURL_SSLVERSION_TLSv1</span>
        }
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</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;">$oCurl</span>, CURLOPT_RETURNTRANSFER, <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;">$sContent</span> = curl_exec(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$aStatus</span> = curl_getinfo(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</span>);
        curl_close(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</span>);
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(intval(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$aStatus</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http_code"</span>])==<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</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;">$sContent</span>;
        }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</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;">/**
     * POST 请求
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> string $url
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> array $param
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> boolean $post_file 是否文件上传
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> string content
     */</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</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;">http_post</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$url</span>,<span class="hljs-variable" style="box-sizing: border-box;">$param</span>,<span class="hljs-variable" style="box-sizing: border-box;">$post_file</span>=false)</span>{</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</span> = curl_init();
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(stripos(<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://"</span>)!==<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;">$oCurl</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;">$oCurl</span>, CURLOPT_SSL_VERIFYHOST, <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;">$oCurl</span>, CURLOPT_SSLVERSION, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//CURL_SSLVERSION_TLSv1</span>
        }
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (is_string(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$param</span>) || <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$post_file</span>) {
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$strPOST</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$param</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;">$aPOST</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;">$param</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-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$aPOST</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>.urlencode(<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;">$strPOST</span> =  join(<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;">$aPOST</span>);
        }
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</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;">$oCurl</span>, CURLOPT_RETURNTRANSFER, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> );
        curl_setopt(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</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;">$oCurl</span>, CURLOPT_POSTFIELDS,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$strPOST</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$sContent</span> = curl_exec(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$aStatus</span> = curl_getinfo(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</span>);
        curl_close(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$oCurl</span>);
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(intval(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$aStatus</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"http_code"</span>])==<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</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;">$sContent</span>;
        }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</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>;
        }
    }
}</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: 1px solid 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></ul>

<code class="hljs php has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">namespace</span> <span class="hljs-title" style="box-sizing: border-box;">Wechat</span>\<span class="hljs-title" style="box-sizing: border-box;">Controller</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">use</span> <span class="hljs-title" style="box-sizing: border-box;">Wechat</span>\<span class="hljs-title" style="box-sizing: border-box;">Controller</span>\<span class="hljs-title" style="box-sizing: border-box;">ParentController</span>;
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 * 微信支付测试控制器
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @file</span> TestController.class.php
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @author</span> Gary <lizhiyong2204@sina.com>
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @date</span> 2015年8月4日
 *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @todu</span>
 */</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);">TestController</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ParentController</span> {</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$_order_body</span>       = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'xxx'</span>;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$_order_goods_tag</span>  = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'xxx'</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-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">parent</span>::__construct();
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">require_once</span> ROOT_PATH.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Api/lib/WxPay.Api.php"</span>;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">require_once</span> ROOT_PATH.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Api/lib/WxPay.JsApiPay.php"</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;">index</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;">//①、获取用户openid</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$tools</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> \JsApiPay();
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$openId</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$tools</span>->GetOpenid();        
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//②、统一下单</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> \WxPayUnifiedOrder();     
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//商品描述</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetBody(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->_order_body);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//附加数据,可以添加自己需要的数据,微信回异步回调时会附加这个数据</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetAttach(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'xxx'</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//商户订单号</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$out_trade_no</span> = \WxPayConfig::MCHID.date(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"YmdHis"</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetOut_trade_no(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$out_trade_no</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//总金额,订单总金额,只能为整数,单位为分      </span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetTotal_fee(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//交易起始时间</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetTime_start(date(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"YmdHis"</span>));
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//交易结束时间</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetTime_expire(date(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"YmdHis"</span>, time() + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">600</span>));
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//商品标记</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetGoods_tag(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->_order_goods_tag);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//通知地址,接收微信支付异步通知回调地址 SITE_URL=http://test.paywechat.com/Charge</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$notify_url</span> = SITE_URL.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'/index.php/Test/notify.html'</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetNotify_url(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$notify_url</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//交易类型</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetTrade_type(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"JSAPI"</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetOpenid(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$openId</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$order</span> = \WxPayApi::unifiedOrder(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$jsApiParameters</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$tools</span>->GetJsApiParameters(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$order</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//获取共享收货地址js函数参数</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$editAddress</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$tools</span>->GetEditAddressParameters();

        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->assign(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'openId'</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$openId</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->assign(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'jsApiParameters'</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$jsApiParameters</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->assign(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'editAddress'</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$editAddress</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->display();      
    }

    <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;">notify</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;">require_once</span> ROOT_PATH.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Api/lib/notify.php"</span>;
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$notify</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> \PayNotifyCallBack();
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$notify</span>->Handle(<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;">//这里的IsSuccess是我自定义的一个方法,后面我会贴出这个文件的代码,供参考。</span>
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//不建议这么写,尽量使用官方的重写NotifyProcess方法,并把事务逻辑写在里面。</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$is_success</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$notify</span>->IsSuccess();  
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$bdata</span> 		= <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$is_success</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'data'</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;">$is_success</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'code'</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;">$news</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;">'touser'</span> => <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$bdata</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'openid'</span>],
                    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'msgtype'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'news'</span>,
                    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'news'</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;">'articles'</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;">array</span>(
                                            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'title'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'订单支付成功'</span>,
                                            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'description'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"支付金额:{$bdata['total_fee']}\n"</span>.
                                            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"微信订单号:{$bdata['transaction_id']}\n"</span>
                                            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'picurl'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</span>,
                                            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'url'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</span>         
                                    )

                            )
                    )
            );
            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//发送微信支付通知</span>
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->sendCustomMessage(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$news</span>);            
        }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</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;">/**
     * 支付成功页面
     * 不可靠的回调
     * 可以在这里显示一下支付成功跳转,不建议在这里直接写后台支付成功逻辑。
     */</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;">ajax_PaySuccess</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-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$out_trade_no</span> = I(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'post.out_trade_no'</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//支付金额</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$total_fee</span>    = I(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'post.total_fee'</span>);
        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*相关逻辑处理*/</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: 1px solid 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></ul>

贴上模板HTML

<code class="hljs xml has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">html</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">head</span>></span>
    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">meta</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">http-equiv</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"content-type"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">content</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"text/html;charset=utf-8"</span>/></span>
    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">meta</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"viewport"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">content</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"width=device-width, initial-scale=1"</span>/></span> 
    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">title</span>></span>微信支付样例-支付<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">title</span>></span>
    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">script</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">type</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"text/javascript"</span>></span><span class="javascript" style="box-sizing: border-box;">
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//调用微信JS api 支付</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;">jsApiCall</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>
    {</span>
        WeixinJSBridge.invoke(
            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'getBrandWCPayRequest'</span>,
            {$jsApiParameters},
            <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-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(res)</span>{</span>
                WeixinJSBridge.log(res.err_msg);
                <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>(res.err_msg == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'get_brand_wcpay_request:cancel'</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;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(res.err_msg == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"get_brand_wcpay_request:ok"</span>){
                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*使用以上方式判断前端返回,微信团队郑重提示:
                res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。
                这里可以使用Ajax提交到后台,处理一些日志,如Test控制器里面的ajax_PaySuccess方法。
                */</span>
                }
                alert(res.err_code+res.err_desc+res.err_msg);
            }
        );
    }

    <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;">callpay</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-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">typeof</span> WeixinJSBridge == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"undefined"</span>){
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>( document.addEventListener ){
                document.addEventListener(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'WeixinJSBridgeReady'</span>, jsApiCall, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>);
            }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (document.attachEvent){
                document.attachEvent(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'WeixinJSBridgeReady'</span>, jsApiCall); 
                document.attachEvent(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'onWeixinJSBridgeReady'</span>, jsApiCall);
            }
        }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{
            jsApiCall();
        }
    }
    <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;">editAddress</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span>
    {</span>
        WeixinJSBridge.invoke(
            <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'editAddress'</span>,
            {$editAddress},
            <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-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(res)</span>{</span>
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> value1 = res.proviceFirstStageName;
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> value2 = res.addressCitySecondStageName;
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> value3 = res.addressCountiesThirdStageName;
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> value4 = res.addressDetailInfo;
                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span> tel = res.telNumber;                
                alert(value1 + value2 + value3 + value4 + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">":"</span> + tel);
            }
        );
    }

    window.onload = <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-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-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">typeof</span> WeixinJSBridge == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"undefined"</span>){
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>( document.addEventListener ){
                document.addEventListener(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'WeixinJSBridgeReady'</span>, editAddress, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>);
            }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (document.attachEvent){
                document.attachEvent(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'WeixinJSBridgeReady'</span>, editAddress); 
                document.attachEvent(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'onWeixinJSBridgeReady'</span>, editAddress);
            }
        }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{
            editAddress();
        }
    };

    </span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">script</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">head</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">body</span>></span>
    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">br</span>/></span>
    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">font</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">color</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"#9ACD32"</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">b</span>></span>该笔订单支付金额为<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">span</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">style</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"color:#f00;font-size:50px"</span>></span>1分<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">span</span>></span>钱<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">b</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">font</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">br</span>/></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">br</span>/></span>
    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">div</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">align</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"center"</span>></span>
        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">button</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">style</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer;  color:white;  font-size:16px;"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">type</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"button"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">onclick</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"callpay()"</span> ></span>立即支付<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">button</span>></span>
    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">div</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">body</span>></span>
<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">html</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: 1px solid 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></ul>

notify.php文件代码,这里有在官方文件里新添加的一个自定义方法。

<code class="hljs php has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">require_once</span> ROOT_PATH.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Api/lib/WxPay.Api.php"</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">require_once</span> ROOT_PATH.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Api/lib/WxPay.Notify.php'</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">require_once</span> ROOT_PATH.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Api/lib/log.php'</span>;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//初始化日志</span>
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$logHandler</span>= <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> \CLogFileHandler(ROOT_PATH.<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/logs/"</span>.date(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Y-m-d'</span>).<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'.log'</span>);
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$log</span> = \Log::Init(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$logHandler</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</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);">PayNotifyCallBack</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">WxPayNotify</span>
{</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">protected</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$para</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;">'code'</span>=><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'data'</span>=><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</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;">Queryorder</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$transaction_id</span>)</span>
    {</span>
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> \WxPayOrderQuery();
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>->SetTransaction_id(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$transaction_id</span>);
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span> = \WxPayApi::orderQuery(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$input</span>);
        \Log::DEBUG(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"query:"</span> . json_encode(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>));
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(array_key_exists(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"return_code"</span>, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>)
            && array_key_exists(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"result_code"</span>, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>)
            && <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"return_code"</span>] == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"SUCCESS"</span>
            && <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$result</span>[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"result_code"</span>] == <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"SUCCESS"</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;">true</span>;
        }
        <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->para[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'code'</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;">$this</span>->para[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'data'</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;">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;">//重写回调处理函数</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;">NotifyProcess</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">$data</span>, &<span class="hljs-variable" style="box-sizing: border-box;">$msg</span>)</span>
    {</span>
        \Log::DEBUG(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"call back:"</span> . json_encode(<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;">$notfiyOutput</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;">if</span>(!array_key_exists(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"transaction_id"</span>, <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;">$msg</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;">$this</span>->para[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'code'</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;">$this</span>->para[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'data'</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;">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;">//查询订单,判断订单真实性</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;">$this</span>->Queryorder(<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;">"transaction_id"</span>])){
            <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$msg</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;">$this</span>->para[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'code'</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;">$this</span>->para[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'data'</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;">return</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;">$this</span>->para[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'code'</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;">$this</span>->para[<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'data'</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;">return</span> <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;">/**
     * 自定义方法 检测微信端是否回调成功方法
     * 不建议这么写,尽量使用官方的重写NotifyProcess方法,并把事务逻辑写在里面。
     *<span class="hljs-phpdoc" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> multitype:number string
     */</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;">IsSuccess</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;">return</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$this</span>->para;
    }
}</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: 1px solid 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></ul>

到这里基本上完成,可以在微信端打开http://test.paywechat.com/Charge/index.php/Test/index/ 
我的环境,HTTP服务器没有重写url,微信支付继续探索中,有些地方可能写的有问题或不足,望大家谅解,互相学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值