-
Notifications
You must be signed in to change notification settings - Fork 0
/
webhook_handler.php
81 lines (68 loc) · 2.5 KB
/
webhook_handler.php
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
<?php
$PAGE_TITLE = "Webhook Handler";
/*
=======================================================
Monzo API & PHP Integration
-GH: https://github.com/tomludlow2/monzo_api
-Monzo: https://docs.monzo.com/
Created By: Tom Ludlow tom.m.lud@gmail.com
Date: Feb 2022
Tools / Frameworks / Acknowledgements
-Bootstrap (inc Icons): MIT License, (C) 2018 Twitter
(https://getbootstrap.com/docs/5.1/about/license/)
-jQuery: MIT License, (C) 2019 JS Foundation
(https://jquery.org/license/)
-Monzo Developer API
========================================================
file_name: webhook_handler.php
function: receive data from monzo
arguments (default first):
- data - for simulating requests
*/
//This function needs to be exempt from session validation as monzo will not produce session data.
$SESSION_EXEMPT=1;
require "conn.php";
/*
This handles incoming "Transaction Created" webhook requests
*/
$op = [];
$op['response'] = "success";
$op['post_data'] = $_REQUEST['data'];
$input = file_get_contents("php://input");
$hook = json_decode($input, true);
$op['php_input'] = $input;
$op['php_sapi_name'] = php_sapi_name();
$op['remote_ip'] = $_SERVER['REMOTE_ADDR'];
$op['remote_port'] = $_SERVER['REMOTE_PORT'];
//Hook contains type
if( $hook['type'] == "transaction.created") {
$op['type'] = "transaction.created";
$tx = $hook['data'];
$created = date("Y-m-d H:i:s", strtotime($tx['created']));
$settled = date("Y-m-d H:i:s", strtotime($tx['settled']));
$send = send_transaction($conn, $tx['account_id'], $created, $settled, $tx['amount'], $tx['description'], $tx['merchant'], $tx['category'], $tx['id'], $tx['notes']);
$op['sent_to_table'] = $send;
}else {
$op['type'] = "unknown";
$op['info'] = "This API did now know what to do to with this webhook - input has been parsed and not found to match the schema";
//$date = date("Y-m-d\TH:i:s\Z"); - 3339 format
//Send the failed webhook to database (for debugging)
$date = date("Y-m-d H:i:s");
$type = $hook['type'];
$data = json_encode($hook);
$send_failed_webhook = send_failed_webhook($conn, $date, $type, $data);
if( $send_failed_webhook ) {
$op['saved'] = "Webhook data was saved";
}else {
$op['saved'] = "Webhook data could not be saved";
}
}
$f = fopen(DEBUG_FILE, "a");
if( fwrite($f, json_encode($op, JSON_PRETTY_PRINT)) ) {
$op['written'] = "File written";
}else {
$op['written'] = "Could not write";
}
fclose($f);
echo json_encode($op, JSON_PRETTY_PRINT);
?>