Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

refactor(core): Update shipping_cost and order_tax_amount to net_amount of payment_attempt #5844

Merged
merged 22 commits into from
Sep 12, 2024

Conversation

swangi-kumari
Copy link
Contributor

@swangi-kumari swangi-kumari commented Sep 10, 2024

Type of Change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring
  • Dependency updates
  • Documentation
  • CI/CD

Description

  • Update shipping_cost and order_tax_amount to net_amount of payment_attempt
  • Update /tax_calculation response
  • Rename file tax_calculation_flow.rs to session_update_flow.rs
  • Rename PaymentTaxCalculation to TaxCalculation as it is inside connector trait not in payments trait.
  • Add auth_type validation for taxJar connector
  • Add a check if payments_create, payment_update and tax_calculation had a skip_tax_calculation as true or not
  • Add order_tax_amount in payment response.

Additional Changes

  • This PR modifies the API contract
  • This PR modifies the database schema
  • This PR modifies application configuration/environment variables

Motivation and Context

How did you test it?

  1. Create a Merchant Account
curl --location 'http://localhost:8080/accounts' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: test_admin' \
--data-raw '{
  "merchant_id": "merchant_1725535996",
  "locker_id": "m0010",
  "merchant_name": "NewAge Retailer",
  "merchant_details": {
    "primary_contact_person": "John Test",
    "primary_email": "JohnTest@test.com",
    "primary_phone": "sunt laborum",
    "secondary_contact_person": "John Test2",
    "secondary_email": "JohnTest2@test.com",
    "secondary_phone": "cillum do dolor id",
    "website": "https://www.example.com",
    "about_business": "Online Retail with a wide selection of organic products for North America",
    "address": {
      "line1": "1467",
      "line2": "Harrison Street",
      "line3": "Harrison Street",
      "city": "San Fransico",
      "state": "California",
      "zip": "94122",
      "country": "US"
    }
  },
  "return_url": "https://google.com/success",
  "webhook_details": {
    "webhook_version": "1.0.1",
    "webhook_username": "ekart_retail",
    "webhook_password": "password_ekart@123",
    "payment_created_enabled": true,
    "payment_succeeded_enabled": true,
    "payment_failed_enabled": true
  },
  "sub_merchants_enabled": false,
  "metadata": {
    "city": "NY",
    "unit": "245"
  },
  "primary_business_details": [
    {
      "country": "US",
      "business": "food"
    }
  ]
}'
  1. create Api key
curl --location 'http://localhost:8080/api_keys/merchant_1725532194' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: test_admin' \
--data '{
  "name": "API Key 1",
  "description": null,
  "expiration": "2038-01-19T03:14:08.000Z"
}'

Create a Payment Connector Create of Cybersource for Googlepay

curl --location 'http://localhost:8080/account/merchant_1726144591/connectors' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: test_admin' \
--data '{
    "connector_type": "payment_processor",
    "connector_name": "cybersource",
    
    
      "connector_account_details": {
        "auth_type": "SignatureKey",
        "api_secret": "{{{}}}",
        "api_key": "{{}}",
        "key1": "getin_sandbox"
    },
    "connector_label": "hehe",
    "test_mode": false,
    "disabled": false,
    "payment_methods_enabled": [
        {
            "payment_method": "card",
            "payment_method_types": [
                {
                    "payment_method_type": "credit",
                    "card_networks": [
                        "AmericanExpress",
                        "Discover",
                        "Interac",
                        "JCB",
                        "Mastercard",
                        "Visa",
                        "DinersClub",
                        "UnionPay",
                        "RuPay"
                    ],
                    "minimum_amount": 1,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                },
                {
                    "payment_method_type": "debit",
                    "card_networks": [
                        "AmericanExpress",
                        "Discover",
                        "Interac",
                        "JCB",
                        "Mastercard",
                        "Visa",
                        "DinersClub",
                        "UnionPay",
                        "RuPay"
                    ],
                    "minimum_amount": 1,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                }
            ]
        },
        {
            "payment_method": "wallet",
            "payment_method_types": [
                {
                    "payment_method_type": "google_pay",
                    "payment_experience": "invoke_sdk_client",
                    "card_networks": null,
                    "accepted_currencies": null,
                    "accepted_countries": null,
                    "minimum_amount": -1,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                }]
        }
    ],
    "metadata": {
      "google_pay": {
            "merchant_info": {
                "merchant_id": "mpptiscity1",
                "merchant_name": "mpptiscity1"
            },
            "allowed_payment_methods": [
                {
                    "type": "CARD",
                    "parameters": {
                        "allowed_auth_methods": [
                            "PAN_ONLY",
                            "CRYPTOGRAM_3DS"
                        ],
                        "allowed_card_networks": [
                            "AMEX",
                            "DISCOVER",
                            "INTERAC",
                            "JCB",
                            "MASTERCARD",
                            "VISA"
                        ]
                    },
                    "tokenization_specification": {
                        "type": "PAYMENT_GATEWAY",
                        "parameters": {
                            "gateway": "cybersource",
                            "gateway_merchant_id": "mpptiscity1"
                        }
                    }
                }
            ]
        }
    }
}'

