Changeset 3227922
- Timestamp:
- 01/24/2025 09:31:02 AM (14 months ago)
- Location:
- flywire-payment-gateway/trunk
- Files:
-
- 7 edited
-
CHANGELOG (modified) (1 diff)
-
assets/checkout_config.js (modified) (2 diffs)
-
flywire-payment-gateway.php (modified) (1 diff)
-
includes/flywire-payment-gateway-callback-handler.php (modified) (9 diffs)
-
includes/flywire-payment-gateway-pay.php (modified) (2 diffs)
-
includes/flywire-payment-gateway-request.php (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
flywire-payment-gateway/trunk/CHANGELOG
r3021034 r3227922 2 2 All notable changes to this project will be documented in this file. 3 3 4 ## [1.0.10] - 2023-08-02 5 6 ### Changed 7 - fixed bug where Checkout plugin was not updating the config 8 - check order status and do not cancel paid orders 9 - update callbacks to v2 10 - update logic to clear cart on Initiated for bank transfers only, clear cart on Guaranteed for credit card & online payments 4 11 5 12 ## [1.0.9] - 2023-05-22 -
flywire-payment-gateway/trunk/assets/checkout_config.js
r2753520 r3227922 19 19 20 20 window.flywire.WooCommerce = { 21 checkout: {}, 21 22 unblock: function() { 22 23 const form = jQuery('form[name=checkout]'); … … 30 31 if (typeof config === 'string') 31 32 config = JSON.parse(config); 33 if (typeof this.checkout.update !== 'function') { 34 this.checkout = window.flywire.Checkout.render(config, "#checkout-button"); 35 console.log('Initialized render()'); 36 } else { 37 this.checkout.update(config); 38 console.log('Updated config'); 39 } 32 40 console.log(config); 33 window.flywire.Checkout.render(config, "#checkout-button");34 41 document.getElementById('checkout-button').removeAttribute('disabled'); 35 42 document.getElementById('checkout-button').click(); -
flywire-payment-gateway/trunk/flywire-payment-gateway.php
r3021034 r3227922 6 6 * Author: Flywire 7 7 * Author URI: http://www.flywire.com/ 8 * Version: 1.0. 98 * Version: 1.0.10 9 9 * Text Domain: flywire-payment-gateway 10 10 * Domain Path: /i18n/languages/ -
flywire-payment-gateway/trunk/includes/flywire-payment-gateway-callback-handler.php
r2778493 r3227922 54 54 if ( ! empty( $data ) ) { 55 55 $posted = wp_unslash( $data ); 56 error_log( 'Received Flywire callback: ' . json_encode( $posted ) );57 56 58 57 if ( $this->validate_callback( $posted ) ) { … … 73 72 */ 74 73 public function validate_callback( array $response ): bool { 75 $keys_to_check = array( " id", "amount", "status", "at", "callback_id" );74 $keys_to_check = array( "event_type", "event_date", "data" ); 76 75 $valid = true; 77 76 … … 92 91 */ 93 92 public function valid_response( array $posted ) { 94 $order = wc_get_order( $posted[' callback_id'] );93 $order = wc_get_order( $posted['data']['external_reference'] ); 95 94 96 95 if ( $order ) { 97 $method_name = 'payment_status_' . $posted[' status'];98 error_log( 'Found order #' . $order->get_id() . ' with current status: ' . $order->get_status() );96 $method_name = 'payment_status_' . $posted['event_type']; 97 WC_Gateway_Flywire::log( 'Found order #' . $order->get_id() . ' with current status: ' . $order->get_status() ); 99 98 100 99 if ( method_exists( $this, $method_name ) ) { 101 error_log( 'Attempting to call method ' . $method_name . '()' );100 WC_Gateway_Flywire::log( 'Attempting to call method ' . $method_name . '()' ); 102 101 call_user_func( array( $this, $method_name ), $order, $posted ); 103 102 } … … 115 114 */ 116 115 protected function add_flywire_order_note( WC_Order $order, array $posted, $create = true ): string { 117 $note = sprintf( __( 'Flywire transaction "%s" was %s on %s.', 'flywire-payment-gateway' ), $posted[' id'], $posted['status'], $posted['at'] );116 $note = sprintf( __( 'Flywire transaction "%s" was %s on %s.', 'flywire-payment-gateway' ), $posted['data']['payment_id'], $posted['event_type'], $posted['event_date'] ); 118 117 119 118 if ( $this->order_notes && $create ) { … … 132 131 protected function payment_status_initiated( WC_Order $order, array $posted ) { 133 132 if ( $order->has_status( wc_get_is_paid_statuses() ) ) { 134 WC_Gateway_Flywire::log( 'Aborting , Order #' . $order->get_id() . ' is already complete.' );133 WC_Gateway_Flywire::log( 'Aborting initiated callback, Order #' . $order->get_id() . ' is already complete.' ); 135 134 exit; 136 135 } 137 136 138 if ( isset( WC()->cart ) ) { 137 $async = $posted['data']['payment_method']['type'] === 'bank_transfer'; 138 139 if ( $async && isset( WC()->cart ) ) { // only empty cart for bank transfers, on initiated 139 140 WC()->cart->empty_cart(); 140 } 141 142 $this->payment_on_hold( $order ); 143 $this->add_flywire_order_note( $order, $posted ); 144 WC_Gateway_Flywire::log(sprintf( __( "'Initiated' callback received. Order #%s set to On Hold", 'flywire-payment-gateway' ), $order->get_id() )); 141 142 $this->payment_on_hold( $order ); 143 $this->add_flywire_order_note( $order, $posted ); 144 WC_Gateway_Flywire::log(sprintf( __( "'Initiated' callback received. Order #%s set to On Hold", 'flywire-payment-gateway' ), $order->get_id() )); 145 } else { 146 WC_Gateway_Flywire::log(__( "'Initiated' callback received.", 'flywire-payment-gateway' )); 147 } 145 148 } 146 149 … … 156 159 protected function payment_status_guaranteed( WC_Order $order, array $posted ) { 157 160 if ( $order->has_status( wc_get_is_paid_statuses() ) ) { 158 WC_Gateway_Flywire::log( 'Aborting , Order #' . $order->get_id() . ' is already complete.' );161 WC_Gateway_Flywire::log( 'Aborting guaranteed callback, Order #' . $order->get_id() . ' is already complete.' ); 159 162 exit; 160 163 } 161 164 162 165 $order_total = $order->get_total(); 163 $paid_amount = floatval( $posted['amount'] ); 166 $paid_amount = floatval( $posted['data']['amount_to'] ); 167 $async = $posted['data']['payment_method']['type'] === 'bank_transfer'; 168 169 if ( !$async && isset( WC()->cart ) ) { // empty cart for card, online transactions, on guaranteed 170 WC()->cart->empty_cart(); 171 } 164 172 165 173 if ($paid_amount < $order_total) { … … 174 182 $order->calculate_totals(); 175 183 $order->save(); 176 $order->add_order_note( __( 'Partial payment of ' . get_woocommerce_currency_symbol( $order->get_currency() ) . $posted['amount'] . ' received', 'flywire-payment-gateway') ); 177 } 184 $order->add_order_note( __( 'Partial payment of ' . get_woocommerce_currency_symbol( $order->get_currency() ) . $posted['data']['amount_to'] . ' received', 'flywire-payment-gateway') ); 185 } 186 WC_Gateway_Flywire::log(sprintf( __( "'Guaranteed' callback received. Order #%s partially paid", 'flywire-payment-gateway' ), $order->get_id() )); 178 187 } else if ( $this->on_guaranteed ) { 179 $this->payment_complete( $order, $posted[' id'], $this->add_flywire_order_note( $order, $posted, false ) );188 $this->payment_complete( $order, $posted['data']['payment_id'], $this->add_flywire_order_note( $order, $posted, false ) ); 180 189 WC_Gateway_Flywire::log(sprintf( __( "'Guaranteed' callback received. Order #%s set to Completed", 'flywire-payment-gateway' ), $order->get_id() )); 181 190 } else { … … 196 205 197 206 if ( ! $this->on_guaranteed ) { 198 $this->payment_complete( $order, $posted[' id'], $this->add_flywire_order_note( $order, $posted, false ) );199 WC_Gateway_Flywire::log( __( "'Delivered' callback received.", 'flywire-payment-gateway'));207 $this->payment_complete( $order, $posted['data']['payment_id'], $this->add_flywire_order_note( $order, $posted, false ) ); 208 WC_Gateway_Flywire::log(sprintf( __( "'Delivered' callback received. Order #%s set to Complete", 'flywire-payment-gateway' ), $order->get_id() )); 200 209 } 201 210 } … … 208 217 */ 209 218 protected function payment_status_cancelled( WC_Order $order, array $posted ) { 210 WC_Gateway_Flywire::log( 'Order #' . $order->get_id() . ' cancelled.' ); 211 $order->update_status( 'canceled', $this->add_flywire_order_note( $order, $posted, false ) ); 219 if ( $order->has_status( wc_get_is_paid_statuses() ) ) { 220 WC_Gateway_Flywire::log( 'Aborting cancelled callback, Order #' . $order->get_id() . ' is already complete.' ); 221 exit; 222 } 223 224 $new_status = $posted['data']['cancellation_reason'] === 'expired' ? 'expired' : 'cancelled'; 225 226 $order->update_status( $new_status, $this->add_flywire_order_note( $order, $posted, false ) ); 212 227 WC_Gateway_Flywire::log(sprintf( __( "'Cancelled' callback received. Order #%s set to Cancelled", 'flywire-payment-gateway' ), $order->get_id() )); 213 228 } -
flywire-payment-gateway/trunk/includes/flywire-payment-gateway-pay.php
r2754388 r3227922 32 32 jQuery(function ($) { 33 33 const buttonEl = $('#checkout-button'); 34 let config = {}, 34 let checkout = {}, 35 config = {}, 35 36 paramPairs = (window.location.search).replace(/^\?/, '').split("&"); 36 37 … … 46 47 } else { // if valid, enable button and launch Embed2.0 47 48 buttonEl.prop('disabled', false); 48 window.flywire.Checkout.render(config, "#checkout-button"); 49 if (typeof checkout.update !== 'function') { 50 checkout = window.flywire.Checkout.render(config, "#checkout-button"); 51 } else { 52 checkout.update(config); 53 } 49 54 buttonEl.click(); 50 55 } -
flywire-payment-gateway/trunk/includes/flywire-payment-gateway-request.php
r2907372 r3227922 190 190 $settings['callback_id'] = strval($this->order->get_id()); 191 191 $settings['callback_url'] = $callback_url; 192 $settings['callback_version'] = '2'; 192 193 if ($this->display_payer_info) 193 194 $settings['displayPayerInformation'] = true; -
flywire-payment-gateway/trunk/readme.txt
r3021034 r3227922 4 4 Requires at least: 5.7 5 5 Tested up to: 6.2 6 Stable tag: 1.0. 96 Stable tag: 1.0.10 7 7 Requires PHP: 8.0 8 8 License: GPLv2 or later … … 28 28 == Changelog == 29 29 30 = 1.0.9 = 31 * Fixed bug where numeric fields were not cast to string in config 30 = 1.0.10 = 31 * Fixed bug where Checkout plugin was not updating the config 32 * Check order status and do not cancel paid orders 33 * Update callbacks to v2 34 * Update logic to clear cart on Initiated for bank transfers only, clear cart on Guaranteed for credit card & online payments 32 35 33 36 = 1.0.8 =
Note: See TracChangeset
for help on using the changeset viewer.