Pay.php
3.1 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
<?php
namespace Yansongda\Pay;
use Yansongda\Pay\Exceptions\InvalidArgumentException;
use Yansongda\Pay\Support\Config;
class Pay
{
/**
* @var \Yansongda\Pay\Support\Config
*/
private $config;
/**
* @var string
*/
private $drivers;
/**
* @var \Yansongda\Pay\Contracts\GatewayInterface
*/
private $gateways;
/**
* construct method.
*
* @author JasonYan <me@yansongda.cn>
*
* @param array $config
*/
public function __construct(array $config = [])
{
$this->config = new Config($config);
}
/**
* set pay's driver.
*
* @author JasonYan <me@yansongda.cn>
*
* @param string $driver
*
* @return Pay
*/
public function driver($driver)
{
if (is_null($this->config->get($driver))) {
throw new InvalidArgumentException("Driver [$driver]'s Config is not defined.");
}
$this->drivers = $driver;
return $this;
}
/**
* set pay's gateway.
*
* @author yansongda <me@yansongda.cn>
*
* @param string $gateway
*
* @return \Yansongda\Pay\Contracts\GatewayInterface
*/
public function gateway($gateway = 'web')
{
if (!isset($this->drivers)) {
throw new InvalidArgumentException('Driver is not defined.');
}
$this->gateways = $this->createGateway($gateway);
return $this->gateways;
}
/**
* create pay's gateway.
*
* @author yansongda <me@yansongda.cn>
*
* @param string $gateway
*
* @return \Yansongda\Pay\Contracts\GatewayInterface
*/
protected function createGateway($gateway)
{
if (!file_exists(__DIR__ . '/Gateways/' . ucfirst($this->drivers) . '/' . ucfirst($gateway) . 'Gateway.php')) {
throw new InvalidArgumentException("Gateway [$gateway] is not supported.");
}
$gateway = __NAMESPACE__ . '\\Gateways\\' . ucfirst($this->drivers) . '\\' . ucfirst($gateway) . 'Gateway';
return $this->build($gateway);
}
/**
* build pay's gateway.
*
* @author JasonYan <me@yansongda.cn>
*
* @param string $gateway
*
* @return \Yansongda\Pay\Contracts\GatewayInterface
*/
protected function build($gateway)
{
return new $gateway($this->config->get($this->drivers));
}
public function verify()
{
if ($this->drivers == 'wechat') {
return $this->gateway()->verify(file_get_contents("php://input"));
} else {
$request = request();
$data = $request->get('app_id') && $request->get('out_trade_no') ? $request->get('', null, 'trim') : $request->post('', null, 'trim');
return $this->gateway()->verify($data);
}
}
public function success()
{
if ($this->drivers == 'wechat') {
echo '<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>';
} else {
echo 'success';
}
return;
}
}