Thinkphp5开发电脑网站支付宝支付详细流程(线上测试篇)

在沙箱测试篇讲过的我在这里就再也不作重复,详情请见上一篇PHP开发电脑网站支付宝支付详细流程(沙箱测试篇)php

在沙箱测试的时候使用的是沙箱环境中的配置,如今进行线上测试,须要建立应用数据库

一、建立应用

登陆蚂蚁金服开放平台商户帐号,进入管理中心数组

选择开发者中心->网页&移动应用浏览器

选择支付接入服务器

根据开发需求填写基本信息网络

建立完成后,完善基本信息app

上传应用图标框架

选择须要的功能(注:功能须要签约)异步

在开发配置这里,按照沙箱测试的时候同样,生成密钥,设置受权回调地址等,而后提交审核(审核须要1个工做日)函数

审核经过后会显示状态已上线,一样也能够看到appid

能够点击查看->应用信息查看你须要的信息和配置

官方建立应用详细流程请见(https://docs.open.alipay.com/399/106843/

二、封装类库,选择须要的功能放入框架

我本身选择了支付模块的功能,找到付款须要的类库,所有放入extend

(须要的能够下载https://pan.baidu.com/s/17A2YMahZX6nNmS2sCwJKzQ

我拿出配置文件放入application/extra目录下,格式改为return的数组形式

注意:我在配置文件里加入了seller_id的配置(seller_id能够在帐户信息中查看)

创建一个支付的控制器,引入文件,具体代码以下

 
  1. <?php

  2. namespace app\index\controller;

  3. use think\Controller;

  4. //支付控制器

  5. class Pay extends Controller{

  6. //发起电脑网站支付请求

  7. public function pagePay(){

  8. //商户订单号,商户网站订单系统中惟一订单号,必填

  9. $out_trade_no = trim($_POST['out_trade_no']);

  10. //订单名称,必填

  11. $subject = trim($_POST['subject']);

  12. //付款金额,必填

  13. $total_amount = trim($_POST['total_amount']);

  14. //商品描述,可空

  15. //$body = trim($_POST['body']);

  16. //构造参数

  17. $payRequestBuilder = new \alipay\AlipayTradePagePayContentBuilder();

  18. // $payRequestBuilder->setBody($body);

  19. $payRequestBuilder->setSubject($subject);

  20. $payRequestBuilder->setTotalAmount($total_amount);

  21. $payRequestBuilder->setOutTradeNo($out_trade_no);

  22. $aop = new \alipay\AlipayTradeService();

  23. /**

  24. * pagePay 电脑网站支付请求

  25. * @param $builder 业务参数,使用buildmodel中的对象生成。

  26. * @param $return_url 同步跳转地址,公网能够访问

  27. * @param $notify_url 异步通知地址,公网能够访问

  28. * @return $response 支付宝返回的信息

  29. */

  30. $response = $aop->pagePay($payRequestBuilder,config('alipay.return_url'),config('alipay.notify_url'));

  31. }

  32.  
  33. //回调地址

  34. public function notify_url(){

  35. $arr=$_POST;

  36. $alipaySevice = new \alipay\AlipayTradeService();

  37. $alipaySevice->writeLog(var_export($_POST,true));

  38. $result = $alipaySevice->check($arr);

  39. /* 实际验证过程建议商户添加如下校验。

  40. 一、商户须要验证该通知数据中的out_trade_no是否为商户系统中建立的订单号,

  41. 二、判断total_amount是否确实为该订单的实际金额(即商户订单建立时的金额),

  42. 三、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操做方(有的时候,一个商户可能有多个seller_id/seller_email)

  43. 四、验证app_id是否为该商户自己。

  44. */

  45. if($result) {//验证成功

  46. //请在这里加上商户的业务逻辑程序代

  47. //——请根据您的业务逻辑来编写程序(如下代码仅做参考)

  48. //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

  49. //商户订单号

  50. $out_trade_no = $_POST['out_trade_no'];

  51. //支付宝交易号

  52. $trade_no = $_POST['trade_no'];

  53. //交易状态

  54. $trade_status = $_POST['trade_status'];

  55. if($_POST['trade_status'] == 'TRADE_FINISHED') {

  56. //判断该笔订单是否在商户网站中已经作过处理

  57. //若是没有作过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

  58. //请务必判断请求时的total_amount与通知时获取的total_fee为一致的

  59. //若是有作过处理,不执行商户的业务程序

  60. //注意:

  61. //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

  62. }

  63. else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {

  64. //判断该笔订单是否在商户网站中已经作过处理

  65. //若是没有作过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序

  66. //请务必判断请求时的total_amount与通知时获取的total_fee为一致的

  67. //若是有作过处理,不执行商户的业务程序

  68. //注意:

  69. //付款完成后,支付宝系统发送该交易状态通知

  70. }

  71. //——请根据您的业务逻辑来编写程序(以上代码仅做参考)——

  72. echo "success";//请不要修改或删除

  73. }else {

  74. //验证失败

  75. echo "fail";

  76.  
  77. }

  78.  
  79.  
  80. }

  81. }


在生成订单后,访问pagePay这个函数,发起电脑网站的支付请求

在请求回应后跳转到回调地址notify_url,如果支付正常,则更新数据库的信息,具体代码就再也不这里进行展现了(若是实在须要能够私聊我)

注意:return_url 和 notify_url 的区别

notify_url为服务器通知,支付宝能够保证99.9999%的通知到达率,前提是您的网络通畅。 

return_url为网页重定向通知,是由客户的浏览器触发的一个通知,若客户去网银支付,也会受银行接口影响,因为各类影响因素特别多,因此该种类型的通知支付宝不保证其到达率。 

相关文章
相关标签/搜索