← All changes
|
src/Framework/PaymentGateways/DataTransferObjects/GatewayRouteData.php
+29
-13
4.16.0
→
4.16.9
View file →
| @@ -32,12 +32,37 @@ | ||
| 32 | 32 | /** |
| 33 | 33 | * @var string|null |
| 34 | 34 | */ |
| 35 | 35 | public $routeSignatureExpiration; |
| 36 | + /** | |
| 37 | + * Keys of the query args the signature covers. | |
| 38 | + * | |
| 39 | + * @since 4.16.8 | |
| 40 | + * @var string[] | |
| 41 | + */ | |
| 42 | + public $routeSignatureArgKeys = []; | |
| 36 | 43 | |
| 37 | 44 | /** |
| 45 | + * Query args the route framework itself sets. A gateway arg with one of these names would be | |
| 46 | + * overwritten on the URL and excluded from queryParams on the way back, so a signature covering | |
| 47 | + * it could never validate. | |
| 48 | + * | |
| 49 | + * @since 4.16.8 | |
| 50 | + */ | |
| 51 | + const ROUTE_PARAMS = [ | |
| 52 | + 'give-listener', | |
| 53 | + 'give-gateway-id', | |
| 54 | + 'give-gateway-method', | |
| 55 | + 'give-route-signature', | |
| 56 | + 'give-route-signature-id', | |
| 57 | + 'give-route-signature-expiration', | |
| 58 | + 'give-route-signature-args', | |
| 59 | + ]; | |
| 60 | + | |
| 61 | + /** | |
| 38 | 62 | * Convert data from request into DTO |
| 39 | 63 | * |
| 64 | + * @since 4.16.8 add routeSignatureArgKeys | |
| 40 | 65 | * @since 2.19.5 add routeSignatureExpiration |
| 41 | 66 | * @since 2.19.4 add give-route-signature-id |
| 42 | 67 | * @since 2.18.0 |
| 43 | 68 | * |
| @@ -51,22 +76,13 @@ | ||
| 51 | 76 | $self->gatewayMethod = $request['give-gateway-method']; |
| 52 | 77 | $self->routeSignature = isset($request['give-route-signature']) ? $request['give-route-signature'] : null; |
| 53 | 78 | $self->routeSignatureId = isset($request['give-route-signature-id']) ? $request['give-route-signature-id'] : null; |
| 54 | 79 | $self->routeSignatureExpiration = isset($request['give-route-signature-expiration']) ? $request['give-route-signature-expiration'] : null; |
| 80 | + $self->routeSignatureArgKeys = empty($request['give-route-signature-args']) | |
| 81 | + ? [] | |
| 82 | + : explode(',', $request['give-route-signature-args']); | |
| 55 | 83 | |
| 56 | - $self->queryParams = array_filter($request, static function ($param) { | |
| 57 | - return ! in_array( | |
| 58 | - $param, | |
| 59 | - [ | |
| 60 | - 'give-listener', | |
| 61 | - 'give-gateway-id', | |
| 62 | - 'give-gateway-method', | |
| 63 | - 'give-route-signature', | |
| 64 | - 'give-route-signature-id', | |
| 65 | - 'give-route-signature-expiration', | |
| 66 | - ] | |
| 67 | - ); | |
| 68 | - }, ARRAY_FILTER_USE_KEY); | |
| 84 | + $self->queryParams = array_diff_key($request, array_flip(self::ROUTE_PARAMS)); | |
| 69 | 85 | |
| 70 | 86 | return $self; |
| 71 | 87 | } |
| 72 | 88 | } |