概述了解php实现的支付宝网页支付功能【基于TP5框架】
本文实例讲述了PHP实现的支付宝网页支付功能。分享给大家供大家参考,具体如下:
1.提交支付请求
require_once './payment/zfb/pagepay/service/AlipayTradeService.PHP';require_once './payment/zfb/pagepay/buildermodel/AlipayTradePagePayContentBuilder.PHP';$payInfo=Db::name('pay_type')->where(['pay_ID'=>1])->find();$zfb=Json_decode($payInfo['pay_Json'],true);$config=[ 'app_ID'=>$zfb['app_ID'], 'merchant_private_key'=>$zfb['merchant_private_key'], 'notify_url'=>config('z_notify_url'), 'return_url'=>config('z_return_url'), 'charset'=>config('charset'), 'sign_type'=>config('sign_type'), 'gatewayUrl'=>config('gatewayUrl'), 'alipay_public_key'=>$zfb['alipay_public_key']];//商品订单号$out_Trade_no=$orderData['order_number'];//订单名称,必填$subject='充值订单';//付款金额$total_amount=$money;//商品描述$body = $out_Trade_no . '-' . $this->agent_ID.'-'.$money;$payRequestBuilder = new \\AlipayTradePagePayContentBuilder();$payRequestBuilder->setbody($body);$payRequestBuilder->setSubject($subject);$payRequestBuilder->setTotalAmount($total_amount);$payRequestBuilder->setoutTradeNo($out_Trade_no);$aop = new \\AlipayTradeService($config);$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);echo $response;
2.异步回调支付宝参数认证
$pay=Db::name('pay_type')->where(['pay_ID'=>1])->find(); $zfb=Json_decode($pay['pay_Json'],true); $config = [ 'app_ID' => $zfb['app_ID'], 'merchant_private_key' => $zfb['merchant_private_key'], 'notify_url' => config('z_notify_url'), 'return_url' => config('z_return_url'), 'charset' => config('charset'), 'sign_type' => config('sign_type'), 'gatewayUrl' => config('gatewayUrl'), 'alipay_public_key' => $zfb['alipay_public_key'] ]; $arr=$_POST; $alipaySevice = new \\AlipayTradeService($config); $alipaySevice->writeLog(var_export($_POST,true)); $result = $alipaySevice->check($arr); /* 实际验证过程建议商户添加以下校验。 1、商户需要验证该通知数据中的out_Trade_no是否为商户系统中创建的订单号, 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), 3、校验通知中的seller_ID(或者seller_email) 是否为out_Trade_no这笔单据的对应的 *** 作方 (有的时候,一个商户可能有多个seller_ID/seller_email) 4、验证app_ID是否为该商户本身。 */ if($result) {//验证成功 //////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //商户订单号 $out_Trade_no = $_POST['out_Trade_no']; //支付宝交易号 $Trade_no = $_POST['Trade_no']; //交易状态 $Trade_status = $_POST['Trade_status']; //交易金额 $total_amount = $_POST['total_amount']; if($_POST['Trade_status'] == 'TradE_FINISHED') { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_Trade_no)在商户网站的订单系统中查到该笔订单的详细, 并执行商户的业务程序 //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 //如果有做过处理,不执行商户的业务程序 //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 } else if ($_POST['Trade_status'] == 'TradE_SUCCESS') { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_Trade_no)在商户网站的订单系统中查到该笔订单的详细, 并执行商户的业务程序 //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 //如果有做过处理,不执行商户的业务程序 //注意: //付款完成后,支付宝系统发送该交易状态通知 //此处应该更新一下订单状态,商户自行增删 *** 作 这里写你的逻辑程序 } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— echo 'success'; }else { //验证失败 echo "fail"; }}
3.同步回调页面跳转处理 同步只是做一个跳转处理 不要写任何数据处理
$pay=Db::name('pay_type')->where(['pay_ID'=>1])->find();$zfb=Json_decode($pay['pay_Json'],true);$config = [ 'app_ID' => $zfb['app_ID'], 'merchant_private_key' => $zfb['merchant_private_key'], 'notify_url' => config('z_notify_url'), 'return_url' => config('z_return_url'), 'charset' => config('charset'), 'sign_type' => config('sign_type'), 'gatewayUrl' => config('gatewayUrl'), 'alipay_public_key' => $zfb['alipay_public_key']];$arr=$_GET;$alipaySevice = new \\AlipayTradeService($config);$result = $alipaySevice->check($arr);/* 实际验证过程建议商户添加以下校验。1、商户需要验证该通知数据中的out_Trade_no是否为商户系统中创建的订单号,2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),3、校验通知中的seller_ID(或者seller_email) 是否为out_Trade_no这笔单据的对应的 *** 作方(有的时候,一个商户可能有多个seller_ID/seller_email)4、验证app_ID是否为该商户本身。*/if($result) {//验证成功 /////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表 //商户订单号 $out_Trade_no = HTMLspecialchars($_GET['out_Trade_no']); //支付宝交易号 $Trade_no = HTMLspecialchars($_GET['Trade_no']); $this->success("支付成功",url('Index/index')); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////}else { //验证失败 echo "验证失败";}
相关学习推荐:PHP编程从入门到精通
总结
以上是内存溢出为你收集整理的了解php实现的支付宝网页支付功能【基于TP5框架】全部内容,希望文章能够帮你解决了解php实现的支付宝网页支付功能【基于TP5框架】所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
© 版权声明
THE END
请登录后查看评论内容