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


    由于微信支付接口更新,本文档已过期,请查看新版微信支付教程。地址 http://www.cnblogs.com/txw1958/category/624506.html

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

    一、交易通知

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

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

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

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

    二、交易结果获取与响应

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

    程序内容如下所示:

     1 <?php
     2 //方倍工作室
     3 
     4 foreach ($_GET as $key=>$value)  
     5 {
     6     logger("Key: $key; Value: $value");
     7 }
     8 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
     9 logger($postStr);
    10 
    11 if (isset($_GET)){
    12     echo "success";
    13 }
    14 
    15 //日志记录
    16 function logger($log_content)
    17 {
    18     $max_size = 100000;
    19     $log_filename = "log.xml";
    20     if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
    21     file_put_contents($log_filename, date('H:i:s')." ".$log_content."
    ", FILE_APPEND);
    22 }
    23 ?>

    上述程序的作用是

    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的弹出窗

    交易通知成功搞定!

  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/txw1958/p/weixin-pay-trade-notice.html
Copyright © 2020-2023  润新知