加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

认识php实现的支付宝网页支付功能

发布时间:2022-07-21 13:41:43 所属栏目:PHP教程 来源:互联网
导读:本文实例讲述了php实现的支付宝网页支付功能。分享给大家供大家参考,具体如下: 1.提交支付请求 require_once ./payment/zfb/pagepay/service/AlipayTradeService.php; require_once ./payment/zfb/pagepay/buildermodel/AlipayTradePagePayContentBuilder.

  本文实例讲述了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']
 
  
  $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);
 
  
      '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为一致的
 
        //如果有做过处理,不执行商户的业务程序
 
  
        //付款完成后,支付宝系统发送该交易状态通知
 
        //此处应该更新一下订单状态,商户自行增删操作
 
         这里写你的逻辑程序
 
      }
 
      //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
 
      echo 'success';
 
    }else {
 
      //验证失败
 
      echo "fail";
 
    }
 
  }
 
  3.同步回调页面跳转处理 同步只是做一个跳转处理 不要写任何数据处理
 
  
  $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)
  
    //支付宝交易号
 
    $trade_no = htmlspecialchars($_GET['trade_no']);
 
    $this->success("支付成功",url('Index/index'));
 
    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
 
    ///////////////////////////////////////////////////////////////////////////
 
  }
 
  else {
 
    //验证失败
 
    echo "验证失败";
 
  }

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读