4.Payment Connector Create for TaxJar

{
    "connector_type": "tax_processor",
    "connector_name": "taxjar",
    "connector_account_details": {
        "auth_type": "HeaderKey",
        "api_key": "_________" 
    },

    "test_mode": false,
    "disabled": false,
     "payment_methods_enabled": [
        {
            "payment_method": "upi",
            "payment_method_types": [
                {
                    "payment_method_type": "upi_collect",
                    "payment_experience": "redirect_to_url",
                    "accepted_currencies": {
                        "type" : "enable_only",
                        "list": ["INR"]
                    },
                    "accepted_countries": {
                        "type" : "enable_only",
                        "list": ["IN"]
                    },
                    "minimum_amount": 1,
                    "maximum_amount": 68607706,
                    "recurring_enabled": true,
                    "installment_payment_enabled": true
                }
            ]
        }

    ],
    "metadata": {
        "city": "NY",
        "unit": "245"
    },
    "connector_webhook_details": {
        "merchant_secret": "dce1d767-7c28-429c-b0fe-9e0b9e91f962"
    },
    "business_country": "US",
    "business_label": "food"
}
  1. Payment Create
{
    "amount": 2000,
    "currency": "USD",
    "confirm": false,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "customer_id": "StripeCustomer",
    "email": "guest@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+1",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://google.com",
    "shipping_cost": 500,
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "DE",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi@gmail.com"
    },
    "order_details": [
        {
            "product_name": "Apple iphone 15",
            "quantity": 1,
            "amount": 2000,
            "account_name": "transaction_processing",
            "product_id": "1",
            "product_tax_code": "23"
        }
    ],
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {
        "udf1": "value1",
        "new_customer": "true",
        "login_date": "2019-09-10T10:11:12Z"
    }
}
  1. Update business_profile
curl --location 'http://localhost:8080/account/merchant_1725543554/business_profile/{pro____}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: test_admin' \
--data '{
    "tax_connector_id": "{mca_____}",
    "is_tax_connector_enabled": true
}'
  1. Create session Token
curl --location 'http://localhost:8080/payments/session_tokens' \
--header 'Content-Type: application/json' \
--header 'api-key: pk_dev_85f56ada7b2f4ffab21fe0dc214a0d75' \
--data '{
    "payment_id": "pay_PNd6JEhLnwe6q7K5LKJ0",
    "wallets": [],
    "client_secret": "pay_PNd6JEhLnwe6q7K5LKJ0_secret_BPT9z1RBmCFQJVvAGJJ2"
}'
  1. List Payment Methods
