AlipayController.php
5.2 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
/**
* Created by PhpStorm.
* User: 29925
* Date: 2018/6/14
* Time: 16:05
*/
namespace app\portal\controller;
use cmf\controller\HomeBaseController;
use think\Db;
use traits\controller\Jump;
class AlipayController extends HomeBaseController
{
public function _initialize()
{
require_once VENDOR_PATH.'alipay/config.php';
require_once VENDOR_PATH.'alipay/pagepay/service/AlipayTradeService.php';
require_once VENDOR_PATH.'alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
$this->config = $config;
}
public function alipay() {
$data = $this->request->param();
$config = $this->config;
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = trim($data['order_sn']);
//订单名称,必填
$subject = trim($data['name']);
//付款金额,必填
// $total_amount = trim(I('get.price'));
$total_amount = trim(0.01);
//商品描述,可空
$body = '';
//构造参数
$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($config);
/**
* pagePay 电脑网站支付请求
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @param $return_url 同步跳转地址,公网可以访问
* @param $notify_url 异步通知地址,公网可以访问
* @return $response 支付宝返回的信息
*/
$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
//输出表单
var_dump($response);
}
// 回调
public function notify_url() {
$config = $this->config;
$arr=$_POST;
$alipaySevice = new \AlipayTradeService($config);
$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);
if($result) {
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
//交易状态
$trade_status = $_POST['trade_status'];
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为一致的
//如果有做过处理,不执行商户的业务程序
//注意:
//付款完成后,支付宝系统发送该交易状态通知
}
}
}
//
public function return_url() {
$config = $this->config;
$arr = $_GET;
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($arr);
// var_dump($_GET);
// echo '<br/>';
// var_dump($result);exit;
if ($result) {
//商户订单号
$out_trade_no = htmlspecialchars($_GET['out_trade_no']);
//支付宝交易号
$trade_no = htmlspecialchars($_GET['trade_no']);
$data = $_GET;
$where['order_sn'] = $data['out_trade_no'];
$where['price'] = $data['total_amount'];
$user_licence_model = Db::name('UserLicence');
$userLicenceInfo = $user_licence_model->where($where)->find();
$info['paytype'] = 2;
$info['pay_time'] = time();
$info['status'] = 1;
$info['transaction_id'] = $data['trade_no'];
Db::startTrans();
$results = $user_licence_model->where($where)->update($info);
if(!$results) {
Db::rollback();
} else {
Db::commit();
if($userLicenceInfo['type'] == 1) {
$this->redirect(url('user/licence/sesame'));
}
if($userLicenceInfo['type'] == 2) {
$this->redirect(url('user/licence/reputation'));
}
if($userLicenceInfo['type'] == 3) {
$this->redirect(url('user/licence/edu'));
}
}
}
}
}