php支付宝异步返回的问题

k1999hj 发布于 2016/01/01 15:37
阅读 1K+
收藏 0

【领华为电脑包】容器化时代到来!跳转机分配问题终于“有救”了!>>>

这是我的异步函数(修改了一下支付宝demo出来的)

public function notify_url(){
        require_once("alipay.config.php");
        require_once("lib/alipay_notify.class.php");


        //计算得出通知验证结果
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();


        if($verify_result) {//验证成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //请在这里加上商户的业务逻辑程序代
            $file  = '../klog.txt';
            $content=date("Y-m-d H:i:s")."成功:0\n".print_r($_POST,true);
            file_put_contents($file, $content,FILE_APPEND);
            
            //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
            //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
            
            //解析notify_data
            //注意:该功能PHP5环境及以上支持,需开通curl、SSL等PHP配置环境。建议本地调试时使用PHP开发软件
            $doc = new DOMDocument();   
            if ($alipay_config['sign_type'] == 'MD5') {
                $doc->loadXML($_POST['notify_data']);
            }
            
            /*if ($alipay_config['sign_type'] == '0001') {
                $doc->loadXML($alipayNotify->decrypt($_POST['notify_data']));
            }*/


            $trade_status = $_POST['trade_status'];
            if($trade_status == 'TRADE_FINISHED') {
                //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //如果有做过处理,不执行商户的业务程序
                $file  = '../klog.txt';
                $content=date("Y-m-d H:i:s")."成功:1\n";
                file_put_contents($file, $content,FILE_APPEND);
                    
                //注意:
                //该种交易状态只在两种情况下出现
                //1、开通了普通即时到账,买家付款成功后。
                //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。
        
                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
                
                echo "success";     //请不要修改或删除
            }
            else if ($trade_status == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //如果有做过处理,不执行商户的业务程序
                $file  = '../klog.txt';
                $content=date("Y-m-d H:i:s")."成功:2\n";
                file_put_contents($file, $content,FILE_APPEND);
                //注意:
                //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。
        
                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
                
                echo "success";     //请不要修改或删除
            }


            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
            
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            $file  = '../alog.txt';
            $content=date("Y-m-d H:i:s")."失败:0\n";
            file_put_contents($file, $content,FILE_APPEND);
            echo "fail";


            //调试用,写文本函数记录程序运行情况是否正常
            logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
        }
    }
文件里面明明已经出现了成功2,可是依然会继续调用异步返回,那是怎么回事呢?

加载中
0
bigTreee
bigTreee

就因为是异步的,才出的问题

你这里收到支付宝支付成功的消息了,但是不立即响应(独占式)结果,反而使用异步。说通俗点,支付宝信使来了,告诉服务器“用户支付完成了,咱们核对下?”

你说,“你先回去,我看下回头打电话联系你”

这样的话,支付宝当然当作你这里没有处理完成,再发一次。

建议单独做个页面,专门显示成功和失败,不做复杂业务逻辑。

k
k1999hj
问题是我这里应该输出了"success"这几个字符的
返回顶部
顶部