1
|
|
|
<?php |
2
|
|
|
declare(strict_types=1); |
3
|
|
|
|
4
|
|
|
error_reporting(E_ALL); |
5
|
|
|
ini_set('display_errors', '1'); |
6
|
|
|
|
7
|
|
|
// Load Composer |
8
|
|
|
require_once dirname(__DIR__).'/vendor/autoload.php'; |
9
|
|
|
|
10
|
|
|
// Load params from Dotenv |
11
|
|
|
$dotenv = new Dotenv\Dotenv(dirname(__DIR__)); |
12
|
|
|
$dotenv->load(); |
13
|
|
|
|
14
|
|
|
$authKey = getenv('AUTH_KEY'); |
15
|
|
|
$authSecret = getenv('AUTH_SECRET'); |
16
|
|
|
$walletID = (int)getenv('WALLET'); |
17
|
|
|
$baseCurrency = getenv('CURRENCY'); |
18
|
|
|
$lifetime = (int)getenv('LIFETIME'); |
19
|
|
|
|
20
|
|
|
// Create B2Binpay Provider object |
21
|
|
|
$provider = new B2Binpay\Provider($authKey, $authSecret, true); |
22
|
|
|
|
23
|
|
|
/* |
24
|
|
|
* Check $_POST for callback and save it to 'callback.txt' |
25
|
|
|
*/ |
26
|
|
|
if (!empty($_POST)) { |
27
|
|
|
// Get POST headers |
28
|
|
|
$headers = getallheaders(); |
29
|
|
|
|
30
|
|
|
// Check callback Authorization |
31
|
|
|
if (empty($headers['Authorization']) || ($headers['Authorization'] !== $provider->getAuthorization())) { |
32
|
|
|
header('HTTP/1.1 401 Unauthorized'); |
33
|
|
|
exit(); |
34
|
|
|
} |
35
|
|
|
|
36
|
|
|
$json_string = json_encode($_POST); |
37
|
|
|
|
38
|
|
|
// Write it to 'callback.txt' |
39
|
|
|
file_put_contents( |
40
|
|
|
'callback.txt', |
41
|
|
|
date('Y/M/d H:i:s').PHP_EOL.$json_string.PHP_EOL.PHP_EOL, |
42
|
|
|
FILE_APPEND | LOCK_EX |
43
|
|
|
); |
44
|
|
|
|
45
|
|
|
// Send proper response to callback |
46
|
|
|
header('HTTP/1.1 200 OK'); |
47
|
|
|
exit('OK'); |
48
|
|
|
} |
49
|
|
|
|
50
|
|
|
/* |
51
|
|
|
* If there no callback, let's create test payment |
52
|
|
|
*/ |
53
|
|
|
|
54
|
|
|
// Get Wallet info |
55
|
|
|
$wallet = $provider->getWallet($walletID); |
56
|
|
|
|
57
|
|
|
// Get actual Rates |
58
|
|
|
$rates = $provider->getRates($baseCurrency); |
59
|
|
|
|
60
|
|
|
// Convert currency |
61
|
|
|
$cleanAmount = $provider->convertCurrency( |
62
|
|
|
'1', |
63
|
|
|
$baseCurrency, |
64
|
|
|
$wallet->currency->alpha, |
65
|
|
|
$rates |
66
|
|
|
); |
67
|
|
|
|
68
|
|
|
// Add 10% markup |
69
|
|
|
$amount = $provider->addMarkup($cleanAmount, $wallet->currency->alpha, 10); |
70
|
|
|
|
71
|
|
|
// Generate callback Url from $_SERVER |
72
|
|
|
$protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http'); |
73
|
|
|
$callbackUrl = $protocol.'://'.$_SERVER['HTTP_HOST']; |
74
|
|
|
|
75
|
|
|
// Generate tracking ID from timestamp |
76
|
|
|
$trackingID = (string)time(); |
77
|
|
|
|
78
|
|
|
// Create Bill |
79
|
|
|
$bill = $provider->createBill( |
80
|
|
|
$wallet->id, |
81
|
|
|
$amount, |
82
|
|
|
$wallet->currency->alpha, |
83
|
|
|
$lifetime, |
84
|
|
|
$trackingID, |
85
|
|
|
$callbackUrl |
86
|
|
|
); |
87
|
|
|
|
88
|
|
|
// Check Bill |
89
|
|
|
$billUpd = $provider->getBill($bill->id); |
90
|
|
|
|
91
|
|
|
echo '<pre>'; |
92
|
|
|
print_r($wallet); |
93
|
|
|
print_r($billUpd); |
94
|
|
|
echo '</pre>'; |
95
|
|
|
|