php实现的支付宝网页支付功能示例【基于TP5框架】
发布:smiling 来源: PHP粉丝网 添加日期:2021-12-17 18:52:57 浏览: 评论:0
本文实例讲述了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 "验证失败";
 - }
 
Tags: php支付宝网页支付
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
 - PHP新手上路(一)(7)
 - 惹恼程序员的十件事(5)
 - PHP邮件发送例子,已测试成功(5)
 - 致初学者:PHP比ASP优秀的七个理由(4)
 - PHP会被淘汰吗?(4)
 - PHP新手上路(四)(4)
 - 如何去学习PHP?(2)
 - 简单入门级php分页代码(2)
 - php中邮箱email 电话等格式的验证(2)
 
