Plugin Directory

Changeset 3227922


Ignore:
Timestamp:
01/24/2025 09:31:02 AM (14 months ago)
Author:
taiflywire
Message:

Updating trunk with GitLab release 1.0.10

Location:
flywire-payment-gateway/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • flywire-payment-gateway/trunk/CHANGELOG

    r3021034 r3227922  
    22All notable changes to this project will be documented in this file.
    33 
     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
    411
    512## [1.0.9] - 2023-05-22
  • flywire-payment-gateway/trunk/assets/checkout_config.js

    r2753520 r3227922  
    1919
    2020window.flywire.WooCommerce = {
     21    checkout: {},
    2122    unblock: function() {
    2223        const form = jQuery('form[name=checkout]');
     
    3031            if (typeof config === 'string')
    3132                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            }
    3240            console.log(config);
    33             window.flywire.Checkout.render(config, "#checkout-button");
    3441            document.getElementById('checkout-button').removeAttribute('disabled');
    3542            document.getElementById('checkout-button').click();
  • flywire-payment-gateway/trunk/flywire-payment-gateway.php

    r3021034 r3227922  
    66 * Author: Flywire
    77 * Author URI: http://www.flywire.com/
    8  * Version: 1.0.9
     8 * Version: 1.0.10
    99 * Text Domain: flywire-payment-gateway
    1010 * Domain Path: /i18n/languages/
  • flywire-payment-gateway/trunk/includes/flywire-payment-gateway-callback-handler.php

    r2778493 r3227922  
    5454        if ( ! empty( $data ) ) {
    5555            $posted = wp_unslash( $data );
    56             error_log( 'Received Flywire callback: ' . json_encode( $posted ) );
    5756
    5857            if ( $this->validate_callback( $posted ) ) {
     
    7372     */
    7473    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" );
    7675        $valid         = true;
    7776
     
    9291     */
    9392    public function valid_response( array $posted ) {
    94         $order = wc_get_order( $posted['callback_id'] );
     93        $order = wc_get_order( $posted['data']['external_reference'] );
    9594
    9695        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() );
    9998
    10099            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 . '()' );
    102101                call_user_func( array( $this, $method_name ), $order, $posted );
    103102            }
     
    115114     */
    116115    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'] );
    118117
    119118        if ( $this->order_notes && $create ) {
     
    132131    protected function payment_status_initiated( WC_Order $order, array $posted ) {
    133132        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.' );
    135134            exit;
    136135        }
    137136
    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
    139140            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        }
    145148    }
    146149
     
    156159    protected function payment_status_guaranteed( WC_Order $order, array $posted ) {
    157160        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.' );
    159162            exit;
    160163        }
    161164
    162165        $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        }
    164172
    165173        if ($paid_amount < $order_total) {
     
    174182                $order->calculate_totals();
    175183                $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() ));
    178187        } 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 ) );
    180189            WC_Gateway_Flywire::log(sprintf( __( "'Guaranteed' callback received.  Order #%s set to Completed", 'flywire-payment-gateway' ), $order->get_id() ));
    181190        } else {
     
    196205
    197206        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() ));
    200209        }
    201210    }
     
    208217     */
    209218    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 ) );
    212227        WC_Gateway_Flywire::log(sprintf( __( "'Cancelled' callback received.  Order #%s set to Cancelled", 'flywire-payment-gateway' ), $order->get_id() ));
    213228    }
  • flywire-payment-gateway/trunk/includes/flywire-payment-gateway-pay.php

    r2754388 r3227922  
    3232            jQuery(function ($) {
    3333                const buttonEl = $('#checkout-button');
    34                 let config = {},
     34                let checkout = {},
     35                    config = {},
    3536                    paramPairs = (window.location.search).replace(/^\?/, '').split("&");
    3637
     
    4647                } else { // if valid, enable button and launch Embed2.0
    4748                    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                    }
    4954                    buttonEl.click();
    5055                }
  • flywire-payment-gateway/trunk/includes/flywire-payment-gateway-request.php

    r2907372 r3227922  
    190190        $settings['callback_id']  = strval($this->order->get_id());
    191191        $settings['callback_url'] = $callback_url;
     192        $settings['callback_version']  = '2';
    192193        if ($this->display_payer_info)
    193194            $settings['displayPayerInformation'] = true;
  • flywire-payment-gateway/trunk/readme.txt

    r3021034 r3227922  
    44Requires at least: 5.7
    55Tested up to: 6.2
    6 Stable tag: 1.0.9
     6Stable tag: 1.0.10
    77Requires PHP: 8.0
    88License: GPLv2 or later
     
    2828== Changelog ==
    2929
    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
    3235
    3336= 1.0.8 =
Note: See TracChangeset for help on using the changeset viewer.