• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 "验证失败";
    }
    
    

    更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP支付宝当面付2.0代码
    • php实现单笔转账到支付宝功能
    • php app支付宝回调(异步通知)详解
    • php支付宝APP支付功能
    • PHP实现QQ、微信和支付宝三合一收款码实例代码
    • PHP实现支付宝即时到账功能
    • thinkPHP框架对接支付宝即时到账接口回调操作示例
    • PHP接入支付宝接口失效流程详解
    上一篇:PHP实现的AES 128位加密算法示例
    下一篇:PHP实现的微信APP支付功能示例【基于TP5框架】
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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