接入支付宝

生成订单

protected function balance_pay($order_info)
    {
        //生成支付宝订单
        require_once(MIO_PATH."Lib/zfb/alipay.config.php");
        require_once(MIO_PATH."Lib/zfb/lib/alipay_submit.class.php");
        //充值
        /**************************请求参数**************************/

        //支付类型
        $payment_type = "1";
        //必填,不能修改
        //服务器异步通知页面路径
        $notify_url = "http://www.1v20.com/Callback/zhifubao_notify/";
        //需http://格式的完整路径,不能加?id=123这类自定义参数
        //页面跳转同步通知页面路径
        $return_url = "http://www.1v20.com/Callback/zhifubao_url/";
        //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/
        //卖家支付宝帐户
        $seller_email = '232835701@qq.com';
        //必填
        //商户订单号
        $out_trade_no = $order_info['hash_id'];
        //商户网站订单系统中唯一订单号,必填
        //订单名称
        $subject = '充值:'.$order_info['price'].'_'.$order_info['user_id'].'_'.date('Y-m-d H:i:s');
        //必填
        //付款金额
        $total_fee = $order_info['price'];
        //必填
        //订单描述
        $body = $order_info['hash_id'];
        //商品展示地址
        $show_url = 'http://www.1v20.com/';
        //需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html
        //防钓鱼时间戳
        $anti_phishing_key = "";
        //若要使用请调用类文件submit中的query_timestamp函数
        //客户端的IP地址
        $exter_invoke_ip = getIp();
        //非局域网的外网IP地址,如:221.0.0.1


        /************************************************************/

        //构造要请求的参数数组,无需改动
        $parameter = array(
                "service" => "create_direct_pay_by_user",
                "partner" => trim($alipay_config['partner']),
                "payment_type"	=> $payment_type,
                "notify_url"	=> $notify_url,
                "return_url"	=> $return_url,
                "seller_email"	=> $seller_email,
                "out_trade_no"	=> $out_trade_no,
                "subject"	=> $subject,
                "total_fee"	=> $total_fee,
                "body"	=> $body,
                "show_url"	=> $show_url,
                "anti_phishing_key"	=> $anti_phishing_key,
                "exter_invoke_ip"	=> $exter_invoke_ip,
                "_input_charset"	=> trim(strtolower($alipay_config['input_charset']))
        );

        //建立请求
        $alipaySubmit = new AlipaySubmit($alipay_config);
        $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
        echo $html_text;
        exit();
    }

 

回调

    //支付宝异步回调
    public function zhifubao_notify()
    {
        require_once(MIO_PATH."Lib/zfb/alipay.config.php");
        require_once(MIO_PATH."Lib/zfb/lib/alipay_notify.class.php");
        //计算得出通知验证结果
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();

        if($verify_result) {

            //商户订单号
            $out_trade_no = $_POST['out_trade_no'];

            //支付宝交易号
            $trade_no = $_POST['trade_no'];

            //交易状态
            $trade_status = $_POST['trade_status'];
            //将该笔订单设置为成功
            $check = _mysql()->ONE("SELECT * FROM ask_paylog WHERE hash_id='{$out_trade_no}' AND static='0'");
            if(empty($check)) die('success');
            $order_id = $check['order_id'];
            $id = $check['id'];

            if($check['type'] == 'balance'){
                $result = _mod('MioBalance')->suc($order_id);
            } else {
                $result = _mod('MioOrderPay')->order_pay_suc($order_id);
            }

            if($result){
                _mysql()->UU(array('static'=>'2'),'~!paylog',"id='{$id}'");
                die('success');
            } else {
                exit();
            }


            if($_POST['trade_status'] == 'TRADE_FINISHED') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //如果有做过处理,不执行商户的业务程序

                //注意:
                //该种交易状态只在两种情况下出现
                //1、开通了普通即时到账,买家付款成功后。
                //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。

                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            }
            else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //如果有做过处理,不执行商户的业务程序

                //注意:
                //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。

                //调试用,写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
            }

            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

            echo "success";		//请不要修改或删除

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            echo "fail";

            //调试用,写文本函数记录程序运行情况是否正常
            //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
        }
    }

    //支付宝URL回调
    public function zhifubao_url()
    {
        require_once(MIO_PATH."Lib/zfb/alipay.config.php");
        require_once(MIO_PATH."Lib/zfb/lib/alipay_notify.class.php");
        //计算得出通知验证结果
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyReturn();
        if($verify_result) {//验证成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //请在这里加上商户的业务逻辑程序代码

            //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
            //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

            //商户订单号
            $out_trade_no = $_GET['out_trade_no'];

            //支付宝交易号
            $trade_no = $_GET['trade_no'];

            //交易状态
            $trade_status = $_GET['trade_status'];

            //将该笔订单设置为成功
            $check = _mysql()->ONE("SELECT * FROM ~!paylog WHERE hash_id='{$out_trade_no}' AND static='0'");
            if(empty($check)) {
                $check_suc = _mysql()->ONE("SELECT * FROM ~!paylog WHERE hash_id='{$out_trade_no}' AND static='2'");
                if($check_suc){
                    _newPage('支付成功');
                    _display('public/suc.php');
                    exit();
                } else {
                    _newPage('支付失败');
                    _assign('title','订单不存在');
                    _assign('info','收到支付宝付款但找不到您的订单');
                    _display('public/err.php');
                }
            }
            $order_id = $check['order_id'];
            $id = $check['id'];

            if($check['type'] == 'balance'){
                $result = _mod('MioBalance')->suc($order_id);
            } else {
                $result = _mod('MioOrderPay')->order_pay_suc($order_id);
            }

            if($result){
                _mysql()->UU(array('static'=>'2'),'~!paylog',"id='{$id}'");
            }
            //支付成功
            _newPage('支付成功');
            _display('public/suc.php');
            exit();
            if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                //如果有做过处理,不执行商户的业务程序
            }
            else {
                echo "trade_status=".$_GET['trade_status'];
            }

            echo "验证成功<br />";

            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            //如要调试,请看alipay_notify.php页面的verifyReturn函数
            _newPage('支付宝支付失败');
            _assign('title','请重试');
            _assign('info','支付宝提示密钥不正确');
            _display('public/err.php');
        }
    }