autoship_delete_general_payment_method
(src > payments.php) can be used to delete any payment method from QPilot. The function takes the 1. token_id, 2. WC token object, and 3. QPilot method type. It pulls the payment methods from QPilot and deletes the matching method. In addition it has two filters, autoship_delete_general_payment_method and autoship_delete{$type}payment_method filter both of which filter the boolean for if a Method matches between WC and QPilot. Both filters take the Boolean ( if there is a match using the default comparisons ), the QPilot Method Type, the WC Token, and the QPilot Payment Method object.
Example
/**
* Deletes a payment method from QPilot for a customer
* @param string $token_id Payment Token ID for this payment method
* @param WC_Payment_Token_CC $token
* @param string $type The Type for the Payment Method from QPilot.
*/
function autoship_delete_general_payment_method( $token_id, $token, $type = '' ) {
// Get the WC Customer from the Token
$wc_customer_id = $token->get_user_id();
// Get the Autoship Customer ID.
$autoship_customer_id = autoship_get_autoship_customer_id( $wc_customer_id, 'autoship_delete_general_payment' );
// If not autoship bypass
if ( empty( $autoship_customer_id ) || empty( $type ) )
return;
// Get the method id from the token.
$payment_method_id = $token->get_token();
// Get the Default QPilot Client.
$client = autoship_get_default_client();
try {
// Get the customer's payment methods from QPilot
$payment_methods = $client->get_customer_payment_methods( $autoship_customer_id );
// Iterate through the payment methods and delete the one that matches this type.
foreach ( $payment_methods as $method ) {
// If the token being deleted matches a token in QPilot Delete it.
$valid = (
$method->Type == $type
&& $method->GatewayCustomerId == $wc_customer_id
&& $method->GatewayPaymentId == $payment_method_id );
// Added a filter to allow for custom matches between QPilot and Autoship.
// Takes the current matching boolean, the supplied QPilot Method Type, The current Token and the QPilot Payment Method object.
$valid = apply_filters( 'autoship_delete_general_payment_method_qpilot_match', $valid, $type, $token, $method );
$valid = apply_filters( "autoship_delete_{$type}_payment_method_qpilot_match", $valid, $type, $token, $method );
if ( $valid ) {
try {
// Delete the payment method
$client->delete_payment_method( $method->Id );
} catch ( Exception $e ) {
error_log( sprintf( 'Error deleting QPilot Payment Method. Additional Details: %s - %s', $e->getCode(), $e->getMessage() ) );
return new WP_Error( 'Delete QPilot Payment Method Failed', __( $notice['desc'], "autoship" ) );
}
break;
}
}
} catch ( Exception $e ) {
error_log( sprintf( 'Error retrieving QPilot Payment Methods. Additional Details: %s - %s', $e->getCode(), $e->getMessage() ) );
return new WP_Error( 'Retrieve QPilot Payment Methods Failed', __( $notice['desc'], "autoship" ) );
}
return true;
}