curl --location 'http://localhost:8080/account/payment_methods?client_secret={}' \
--header 'Accept: application/json' \
--header 'api-key: {pk_dev_}'
curl --location 'http://localhost:8080/payments/pay_PNd6JEhLnwe6q7K5LKJ0/calculate_tax' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: {pk_dev}' \
--data-raw '{
    "client_secret": "{}",
    "shipping": {
        "address": {
            "line1": "1335 E 103rd St",
            "line2": " Street",
            "line3": " Street",
            "city": "Los Angeles",
            "state": "California",
            "zip": "90002",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi@gmail.com"
    },
    "payment_method_type" : "klarna"
}'

Response

{
    "payment_id": "pay_VrokolZqMjCbLcmj0G9w",
    "net_amount": 4190,
    "order_tax_amount": 190,
    "shipping_cost": 1000
}

confirm the payment

curl --location 'http://localhost:8080/payments/pay_VrokolZqMjCbLcmj0G9w/confirm' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: _____' \
--data ' {
     "payment_method": "wallet",
     "payment_method_type": "google_pay",
     "payment_method_data": {
        "wallet": {
            "google_pay": {
                "description": "Visa •••• 1111",
                "tokenization_data": {
    "type": "PAYMENT_GATEWAY",
    "token": "{____},
                "type": "CARD",
                "info": {
                    "card_network": "VISA",
                    "card_details": "1111"
                }
            }
        }
    }
 }'

Response:

{
    "payment_id": "pay_VrokolZqMjCbLcmj0G9w",
    "merchant_id": "merchant_1726144591",
    "status": "processing",
    "amount": 3000,
    "net_amount": 4190,
    "amount_capturable": 0,
    "amount_received": null,
    "connector": "cybersource",
    "client_secret": "pay_VrokolZqMjCbLcmj0G9w_secret_v286MBXfhNqRsqS4ShQv",
    "created": "2024-09-12T13:20:44.558Z",
    "currency": "USD",
    "customer_id": "StripeCustomer",
    "customer": {
        "id": "StripeCustomer",
        "name": "John Doe",
        "email": "guest@example.com",
        "phone": "999999999",
        "phone_country_code": "+1"
    },
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "wallet",
    "payment_method_data": {
        "wallet": {},
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "Los Angeles",
            "country": "US",
            "line1": "1335 E 103rd St",
            "line2": " Street",
            "line3": " Street",
            "zip": "90002",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi@gmail.com"
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "California",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi@gmail.com"
    },
    "order_details": [
        {
            "brand": null,
            "amount": 2000,
            "category": null,
            "quantity": 1,
            "product_id": "1",
            "product_name": "Apple iphone 15",
            "product_type": null,
            "sub_category": null,
            "product_img_link": null,
            "product_tax_code": "23",
            "requires_shipping": null
        }
    ],
    "email": "guest@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "return_url": "https://google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "google_pay",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": false,
    "connector_transaction_id": "7261472624676565903955",
    "frm_message": null,
    "metadata": {
        "udf1": "value1",
        "login_date": "2019-09-10T10:11:12Z",
        "new_customer": "true"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "7261472624676565903955",
    "payment_link": null,
    "profile_id": "pro_PfgRP37xf1ep9CdyoD97",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_6ALs5depWTfpgk5mkNSs",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2024-09-12T13:35:44.558Z",
    "fingerprint": null,
    "browser_info": {
        "language": null,
        "time_zone": null,
        "ip_address": "::1",
        "user_agent": null,
        "color_depth": null,
        "java_enabled": null,
        "screen_width": null,
        "accept_header": null,
        "screen_height": null,
        "java_script_enabled": null
    },
    "payment_method_id": null,
    "payment_method_status": null,
    "updated": "2024-09-12T13:21:03.170Z",
    "charges": null,
    "frm_metadata": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": 190
}

In response check for "order_tax_amount"

Checklist

  • I formatted the code cargo +nightly fmt --all
  • I addressed lints thrown by cargo clippy
  • I reviewed the submitted code
  • I added unit tests for my changes where possible

Copy link

semanticdiff-com bot commented Sep 10, 2024

Review changes with SemanticDiff.

Analyzed 47 of 49 files.

Overall, the semantic diff is 53% smaller than the GitHub diff.

1 files do not contain logic changes.

File Information
Filename Status
migrations/2024-09-10-080050_add_shipping_cost_and_order_tax_amount_to_payment_attempt/down.sql Unsupported file format
migrations/2024-09-10-080050_add_shipping_cost_and_order_tax_amount_to_payment_attempt/up.sql Unsupported file format
✔️ crates/storage_impl/src/lookup.rs 97.44% smaller
✔️ crates/storage_impl/src/payouts/payout_attempt.rs 96.21% smaller
✔️ crates/storage_impl/src/payouts/payouts.rs 96.49% smaller
✔️ crates/storage_impl/src/payments/payment_attempt.rs 74.75% smaller
✔️ crates/storage_impl/src/payments/payment_intent.rs 96.21% smaller
✔️ crates/storage_impl/src/mock_db/payment_attempt.rs Analyzed
✔️ crates/router/tests/payments.rs Analyzed
✔️ crates/router/tests/payments2.rs Analyzed
✔️ crates/router/src/utils/user/sample_data.rs Analyzed
✔️ crates/router/src/types/api.rs Analyzed
✔️ crates/router/src/types/storage/payment_attempt.rs Analyzed
✔️ crates/router/src/types/api/payments.rs 75.3% smaller
✔️ crates/router/src/types/api/payments_v2.rs 78.63% smaller
✔️ crates/router/src/db/address.rs 94.6% smaller
✔️ crates/router/src/db/customers.rs 96.94% smaller
✔️ crates/router/src/db/mandate.rs 96.33% smaller
✔️ crates/router/src/db/payment_method.rs 98.73% smaller
✔️ crates/router/src/db/refund.rs 97.81% smaller
✔️ crates/router/src/db/reverse_lookup.rs 97.77% smaller
✔️ crates/router/src/core/admin.rs 59.56% smaller
✔️ crates/router/src/core/payments.rs Analyzed
✔️ crates/router/src/core/payments/connector_integration_v2_impls.rs Analyzed
✔️ crates/router/src/core/payments/flows.rs Analyzed
✔️ crates/router/src/core/payments/helpers.rs Analyzed
✔️ crates/router/src/core/payments/operations.rs Analyzed
✔️ crates/router/src/core/payments/retry.rs Analyzed
✔️ crates/router/src/core/payments/transformers.rs 40.63% smaller
✔️ crates/router/src/core/payments/operations/payment_confirm.rs Analyzed
✔️ crates/router/src/core/payments/operations/payment_create.rs 4.24% smaller
✔️ crates/router/src/core/payments/operations/payment_update.rs 5.3% smaller
✔️ crates/router/src/core/payments/operations/tax_calculation.rs 4.71% smaller
✔️ crates/router/src/core/payments/flows/session_update_flow.rs No logic changes found
✔️ crates/openapi/src/openapi.rs Analyzed
✔️ crates/openapi/src/openapi_v2.rs Analyzed
✔️ crates/hyperswitch_interfaces/src/api/payments.rs Analyzed
✔️ crates/hyperswitch_interfaces/src/api/payments_v2.rs Analyzed
✔️ crates/hyperswitch_domain_models/src/payments/payment_attempt.rs Analyzed
✔️ crates/hyperswitch_connectors/src/default_implementations.rs 23.38% smaller
✔️ crates/hyperswitch_connectors/src/default_implementations_v2.rs 52.57% smaller
✔️ crates/hyperswitch_connectors/src/connectors/taxjar.rs Analyzed
✔️ crates/diesel_models/src/payment_attempt.rs 11.95% smaller
✔️ crates/diesel_models/src/schema.rs Analyzed
✔️ crates/diesel_models/src/schema_v2.rs Analyzed
✔️ crates/diesel_models/src/user/sample_data.rs Analyzed
✔️ crates/api_models/src/payments.rs 11.11% smaller
✔️ api-reference-v2/openapi_spec.json 1.01% smaller
✔️ api-reference/openapi_spec.json 1.42% smaller

@hyperswitch-bot hyperswitch-bot bot added the M-database-changes Metadata: This PR involves database schema changes label Sep 10, 2024
@hyperswitch-bot hyperswitch-bot bot added the M-api-contract-changes Metadata: This PR involves API contract changes label Sep 10, 2024
@swangi-kumari swangi-kumari changed the title refactor(core): update tax response refactor(core) : Update shipping_cost and order_tax_amount to net_amount of payment_attempt Sep 11, 2024
@swangi-kumari swangi-kumari marked this pull request as ready for review September 11, 2024 06:34
@swangi-kumari swangi-kumari requested review from a team as code owners September 11, 2024 06:34
@swangi-kumari swangi-kumari self-assigned this Sep 11, 2024
@swangi-kumari swangi-kumari added A-core Area: Core flows C-refactor Category: Refactor labels Sep 11, 2024
@swangi-kumari swangi-kumari changed the title refactor(core) : Update shipping_cost and order_tax_amount to net_amount of payment_attempt refactor(core): Update shipping_cost and order_tax_amount to net_amount of payment_attempt Sep 11, 2024
@swangi-kumari swangi-kumari requested a review from a team as a code owner September 11, 2024 07:45
@@ -1278,6 +1278,22 @@ impl<F: Clone> UpdateTracker<F, PaymentData<F>, api::PaymentsRequest> for Paymen
None => (None, None, None),
};

let shipping_cost = payment_data.payment_intent.shipping_cost;

let pmt_order_tax_amount = payment_data
Copy link
Member

@Narayanbhat166 Narayanbhat166 Sep 11, 2024

Choose a reason for hiding this comment

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

here you should check if the payment method type that is passed in the confirm request is the same as the one that was used when calculating the tax, only then consider this tax amount

pub mod setup_mandate_flow;
pub mod tax_calculation_flow;
Copy link
Member

Choose a reason for hiding this comment

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

can you delete this file?

Copy link
Contributor Author

@swangi-kumari swangi-kumari Sep 11, 2024

Choose a reason for hiding this comment

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

this file does not exist, as I have renamed the file name from tax_calculation_flow.rs to session_update_flow.rs

@@ -571,6 +571,8 @@ pub fn make_new_payment_attempt(
customer_acceptance: Default::default(),
profile_id: old_payment_attempt.profile_id,
organization_id: old_payment_attempt.organization_id,
shipping_cost: old_payment_attempt.shipping_cost,
order_tax_amount: old_payment_attempt.order_tax_amount,
Copy link
Member

Choose a reason for hiding this comment

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

This should be set to None right? This will be dependent on the payment method that will be chosen. This would be updated later in the update trackers

Ok(services::ApplicationResponse::JsonWithHeaders((
Self { net_amount: amount },
Self {
net_amount: amount,
Copy link
Member

Choose a reason for hiding this comment

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

do we need to show net amount here? @SamraatBansal @jarnura I think this will be confusing because this would reflect the net_amount field that we already have in the payment attempt. But this is just a derived field sent in the response. Net amount can be calculated derived as well where this api is consumed. Let me know your thoughts

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We have decided to keep it as net_amount .
cc- @Narayanbhat166 @jarnura

.payment_intent
.skip_external_tax_calculation
.unwrap_or(false);
if is_tax_connector_enabled && !skip_external_tax_calculation {
*should_continue_confirm_transaction = false;
Copy link
Member

Choose a reason for hiding this comment

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

why are we setting this to false?

Narayanbhat166
Narayanbhat166 previously approved these changes Sep 12, 2024
Copy link
Member

@Narayanbhat166 Narayanbhat166 left a comment

Choose a reason for hiding this comment

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

We should also send order tax amount in the payments response

Copy link
Contributor

@deepanshu-iiitu deepanshu-iiitu left a comment

Choose a reason for hiding this comment

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

approving on behalf of connector

Narayanbhat166
Narayanbhat166 previously approved these changes Sep 12, 2024
@Narayanbhat166
Copy link
Member

@SamraatBansal I have a doubt, when calling tax jar in payments create, after calculating the tax amount, should we update the net amount in the response and send?

Copy link
Contributor

@apoorvdixit88 apoorvdixit88 left a comment

Choose a reason for hiding this comment

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

Dashboard changes are fine

@Gnanasundari24 Gnanasundari24 added this pull request to the merge queue Sep 12, 2024
Merged via the queue into main with commit 840609a Sep 12, 2024
14 checks passed
@Gnanasundari24 Gnanasundari24 deleted the tax-confirm branch September 12, 2024 17:43
pixincreate added a commit that referenced this pull request Sep 13, 2024
* 'main' of github.com:juspay/hyperswitch: (51 commits)
  feat(connector): [DEUTSCHEBANK] Integrate SEPA Payments (#5826)
  feat(payments_v2): payment intent diesel and domain models changes v2 (#5783)
  feat(connector): [Fiuu] ADD Wasm Configs (#5874)
  chore(version): 2024.09.13.0
  refactor(core): Update shipping_cost and order_tax_amount to net_amount of payment_attempt (#5844)
  refactor: return optional request body from build_request_v2 in ConnectorIntegrationV2 trait (#5865)
  feat(refunds): Refunds aggregate api (#5795)
  refactor: handle redirections for iframed content (#5591)
  refactor(payment_links): Update API contract for dynamic transaction details and upgrade UI (#5849)
  fix(router): add payment_method check in `get_mandate_type` (#5828)
  fix(connector): [ZSL] compare consr_paid_amt with the total amount for identifying partial payments (#5873)
  feat(connector): [Novalnet] add Payment flows for cards (#5726)
  chore(version): 2024.09.12.0
  fix(router): return `collect_billing_details_from_wallet_connector` if `always_collect_billing_details_from_wallet_connector ` is false in merchant payment method list (#5854)
  feat(opensearch): add profile_id and organization_id to /search APIs (#5705)
  build(deps): bump `sqlx` to `0.8.2` (#5859)
  refactor: Remove unwanted commented lines (#5851)
  feat(payments): add support for profile aggregates (#5845)
  Feat(connector): [Fiuu] Add DuitNow/FPX PaymentMethod (#5841)
  chore: remove Connectors enum dependency from ConnectorIntegrationV2 trait (#5840)
  ...
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-core Area: Core flows C-refactor Category: Refactor M-api-contract-changes Metadata: This PR involves API contract changes M-database-changes Metadata: This PR involves database schema changes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants