生成订单
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'); } }