Forum Replies Created

Viewing 15 replies - 1 through 15 (of 31 total)
  • Thread Starter tiberiuz3401

    (@tiberiuz3401)

    I am referring to “My account” dashboard. Right now, my customers can’t see their subscriptions and, although, the endpoint is active (it can be accessed via a link like mywebsite.com/my-account/subscriptions), the endpoint doesn’t appear in the list of links from the “My account” dashboard (orders, addresses, payment methods, account details, etc.)

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Another question. The “Subscriptions” endpoint doesn’t appear in the dashboard. What should I do?

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Thank you for the info, I’ve figured out. But, after someone changes his card info, will the new payment method have a payment nonce enriched with 3D Secure info? I think this is needed so the new card can be charged in the next billing cycles.

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Yes. This is why I can’t see any Subscription endpoints on the “My account”.

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    I don’t actually have a Subscription endpoint since I don’t have Woocommerce Subscription Plugin. Do I have to write custom code for those functionalities or is this endpoint hidden somehow?

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Then it means that if I select any other option (like ‘braintree will handle’) the payment won’t be rejected anymore?

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    What support button? Should I send an email to [email protected]?

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Is there any way I could help you?
    I could try and make some changes to the code to debug, if you have any hints.

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Hi,
    I updated the plugin before to 3.2.25, and the Braintree SDK is directly from js.braintreegateway.com/web, version 3.77.0.
    I am purchasing only subscription products (Braintree Variable Subscription, provided by this plugin).
    From my research, since there is no enriched nonce in the transaction, it means that on transaction()->sale($args) function those $args don’t have that needed nonce. I saw that sale is called in 3 different places in WC_Braintree_Payment_Gateway: in process_payment, process_subscription_payment and process_pre_order_payment.
    1. During a checkout with subscription products are all these 3 sale function called?
    2. The nonce received from verifyCard in what place is consumed?

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    I understand. Meanwhile, I received another explanations from Braintree support.

    As we checked the transaction history of your production gateway for the last 30 days, we were not able to find any transaction with 3DS information, It will be helpful if you provide us with the example transaction ID of 3DS successful transaction.
    
    Also, upon further research, looking at verification aaaaaaa and the subsequent transaction bbbbbbb, I can see that the 3DS-enriched nonce was used during the payment method create request. This means that the nonce was used as part of the credit card verification, rather than the transaction call.
    
    As mentioned in our previous response, I can see from the parameters above that the 3DS-enriched nonce was not passed to the card-issuing bank as part of the transaction, as such the transaction was declined. More importantly, it appears that 3ds was never even attempted for this transaction.
    
    Recommended 3DS Flow for Vaulted Payment Methods
    Looking through your gateway, it appears that your transactions are one-off transactions. For customer-initiated (vaulted) transactions, when it comes to running vaulted payment method through 3D Secure, the recommended flow for new customers is:
    
    1.    A customer enters their payment details into your checkout form and a nonce is created
    2.    The nonce is sent to the server and stored in the vault
    3.    The resulting token is turned back into a nonce using paymentMethodNonce.create()
    4.    This new nonce is sent back to the client-side and authenticated using the 3D Secure component verifyCard
    5.    The resulting 3D Secure enriched nonce is then sent to the server-side for a transaction.sale() request

    I don’t understand why the enriched nonce isn’t passed to the transaction.

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Hello, I searched inside ‘abstract-class-wc-braintree-paymet-gateway.php’ and found something interesting. All code references are from this file.
    I wrote the card details in the card form, so a new payment method would be made. That means that 3DSecure needs a paymentMethodNonce.
    This is what the code behave in this scenario:
    1. In process_payment function:

    
    if ( $this->use_saved_method() ) {
    
    			$args['paymentMethodToken'] = $this->get_payment_method_token();
    
    		} else {
    
    			$args['paymentMethodNonce'] = $this->get_payment_method_nonce();
    
    		}

    Because use_saved_method returns true, the token will be used instead of the nonce, which is not good for 3DSecure.
    2. The function use_saved_method return true in
    return ( ! empty( $_POST[ $this->payment_type_key ] ) && $_POST[ $this->payment_type_key ] === 'token' ) || $this->payment_method_token; because
    $this->payment_method_token is defined.
    3. payment_method_token is defined in add_payment_method function at
    $this->payment_method_token = $token->get_token();
    Since we add a new payment method, it returns a token, which is saved.
    But then, in use_saved_method it thinks that the new payment method is a saved one, and returns true. Furthermore, in process_payment the payment method token is chosen instead of the payment method nonce, which affects 3DSecure, since the data sent to bank doesn’t contain the needed nonce.`

    • This reply was modified 3 years, 4 months ago by tiberiuz3401.
    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Hello, I have a few questions:
    1. If a customer has a vaulted card and he enters the same card details in the checkout as in the vaulted card, why a new vaulted card is created, even though they contain the same card details?
    2. From what I’ve read, when creating a new payment method, it needs a paymentMethodNonce for the 3DSecure. Is that correct?

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    I checked that setting and it has been enabled before the customer tried to pay.

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    Hello, I talked with Braintree support and this is they what told me:

    To begin, I noticed that the transaction xxxxxx did not have any 3DS information on the transaction detail page. Also in our logs, it does not appear that a 3D Secure enriched nonce or authentication ID was used to create the transaction as it was a transaction created using the Customer ID.
    
    The 3D Secure-enriched nonce should be used in the transaction()->sale call rather than using the ?payment_method_token?.  By changing your integration in this way, your transactions should be under the scope of PSD2 and you will see fewer 2099 declines. Without changing your integration, as banks update under PSD2 you will see an increase in declines. 
    
    When it comes to 3DS, recurring billing, and the Vault, there are a few things to be aware of. At a high level, you'll need to create your vault flow to achieve the following:
    ·  A 3DS-enriched nonce must always be passed directly to  transaction.sale() requests in order for 3DS info is to be passed to the issuer
    ·  If the customer is present for the transaction (whether previously vaulted or not), 3DS verification will need to take place as part of your transaction flow
    
    For first-time recurring payments on a new card 
    This scenario would apply when the customer is present and a transaction will take place immediately after card verification:
    1. Create a Vault record via customer.create(), customer.update(), or payment_method.create()
    2. Create a nonce from the payment method token utilizing payment_method_nonce.create()
    3. Run 3DS verification on the nonce by utilizing verifyCard on the client
    4. Pass the returned 3DS-enriched nonce to transaction.sale()
    
    · Make sure to pass a transaction_source as recurring_first
    
    For subsequent scheduled transactions:
    1. Pass the customer's payment method token to transaction.sale()
    · Set the transaction_source as recurring.

    Can I ask you if the plugin does every step mentioned here?

    Thread Starter tiberiuz3401

    (@tiberiuz3401)

    I tried to make a payment with a MasterCard on the website and I received the “A general error has occurred with Cardinal” message. Do you know how to solve this problem?

Viewing 15 replies - 1 through 15 (of 31 total)