站长资讯网
最全最丰富的资讯网站

了解php实现的支付宝网页支付功能【基于TP5框架】

了解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编程从入门到精通

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号