php实现的支付宝网页支付功能示例【基于TP5框架
网络编程 2021-07-04 23:05www.168986.cn编程入门
这篇文章主要介绍了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 'suess'; }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->suess("支付成功",url('Index/index')); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { //验证失败 echo "验证失败"; }
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》及《》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指