-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPayPalIPN.php
139 lines (108 loc) · 3.04 KB
/
PayPalIPN.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
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
<?php
/**
* PayPalIPN controller class.
*
* PayPal IPN endpoint, replacement for CiviCRM's 'extern/ipn.php'.
*
* @since 0.1
*/
namespace CiviCRM_WP_REST\Controller;
class PayPalIPN extends Base {
/**
* The base route.
*
* @since 0.1
* @var string
*/
protected $rest_base = 'ipn';
/**
* Registers routes.
*
* @since 0.1
*/
public function register_routes() {
register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
[
'methods' => \WP_REST_Server::ALLMETHODS,
'callback' => [ $this, 'get_item' ]
]
] );
}
/**
* Get items.
*
* @since 0.1
* @param WP_REST_Request $request
*/
public function get_item( $request ) {
/**
* Filter request params.
*
* @since 0.1
* @param array $params
* @param WP_REST_Request $request
*/
$params = apply_filters( 'civi_wp_rest/controller/ipn/params', $request->get_params(), $request );
if ( $request->get_method() == 'GET' ) {
// paypal standard
$paypal_IPN = new \CRM_Core_Payment_PayPalIPN( $params );
// log notification
\Civi::log()->alert( 'payment_notification processor_name=PayPal_Standard', $params );
} else {
// paypal pro
$paypal_IPN = new \CRM_Core_Payment_PayPalProIPN( $params );
// log notification
\Civi::log()->alert( 'payment_notification processor_name=PayPal', $params );
}
/**
* Filter PayPalIPN object.
*
* @param CRM_Core_Payment_PayPalIPN|CRM_Core_Payment_PayPalProIPN $paypal_IPN
* @param array $params
* @param WP_REST_Request $request
*/
$paypal_IPN = apply_filters( 'civi_wp_rest/controller/ipn/instance', $paypal_IPN, $params, $request );
try {
if ( ! method_exists( $paypal_IPN, 'main' ) || ! $this->instance_of_crm_base_ipn( $paypal_IPN ) )
return $this->civi_rest_error(
sprintf(
__( '%s must implement a "main" method.', 'civicrm' ),
get_class( $paypal_IPN )
)
);
$result = $paypal_IPN->main();
} catch ( \CRM_Core_Exception $e ) {
\Civi::log()->error( $e->getMessage() );
\Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] );
\Civi::log()->error( 'REQUEST ', [ 'params' => $params ] );
return $this->civi_rest_error( $e->getMessage() );
}
return rest_ensure_response( $result );
}
/**
* Checks whether object is an instance of CRM_Core_Payment_BaseIPN|CRM_Core_Payment_PayPalProIPN|CRM_Core_Payment_PayPalIPN.
*
* Needed because the instance is being filtered through 'civi_wp_rest/controller/ipn/instance'.
*
* @since 0.1
* @param CRM_Core_Payment_BaseIPN|CRM_Core_Payment_PayPalProIPN|CRM_Core_Payment_PayPalIPN $object
* @return bool
*/
public function instance_of_crm_base_ipn( $object ) {
return $object instanceof \CRM_Core_Payment_BaseIPN || $object instanceof \CRM_Core_Payment_PayPalProIPN || $object instanceof \CRM_Core_Payment_PayPalIPN;
}
/**
* Item schema.
*
* @since 0.1
* @return array $schema
*/
public function get_item_schema() {}
/**
* Item arguments.
*
* @since 0.1
* @return array $arguments
*/
public function get_item_args() {}
}