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

2025-05-27 0 67

本文实例讲述了php实现的支付宝网页支付功能。分享给大家供大家参考,具体如下:

1.提交支付请求

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
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.异步回调支付宝参数认证

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59
$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.同步回调页面跳转处理 同步只是做一个跳转处理 不要写任何数据处理

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38
$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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 php实现的支付宝网页支付功能示例【基于TP5框架】 https://www.kuaiidc.com/71330.html

相关文章

发表评论
暂无评论