当前位置:编程学习 > > 正文

php支付系统(php实现的支付宝网页支付功能示例基于TP5框架)

时间:2021-11-01 10:19:41类别:编程学习

php支付系统

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

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

1.提交支付请求

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 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.异步回调支付宝参数认证

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • $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.同步回调页面跳转处理  同步只是做一个跳转处理 不要写任何数据处理

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • $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 "验证失败";
  • }
  • 希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    原文链接:https://blog.csdn.net/Drug_/article/details/83897368

    上一篇下一篇

    猜您喜欢

    热门推荐