php支付系统(php实现的支付宝网页支付功能示例基于TP5框架)
类别:编程学习 浏览量:2386
时间:2021-11-01 10:19:41 php支付系统
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框架的PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/Drug_/article/details/83897368
您可能感兴趣
- php新建文件夹代码(php新建文件的方法实例)
- php 常见的三种缓存(PHP进阶学习之垃圾回收机制详解)
- mac版本php环境搭建(在Mac OS X中配置Apache+PHP+MySQL运行环境的详细步骤)
- php网页浏览功能的具体实现(php实现网页上一页下一页翻页过程详解)
- php上传大文件教程(PHP实现带进度条的Ajax文件上传功能示例)
- php开发中用什么模板(PHP模版引擎原理、定义与用法实例)
- php代码生成器(PHP迭代器和生成器用法实例分析)
- php微信支付怎么做(ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解)
- thinkphp5框架分析(thinkPHP5框架路由常用知识点汇总)
- php如何创建二维数组(PHP二维索引数组的遍历实例分析2种方式)
- php微信支付步骤(PHP实现微信提现企业付款到零钱)
- php7.4编译安装(PHP7.3.10编译安装教程)
- php图片合成处理(PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例)
- php7处理方案(PHP7 安装event扩展的实现方法)
- php获取post请求来源域名(在PHP中实现使用Guzzle执行POST和GET请求)
- 织梦cms漏洞大全(织梦CMS利用php正则让文章的外链自动加nofollow)
- 爱情可以当饭吃吗(爱情能当饭吃吗)
- Top 3 JSHS《运动与健康科学 英文 》跻身SCI体育学期刊世界前三(Top3JSHS运动与健康科学)
- 体坛传媒LOGO全新升级,多元发展迈出坚实步伐(体坛传媒LOGO全新升级)
- 超撩人治愈的绝美水彩,原来出自她之手 一笔一画令无数人沉醉(超撩人治愈的绝美水彩)
- 新手的勾线(新手的勾线)
- ()
热门推荐
- 修改sqlserver数据库名称步骤(SQL server数据库创建代码 filegroup文件组修改的示例代码)
- laravel消息机制(laravel框架中间件 except 和 only 的用法示例)
- iis7.5缓存设置
- pythonweb大数据分析(Python实现的大数据分析操作系统日志功能示例)
- linuxnfs服务教程(使用Docker的NFS-Ganesha镜像搭建nfs服务器的详细过程)
- php复选框代码(PHP之多条件混合筛选功能的实现方法)
- js中this的用法
- mysql常见的存储引擎(如何选择MySQL的存储引擎?)
- 利用xampp搭建服务器(xampp集成环境怎样使用MySQL数据库)
- linux用nvm安装nodejs(nodejs管理工具nvm安装过程详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9