• 微信支付开发(4) 交易通知


    http://www.cnblogs.com/txw1958/p/weixin-pay-trade-notice.html

    本文介绍如何使用JS API支付时如何获得交易通知。

    一、交易通知

    用户在成功完成支付后,微信后台通知(POST)商户服务器(notify_url)支付结果。商户可以使用notify_url的通知结果进行个性化页面的展示。

    对后台通知交互时,如果微信收到商户的应答不是success或超时,微信不为通知失败,微信会通过一定的策略(如30分钟共8次)定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。

    后台通知通过请求中的 notify_url 迚行,采用 POST 机制。

    同时,在postData中还将包含xml数据。

    二、交易结果获取与响应

    根据官方文档,创建notice.php用于通知结果。

    程序内容如下所示:

    <?php
    foreach ($_GET as $key=>$value)  
    {
        logger("Key: $key; Value: $value");
    }
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    logger($postStr);
    
    if (isset($_GET)){
        echo "success";
    }
    
    //日志记录
    function logger($log_content)
    {
        $max_size = 100000;
        $log_filename = "log.xml";
        if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
        file_put_contents($log_filename, date('H:i:s')." ".$log_content."
    ", FILE_APPEND);
    }
    ?>
    

    上述程序的作用是

    1. 获取post到url的通知,他们以GET变量形式
    2. 获取post的XML数据包
    3. 返回成功消息 success

    将notice.php的完整路径放入JS API支付的notice url中。

    $wxPayHelper->setParameter("notify_url", "http://www.doucube.com/wxpay/notice.php");

    这样当交易完成后,该url将收到通知,并记录在日志文件中,我们的测试如下所示:

    获得的GET变量及XML如下所示:

    Key: bank_billno; Value: 201405273540085997
    Key: bank_type; Value: 2011
    Key: discount; Value: 0
    Key: fee_type; Value: 1
    Key: input_charset; Value: GBK
    Key: notify_id; Value: Gx8ov6tT6_yaARrtKG6RFZ4KiVtKqVnJzvulFlteJ3dhBg38iRtKs0pTXXfgh8WnH15mIhG6j65ggbzzYguh1mutG3B5oHsK
    Key: out_trade_no; Value: JfuKdiBig4zZnE4n
    Key: partner; Value: 1234567890
    Key: product_fee; Value: 1
    Key: sign; Value: 08876C4A9F7A36A9EA972C211C122362
    Key: sign_type; Value: MD5
    Key: time_end; Value: 20140527194139
    Key: total_fee; Value: 1
    Key: trade_mode; Value: 1
    Key: trade_state; Value: 0
    Key: transaction_id; Value: 1218614901201405273313473135
    Key: transport_fee; Value: 0

    <xml><OpenId><![CDATA[o0pk9uIVnlY-fJkzFKEbQ6LJ4cFc]]></OpenId>
    <AppId><![CDATA[wx0000000000000000]]></AppId>
    <IsSubscribe>1</IsSubscribe>
    <TimeStamp>1401190899</TimeStamp>
    <NonceStr><![CDATA[iOb2flJ0ILFAmBqJ]]></NonceStr>
    <AppSignature><![CDATA[66678894aae680ba140e18e66d1295dfadabd9ab]]></AppSignature>
    <SignMethod><![CDATA[sha1]]></SignMethod>
    </xml>

    而在微信窗口中将收到OK的弹出窗

    交易通知成功搞定!

  • 相关阅读:
    Ubuntu把在任事器范围起更次要的脚色
    linux下firefox 3.0 flash失效的治理法子
    Fedora的一些根蒂设置装备摆设(三、有关Firefox的放慢设置装备摆设)
    Linux操纵零碎下即时通讯软件
    QGtkStyle 让 KDE 法式拥有 Gnome 外不雅
    Ubuntu 8.04 告白登岸德国柏林的地铁零碎
    关于linux的一些重要日记文件
    linux下挂载U盘进程
    对Fedora9的一些心得领会(另附一些末尾设置装备安插)
    使用distinct在mysql中查询多条不重复记载值的处理责罚步调
  • 原文地址:https://www.cnblogs.com/doseoer/p/5329333.html
Copyright © 2020-2023  润新知