侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

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

2022-06-30 星期四 / 0 评论 / 0 点赞 / 47 阅读 / 7649 字

本文实例讲述了php实现的支付宝网页支付功能。分享给大家供大家参考,具体如下:1.提交支付请求require_once './payment/zfb/pagepay/service/AlipayTradeService.

本文实例讲述了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程序设计有所帮助。

广告 广告

评论区