php教程

超轻量级php框架startmvc

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

更新时间:2020-04-07 19:21:22 作者:startmvc
本文实例讲述了php实现的支付宝网页支付功能。分享给大家供大家参考,具体如下:1.提交

本文实例讲述了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 "验证失败";
}

php 支付宝 网页支付 TP5