diff --git a/classes/wc-gateway-braintree-angelleye.php b/classes/wc-gateway-braintree-angelleye.php
index 162c82bea..f5d65230f 100644
--- a/classes/wc-gateway-braintree-angelleye.php
+++ b/classes/wc-gateway-braintree-angelleye.php
@@ -509,6 +509,8 @@ public function payment_fields() {
?>
enable_braintree_drop_in) {
@@ -521,7 +523,15 @@ public function payment_fields() {
@@ -1253,7 +1266,7 @@ public function angelleye_do_payment($order) {
} else {
$customer_id = get_current_user_id();
}
- $token->set_token($paymentMethod->billingAgreementId);
+ $token->set_token($payment_method_token);
$token->set_gateway_id($this->id);
$token->set_card_type('PayPal Billing Agreement');
$token->set_last4(substr($paymentMethod->billingAgreementId, -4));
@@ -1648,7 +1661,7 @@ public function payment_scripts() {
return;
}
if ($this->enable_braintree_drop_in) {
- wp_enqueue_script('braintree-gateway', 'https://js.braintreegateway.com/web/dropin/1.16.0/js/dropin.min.js', array('jquery'), null, false);
+ wp_enqueue_script('braintree-gateway', 'https://js.braintreegateway.com/web/dropin/1.20.4/js/dropin.min.js', array('jquery'), null, false);
} else {
wp_enqueue_style('braintree_checkout', PAYPAL_FOR_WOOCOMMERCE_ASSET_URL . 'assets/css/braintree-checkout.css', array(), VERSION_PFW);
wp_enqueue_script('braintree-gateway-client', 'https://js.braintreegateway.com/web/3.35.0/js/client.min.js', array('jquery'), null, true);
@@ -1877,7 +1890,7 @@ public function braintree_save_payment_method($customer_id, $result, $zero_amoun
$token->set_user_id($customer_id);
} elseif (!empty($braintree_method->billingAgreementId)) {
$customer_id = get_current_user_id();
- $token->set_token($braintree_method->billingAgreementId);
+ $token->set_token($payment_method_token);
$token->set_gateway_id($this->id);
$token->set_card_type('PayPal Billing Agreement');
$token->set_last4(substr($braintree_method->billingAgreementId, -4));
@@ -2657,7 +2670,7 @@ public function braintree_save_payment_method_auth($customer_id, $result, $order
} else {
$customer_id = get_current_user_id();
}
- $token->set_token($braintree_method->billingAgreementId);
+ $token->set_token($payment_method_token);
$token->set_gateway_id($this->id);
$token->set_card_type('PayPal Billing Agreement');
$token->set_last4(substr($braintree_method->billingAgreementId, -4));
diff --git a/paypal-for-woocommerce.php b/paypal-for-woocommerce.php
index abab87e13..73586732d 100644
--- a/paypal-for-woocommerce.php
+++ b/paypal-for-woocommerce.php
@@ -152,6 +152,8 @@ public function __construct()
add_action( 'wp_head', array( $this, 'paypal_for_woo_head_mark' ), 1 );
add_action( 'admin_footer', array($this, 'angelleye_add_deactivation_form'));
add_action( 'wp_ajax_angelleye_send_deactivation', array($this, 'angelleye_handle_plugin_deactivation_request'));
+ add_action( 'wp', array( __CLASS__, 'angelleye_delete_payment_method_action' ), 10 );
+ add_filter( 'woocommerce_saved_payment_methods_list', array($this, 'angelleye_synce_braintree_save_payment_methods'), 5, 2 );
$this->customer_id;
}
@@ -1287,6 +1289,78 @@ public function load_cartflow_pro_plugin() {
include_once plugin_dir_path(__FILE__) . 'angelleye-includes/cartflows-pro/class-angelleye-cartflow-pro-helper.php';
}
}
+
+ /**
+ * Process the delete payment method form.
+ */
+ public static function angelleye_delete_payment_method_action() {
+ global $wp, $woocommerce;
+ if ( isset( $wp->query_vars['delete-payment-method'] ) ) {
+ wc_nocache_headers();
+ $token_id = absint( $wp->query_vars['delete-payment-method'] );
+ $token = WC_Payment_Tokens::get( $token_id );
+ if ( !is_null( $token ) && $token->get_gateway_id() === 'braintree' && get_current_user_id() == $token->get_user_id() && isset( $_REQUEST['_wpnonce'] ) || true === wp_verify_nonce( wp_unslash( $_REQUEST['_wpnonce'] ), 'delete-payment-method-' . $token_id ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
+ try {
+ $gateways = $woocommerce->payment_gateways->payment_gateways();
+ $gateways['braintree']->angelleye_braintree_lib();
+ $token_value = $token->get_token();
+ Braintree_PaymentMethod::delete($token_value);
+ } catch (Braintree_Exception_NotFound $e) {
+ $gateways['braintree']->add_log("Braintree_PaymentMethod::delete Braintree_Exception_NotFound: " . $e->getMessage());
+ } catch (Braintree_Exception_Authentication $e) {
+ $gateways['braintree']->add_log("Braintree_ClientToken::generate Exception: API keys are incorrect, Please double-check that you haven't accidentally tried to use your sandbox keys in production or vice-versa.");
+ } catch (Braintree_Exception_Authorization $e) {
+ $gateways['braintree']->add_log("Braintree_ClientToken::generate Exception: The API key that you're using is not authorized to perform the attempted action according to the role assigned to the user who owns the API key.");
+ } catch (Braintree_Exception_DownForMaintenance $e) {
+ $gateways['braintree']->add_log("Braintree_Exception_DownForMaintenance: Request times out.");
+ } catch (Braintree_Exception_ServerError $e) {
+ $gateways['braintree']->add_log("Braintree_Exception_ServerError" . $e->getMessage());
+ } catch (Braintree_Exception_SSLCertificate $e) {
+ $gateways['braintree']->add_log("Braintree_Exception_SSLCertificate" . $e->getMessage());
+ } catch (Exception $ex) {
+ $gateways['braintree']->add_log("Exception" . $ex->getMessage());
+ }
+ }
+ }
+ }
+
+ public function angelleye_synce_braintree_save_payment_methods($list, $customer_id) {
+ global $wp, $woocommerce;
+ try {
+ $gateways = $woocommerce->payment_gateways->payment_gateways();
+ $gateways['braintree']->angelleye_braintree_lib();
+ if( !empty($gateways['braintree'])) {
+ if ($gateways['braintree']->enable_tokenized_payments == 'yes') {
+ $payment_tokens = WC_Payment_Tokens::get_customer_tokens( $customer_id, 'braintree' );
+ foreach ( $payment_tokens as $payment_token ) {
+ $token_value = $payment_token->get_token();
+ try {
+ Braintree_PaymentMethod::find($token_value);
+ } catch (Braintree_Exception_NotFound $e) {
+ $gateways['braintree']->add_log("Braintree_PaymentMethod::delete Braintree_Exception_NotFound: " . $e->getMessage());
+ WC_Payment_Tokens::delete( $payment_token->get_id() );
+ } catch (Braintree_Exception_Authentication $e) {
+ $gateways['braintree']->add_log("Braintree_ClientToken::generate Exception: API keys are incorrect, Please double-check that you haven't accidentally tried to use your sandbox keys in production or vice-versa.");
+ } catch (Braintree_Exception_Authorization $e) {
+ $gateways['braintree']->add_log("Braintree_ClientToken::generate Exception: The API key that you're using is not authorized to perform the attempted action according to the role assigned to the user who owns the API key.");
+ } catch (Braintree_Exception_DownForMaintenance $e) {
+ $gateways['braintree']->add_log("Braintree_Exception_DownForMaintenance: Request times out.");
+ } catch (Braintree_Exception_ServerError $e) {
+ $gateways['braintree']->add_log("Braintree_Exception_ServerError" . $e->getMessage());
+ } catch (Braintree_Exception_SSLCertificate $e) {
+ $gateways['braintree']->add_log("Braintree_Exception_SSLCertificate" . $e->getMessage());
+ } catch (Exception $ex) {
+ $gateways['braintree']->add_log("Exception" . $ex->getMessage());
+ }
+ }
+ }
+
+ }
+ } catch (Exception $ex) {
+
+ }
+ return $list;
+ }
}
}
new AngellEYE_Gateway_Paypal();
\ No newline at end of file