Skip to content

Conversation

@candemiralp
Copy link
Contributor

Description

Tested scenarios

Fixes

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @candemiralp, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly improves the robustness and error handling for partial payments, particularly those involving gift cards, within the Adyen payment module. It ensures that payment flows are correctly terminated upon refusal of a gift card payment and introduces explicit cancellation of Adyen Checkout API orders when a transaction fails. These changes lead to a more reliable and predictable payment experience for multi-payment scenarios.

Highlights

  • Enhanced Partial Payment Handling: Introduced a new GiftcardPaymentException and refined the payment processing flow to immediately halt further payment instrument authorization if a gift card payment is refused. This ensures that subsequent payment attempts are not made on an already failed partial payment order.
  • Adyen Checkout API Order Management: Implemented mechanisms to store and retrieve Adyen Checkout API order data (pspReference and orderData) in temporary storage and payment additional information. This data is now used to explicitly cancel the Checkout API order if the overall payment transaction is refused or cancelled, improving consistency and preventing orphaned orders.
  • Refactored Dependency Injection: Updated several classes to leverage PHP 8.1+ readonly properties in their constructors, streamlining dependency injection and improving code readability and immutability.
  • Improved Error Messaging: Added a specific error message (authError_giftcard_refused) for when gift card payments are refused, providing clearer feedback to users and administrators.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request improves the handling of partial payments, particularly with gift cards, by introducing a more robust cancellation flow. When a partial payment fails, the entire Adyen order is now cancelled to prevent inconsistent states. The changes include introducing a GiftcardPaymentException, refactoring to use the Adyen Orders API for cancellations, and cleaning up related code.

My review focuses on ensuring the new logic is sound and identifying potential issues. I've found a couple of areas for improvement in Helper/OrdersApi.php: one is a potential runtime error due to operating on a null value, and the other is an incorrect docblock. Overall, the changes are a significant improvement to the payment flow.

Comment on lines +147 to +148
$this->checkoutApiOrder['pspReference'] = $pspReference;
$this->checkoutApiOrder['orderData'] = $orderData;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The checkoutApiOrder property is initialized as null. Attempting to set an array key on a null value will result in a warning in some PHP versions and a fatal error in PHP 8. It's safer to assign the entire array at once to avoid this issue.

        $this->checkoutApiOrder = ['pspReference' => $pspReference, 'orderData' => $orderData];

/**
* Returns the value of the Create Order API call from the temporary storage
*
* @return CreateOrderResponse|null
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The docblock return type CreateOrderResponse|null does not match the function's return type ?array. Please update the docblock for consistency.

     * @return array|null

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant