当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-17 18:52:57 浏览: 评论:0 

本文实例讲述了php实现的支付宝网页支付功能,分享给大家供大家参考,具体如下:

1.提交支付请求

  1. require_once './payment/zfb/pagepay/service/AlipayTradeService.php'
  2. require_once './payment/zfb/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php'
  3. $payInfo=Db::name('pay_type')->where(['pay_id'=>1])->find(); 
  4. $zfb=json_decode($payInfo['pay_json'],true); 
  5. $config=[ 
  6.   'app_id'=>$zfb['app_id'], 
  7.   'merchant_private_key'=>$zfb['merchant_private_key'], 
  8.   'notify_url'=>config('z_notify_url'), 
  9.   'return_url'=>config('z_return_url'), 
  10.   'charset'=>config('charset'), 
  11.   'sign_type'=>config('sign_type'), 
  12.   'gatewayUrl'=>config('gatewayUrl'), 
  13.   'alipay_public_key'=>$zfb['alipay_public_key'
  14. ]; 
  15. //商品订单号 
  16. $out_trade_no=$orderData['order_number']; 
  17. //订单名称,必填 
  18. $subject='充值订单'
  19. //付款金额 
  20. $total_amount=$money
  21. //商品描述 
  22. $body = $out_trade_no . '-' . $this->agent_id.'-'.$money
  23. $payRequestBuilder = new \AlipayTradePagePayContentBuilder(); 
  24. $payRequestBuilder->setBody($body); 
  25. $payRequestBuilder->setSubject($subject); 
  26. $payRequestBuilder->setTotalAmount($total_amount); 
  27. $payRequestBuilder->setOutTradeNo($out_trade_no); 
  28. $aop = new \AlipayTradeService($config); 
  29. $response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']); 
  30. echo $response

2.异步回调支付宝参数认证

  1. $pay=Db::name('pay_type')->where(['pay_id'=>1])->find(); 
  2.   $zfb=json_decode($pay['pay_json'],true); 
  3.   $config = [ 
  4.     'app_id' => $zfb['app_id'], 
  5.     'merchant_private_key' => $zfb['merchant_private_key'], 
  6.     'notify_url' => config('z_notify_url'), 
  7.     'return_url' => config('z_return_url'), 
  8.     'charset' => config('charset'), 
  9.     'sign_type' => config('sign_type'), 
  10.     'gatewayUrl' => config('gatewayUrl'), 
  11.     'alipay_public_key' => $zfb['alipay_public_key'
  12.   ]; 
  13.   $arr=$_POST
  14.   $alipaySevice = new \AlipayTradeService($config); 
  15.   $alipaySevice->writeLog(var_export($_POST,true)); 
  16.   $result = $alipaySevice->check($arr); 
  17.   /* 实际验证过程建议商户添加以下校验。 
  18.   1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号, 
  19.   2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), 
  20.   3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email) 
  21.   4、验证app_id是否为该商户本身。 
  22.   */ 
  23.   if($result) {//验证成功 
  24.     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
  25.     //请在这里加上商户的业务逻辑程序代 
  26.     //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— 
  27.     //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 
  28.     //商户订单号 
  29.     $out_trade_no = $_POST['out_trade_no']; 
  30.     //支付宝交易号 
  31.     $trade_no = $_POST['trade_no']; 
  32.     //交易状态 
  33.     $trade_status = $_POST['trade_status']; 
  34.     //交易金额 
  35.     $total_amount = $_POST['total_amount']; 
  36.     if($_POST['trade_status'] == 'TRADE_FINISHED') { 
  37.       //判断该笔订单是否在商户网站中已经做过处理 
  38.       //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 
  39.       //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 
  40.       //如果有做过处理,不执行商户的业务程序 
  41.       //注意: 
  42.       //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 
  43.     } else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { 
  44.       //判断该笔订单是否在商户网站中已经做过处理 
  45.       //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 
  46.       //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 
  47.       //如果有做过处理,不执行商户的业务程序 
  48.       //注意: 
  49.       //付款完成后,支付宝系统发送该交易状态通知 
  50.       //此处应该更新一下订单状态,商户自行增删操作 
  51.        这里写你的逻辑程序 
  52.     } 
  53.     //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— 
  54.     echo 'success'
  55.   }else { 
  56.     //验证失败 
  57.     echo "fail"
  58.   } 

3.同步回调页面跳转处理  同步只是做一个跳转处理 不要写任何数据处理

  1. $pay=Db::name('pay_type')->where(['pay_id'=>1])->find(); 
  2. $zfb=json_decode($pay['pay_json'],true); 
  3. $config = [ 
  4.   'app_id' => $zfb['app_id'], 
  5.   'merchant_private_key' => $zfb['merchant_private_key'], 
  6.   'notify_url' => config('z_notify_url'), 
  7.   'return_url' => config('z_return_url'), 
  8.   'charset' => config('charset'), 
  9.   'sign_type' => config('sign_type'), 
  10.   'gatewayUrl' => config('gatewayUrl'), 
  11.   'alipay_public_key' => $zfb['alipay_public_key'
  12. ]; 
  13. $arr=$_GET
  14. $alipaySevice = new \AlipayTradeService($config); 
  15. $result = $alipaySevice->check($arr); 
  16. /* 实际验证过程建议商户添加以下校验。 
  17. 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号, 
  18. 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), 
  19. 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email) 
  20. 4、验证app_id是否为该商户本身。 
  21. */ 
  22. if($result) {//验证成功 
  23.   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
  24.   //请在这里加上商户的业务逻辑程序代码 
  25.   //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— 
  26.   //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表 
  27.   //商户订单号 
  28.   $out_trade_no = htmlspecialchars($_GET['out_trade_no']); 
  29.   //支付宝交易号 
  30.   $trade_no = htmlspecialchars($_GET['trade_no']); 
  31.   $this->success("支付成功",url('Index/index')); 
  32.   //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— 
  33.   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
  34. else { 
  35.   //验证失败 
  36.   echo "验证失败"
  37. }

Tags: php支付宝网页支付

分享到: