Release Notes

Released: 08.10.2018

Fixed

  • Fixed an issue with AdditionalInfo fields. If additional information is provided in the body of an Available call, and then equivalent data is also provided in the Authorize call, then the later overwrites the earlier information correctly.
  • Fixed an error where a Refund call would sometimes not reach the back-end, despite getting a Successful response from eCom
  • Fixed logging timestamps for Refund calls.

Changed

  • The description of the "customerIndividualScore" field was updated for clarification: accepts a number from -10000 to 10000 or a single case-insensitive letter from 'a' to 'z'.
  • The description of the "birthDate" field was updated: the suggested format is 'YYYY-MM-DD'.

Released: 27.09.2018

Fixed

  • eCom now returns the error 400.002 "Value is required" if Installment profile number is missing

Released: 05.09.2018

Added

  • eCom now supports custom payment method descriptions as returned by Available. The following can be customized:
    - Payment method title
    - Payment method tagline (short description)
    - Payment method logo

Fixed

  • eCom now returns the error 400.002 "Value is required" if a required enum element is missing, and 400.003 "Value out of range" if the value is incorrect.
  • Fixed a bug where under certain circumstances, partial captures would not update the balance of a reservation (leading to the total Capture amount potentially exceeding the Authorize amount).
  • Fixed a bug where an Authorize call with no order items would return a Reservation ID consisting of all zeroes. Such a call now returns a valid Reservation ID, but fails on a full Capture with an empty body. (If no order items are included in the Authorize call, they must be included in the Capture call.)
  • Fixed a bug where new installment profiles for existing clients were not showing up correctly, if they used previously existing profile numbers.

Changed

  • eCom now accepts a Cancellation call with an empty body, or where CancellationDetails is null, and treats it as a full order cancellation.

Released: 23.08.2018

Added

  • The Authorize call now validates the minimum length of Direct Debit information (BankAccount and BankCode).
  • For an Available call, if payment type "Account" (Flexible Part Payment) is available, eCom now returns the minimum payment amount along with other relevant information.The following information about installments is returned: installment profile number, order amount, startup fee, monthly fee, interest rate, and the URL of the full terms & conditions.
  • eCom now returns 'transactionReference' info in Order Management calls. This is a unique identifier of individual transactions within the same order. It maps to transaction IDs in external Payment System Provider ledgers.

Fixed

  • eCom application logs now correctly store all information about API calls and responses.
  • Spelling mistake in Available Payment Method response has been fixed
  • eCom now returns the error 400.004 "Value format is incorrect" if a comma is used as the decimal separator.
  • eCom now returns the error 400.156 "The country code is not valid for this customer" if the country code in the delivery address is invalid.
  • eCom now returns the error 200.908 "Bank details invalid" for invalid Danish bank account numbers.
  • eCom now returns the error 400.002 "Value is required" if a required parameter value is not specified.
  • When eCom returns an error message for a missing order amount in a full Capture, the error message now correctly states the fieldReference value (telling you which parameter is missing).
  • eCom now supports IPv6.

Released: 13.07.2018

Added

  • Developer Sandbox now has a mock Risk Engine attached. This Risk Engine is currently configured to approve transactions based on triggers in customer email addresses.

Fixed

  • eCom now correctly forwards Profile Tracking IDs (used for fraud prevention) to the backend system.
  • eCom now correctly handles Risk Engine responses that include updated customer details (Customer Lookup).
  • eCom now returns correct error codes for too short bank account number and bank SWIFT or BIC code (400.006). Previously this returned the generic code 400.000.

Changed

  • eCom's handling of Campaign Invoices improved: if different campaign numbers are provided at different stages of an order, the newest one is sent to the backend system. If a campaign number is not provided in an API call, but one was provided earlier for this order, the most recently provided campaign number is sent to the backend system.

Released: 27.06.2018

Fixed

  • Broken request body now returns the correct error 400.001
  • Previously, birthDate was required for B2B customers (who are legal entities and do not have a birth date). This is now optional.

Changed

  • Database field alignments with the master system.
  • The description of the parameter CustomerCardSince was updated to clarify its meaning: the date on which the loyalty card was issued to the customer.
  • Message queue configured to prefetch 1 message at a time. This was done to improve message queue stability.
  • If an order in the Netherlands has a delivery address different from the customer's billing address, the IP address and birth date provided in the delivery info are not validated now. This info may be copied from the customer object, as the Dutch Core required both Customer and deliveryCustomer data to be provided.
  • Birthdate is now a required field for customers in Switzerland, and optional for customers in Germany. Previously, it was required in Germany and optional in Switzerland.

Released: 14.06.2018

Fixed

  • Fixed a bug where successful calls had no outcome specified.

Changed

  • Changed error code mapping to respond with 'Contract already exists' instead of 'Negative customer score' where appropriate.
  • Changed the response structure for ApplyForAccountCredit and AddEvent, to allow responses with value 200for risk check messages.
  • Added SSN validation for Nordics countries for the ApplyForAccountCredit endpoint.

Released: 12.06.2018

Added

  • Returning a 'Read More' link with a Part Payment method in Available Payment Methods response. This leads to a customer-facing explanation of the payment method.
  • Added functionality to return a Customer object with the Lookup feature.
  • Work on the shadow environment to improve release quality verification.

Fixed

  • Fixed a bug where IP Address was validated even if it wasn't present in the request.
  • Returning a correct response message in case of a full refund, where a partial refund is done beforehand.
  • Fixed a bug where an Authorize payment call failed when DirectDebit information was not provided. As a prerequisite, the customer had a contract already in place with AfterPay.
  • Fixed a bug where an Authorize payment call failed when multiple threads were processing at the same time.

Changed

  • Improved validation rules for ValidateBankAccount endpoint.

Released: 29.05.2018

Added

  • Added more flexibility to Available Payment Methods calls, which now allow a successful response based on the basket value only.
  • Added minimum-to-pay information to the Available Payment Methods response.

Fixed

  • Fixed a bug where the provided postal code was not added to the external request.
  • Fixed account profile mappings for different markets.

Changed

  • Database field alignments with the master system.

Released: 08.05.2018

Added

  • Type field added to orderItem, to distinguish between shipping fees, discounts, digital goods, and regular order items.
  • Adding error messages in Capture when an order is not found.
  • Adding master system support for conversationLanguage.
  • Added type and VAT amount fields to GetOrderResponse.

Fixed

  • Fixed a bug where the customer number wasn't provided in the response.
  • Fixed a bug where a correct response wasn't provided by the eCom API.
  • Fixed a bug where requests started failing due to order item type not being specified.
  • Fixed a bug where an incorrect response was provided after a failure in an external service.

Changed

  • Database field updates to align with the master system.
  • Risk engine response alignment for Netherlands.
  • Mapping Risk Provider responses for Customer Limit Reached to an Afterpay error code.
  • Improved validation for IBAN and SWIFT validators in eCom ValidateBankAccount.
  • Removed an unnecessary field in the POCO classes.
  • Aligned actionCodes for responses.
  • Removed discount amount from order and order line objects, as they are not necessary after the introduction of Order Item Types.

Released: 19.04.2018

Added

  • customerAccountId has been added to CheckoutCustomer table

Fixed

  • Incorrect text of 400.102 message has been fixed

Changed

  • Salutation has been changed to optional for DE, AT, CH

Released: 22.03.2018

Changed

  • Response for the AvailablePaymentMethods has been changed

Incident

  • RSS calls not passing in production

Released: 22.03.2018

Added

  • Validation for the bankaccount number in Authorize for DE and AT markets
  • New caching layer for eCommerce
  • Added validation to OrderNumber field not to allow spaces at the end
  • customerNumber has been added to the CustomerLookup
  • "skipExternalSearch" input parameter has been added to Customer lookup
  • X-Idempotency-Key added to the header
  • MerchantId has been added to Void
  • MerchantId has been added to Refund
  • customerAccountId has been added to CheckoutCustomer and DeliveryCustomer

Fixed

  • Delivery customer Email is no longer mandatory
  • OrderNotFound has been replaced with a VoidNotFound message
  • Error when sending in invalid Birthdate
  • MQError message has been replaced with "An error has occurred" message
  • Response for the Authorize payment method has been fixed
  • Error message has been changed for missing salutation in Authorize payment method
  • Error message for missing DeliveryCustomer.Firstname
  • "Cannot deserialize the current JSON" message has been changed to "Cannot deserialize the current JSON. Please compare the JSON implementation with Afterpay documentation."
  • 200.901 errors structure has been changed to look like business errors (400.xxx)

Changed

  • Response for the AvailablePaymentMethods.Installment has been changed
  • Validation ErrorCode has been removed, as it replaced with ResponseCodes constants
  • Customer lookup has been changed to optional in Available Payment Methods and Authorize requests
  • The length of DeliveryPostalPlace has been changed to 100
  • Customer object for the Available payment methods has been changed as optional
  • Customer not found now returns 200.101 instead of 400.099
  • Customer below minimum age will now return 200.001
  • Support Customer lookup without postalcode condition has been changed for Finland
  • Allow authorization without email for a Finnish Fasttrack
  • Allow sending authorization request with amount instead of order lines
  • "Address not found" message has been replaced with "Customer not found"

Released: 07.03.2018

Changed

  • Validation ErrorCode has been removed, as it replaced with ResponseCodes constants
  • Support Customer lookup without postalcode condition has been changed for Finland
  • Allow authorization without email for a Finnish Fasttrack
  • Prefixes and white-spaces will be now removed from numbers for Norway

Released: 19.02.2018

Added

  • Mock AFS riskprovider has been added

Released: 10.01.2018

Added

  • Client setting has been added to enable Customer lookup in Available Payment Methods and Authorize requests

Fixed

  • Mapping of customerNumber has been fixed
  • Mappings for ChannelType has been corrected
  • Using installment plans fixed in Authorize

Changed

  • PostalCode length has been changed to 10
  • Now returning Installment business errors instead of Account business errors
  • Installment related error messages and codes have been unified, 400.144 error code is now returned only for Account payment type
  • Now returning "The grand total of gross unit prices must be positive." error message for error 400.124
  • Customer lookup has been changed to optional in Available Payment Methods and Authorize requests
  • The BankCode and BankAccont are trimmed
  • Now MaxDownPaymentMonths is used, if number of installments is not present in Authorize

Released: 30.11.2017

Fixed

  • Correct 400.XXX error code returned when "Quantity" in Order object is set to null

Changed

  • Limited "careOf" field in Address object to 50 characters

Released: 21.11.2017

Added

  • Added "Read More" links to available installment plans

Fixed

  • Limited field StreetNumberAdditional in Address object to 10 characters
  • Added error message to Authorize response when SSN is missing
  • Unified fieldReferences for error messages
  • Changed Authorize call to return 5 separate error messages instead of one

Changed

  • Relaxed e-mail validation rules

Released: 17.11.2017

Fixed

  • Fixed rounding of price data

Released: 10.11.2017

Fixed

  • Corrected error code when sending in empty checkoutId to Authorize request
  • Technical refactoring

Released: 09.11.2017

Added

  • MerchantImageUrl added to the Order
  • Consolidated invoice added
  • Refunding with a negative total amount should not be allowed
  • Field references added to MissingValue, IncorrectFormat and ValueOutOfLegalRange error messages

Fixed

  • Now returning 400.xxx error, if the order cannot be cancelled because the order is already partially or fully capured
  • Now returning 400.xxx error, if the order cannot be cancelled because the balance of the linked order is 0
  • Now returning 400.xxx error, if the order cannot be cancelled because the specified capture has higher amount than the reserved amount
  • Now returning 400.002 error, if the Identification code is not specified
  • Rating failure response fixed
  • First name in Authorize request is not replaced with empty string
  • Missing identification code error message fixed
  • Missing email returns 400.002 (MissingValue) error code instead of 400.004 (InvalidFormat)
  • Email validation rules changed, single digit domain names are allowed

Changed

  • Payment methods response updated to respond more detailed installment info
  • Gross and Net amount requirements and calculation unified across requests
  • Performance improvements
  • 404 error responses are removed
  • Whitespaces are not causing validation errors for Identification numbers

Released: 26.10.2017

Added

  • Added new configuration for future Risk Providers
  • Authentication handling for new risk provider
  • Implementation of Authorize call for new risk provider
  • Exposing field length requirements for Developers Portal
  • Allowing negative amount Authorize calls for payment type "ConsolidatedInvoice"
  • Allowing full capture for negative authorizations, when payment type is "ConsolidatedInvoice"
  • Implemented birth date extraction from SSN in Sweden
  • Support for decimals in FastTrack Services AddEventToAccount quantity
  • Changed the implementation of invoice date mappings

Fixed

  • Showing fieldReference in FastTrack Services ApplyForAccountCredit when customer.firstName is longer than 50 characters
  • Returning 400.XXX error when order cancellation fails
  • Now returning business error when using installment profile number which doesn't exist
  • Now returning correct error message when using installment profile which doesn't exist
  • Allowing no body to be sent into VoidAuthorizationRequest

Changed

  • Made mobile phone field optional in Authorize
  • Made mobile phone field optional in AvailablePaymentMethods
  • Technical refactoring

Released: 01.09.2017

Changed

  • Technical refactoring

Released: 29.08.2017

Fixed

  • Refunding invoice when customer already paid
  • Updated integration with risk providers

Changed

  • Provide additional metrics for monitoring

Released: 18.08.2017

Fixed

  • Restricting sending enum values
  • Wrong error codes in authorize method fixed

Changed

  • Changed how "CreditNoteNumber" is generated during Refund operation

Released: 15.08.2017

Added

  • New field "ConsolidatedInvoiceAllowed" added to the payment method "ConsolidatedInvoice"

Fixed

  • Consolidated Invoice created if payment type is "ConsolidatedInvoice"
  • 400.127 error code instead of "RefundAmountTooHigh"
  • Refunding regular invoice with total negative amount is not allowed
  • Length validation for "DirectDebitSwift" field
  • Length validation for "ItemDescription" field
  • "System.NullReferenceException" in RSS21 risk provider fixed
  • REST API returns correct header on incorrect request
  • "ChannelType" errors in OrderRisk fixed

Changed

  • Handling of international data in JSON REST API

Released: 11.07.2017

Added

  • "Voucher number" field added to Refund

Released: 28.06.2017

Changed

  • Unified behavior of TotalNetAmount for installments and invoices
  • Installment period is now optional

Released: 15.06.2017

Fixed

  • Fixed a case where Authorize Request received an empty Response

Changed

  • Increased InvoiceNo length in CaptureRequest to 19
  • Updated developer portal with new error codes
  • Removed ssn from getOrder response
  • customerLookup now returns textual representation of country code
  • The way system errors are logged
  • The length of ParentTransactionReference is now 50 in authorize, available, capture, void and refund requests

Released: 08.06.2017

Added

  • Implement new risk provider

Fixed

  • InstallmentPlans now return an error if amount is 0
  • Finnish SSN validation failed with small letters
  • A memory leak in eCommerceWebApi
  • Available payment methods now follow account profile usage
  • Available installment plans don't take the amount into account

Changed

  • Invalid risk provider credentials error now returns 500
  • Behavior of 400.099 that it is always BusinessError
  • Updated Developer portal tutorial page with new response code structures
  • Allow negative grossUnitPrice on capture for consolidated invoice

Released: 22.05.2017

Fixed

  • Fixed usage of InstallmentDetails
  • Fixed null reference exception in PaymentRequest

Changed

  • Changed branching strategy

Released: 20.03.2017

Added

  • "directDebit" field to AvailablePaymentMethodResponse indicating when Invoice is available with Direct Debit
  • Functionalities for sending error messages to Slack
  • New Relic monitoring
  • Sending Google Analytics data to Phoenix
  • Sanoma ledger functionality
  • ProductType to GetAvailablePaymentMethods
  • ProductType to AuthorizePayment
  • ProductType to Capture
  • ProductType to Void
  • "additionaData" field in AuthorizePayment
  • Costcenter to CaptureRequest
  • Relocated CustomerIndividualScore to CustomerRisk
  • MarketPlace element to AvailablePaymentMethods additionalData element
  • AdditionalData element to AvailablePaymentMethods
  • Age validation for CustomerCheck requests
  • InvoiceDate to CaptureRequest.References
  • Increased logging for Update database updater
  • partnerData to additional data in availablePaymentMethods
  • partnerData to additional data in authorizePayments
  • 400.002 (MissingValue) customer facing message
  • 400.003 (ValueOutOfLegalRange) customer facing message
  • 400.004 (IncorrectFormat) customer facing message
  • parentTransactionRefelence to Order objec
  • marketPlaceSellerId to orderItem
  • customerIndividualScire to orderRisk
  • ParentTransactionReference to Authorize request
  • ParentTransactionReference to Available Payments request
  • ParentTransactionReference to Refund request
  • 400.101 (with field reference order.netAmount) is now returned if netAmount does not match quantity * netUnitPrice over orderLines
  • 400.102 (with field reference order.grossAmount) is now returned if grossAmount does not match quantity * grossUnitPrice over orderLines
  • 400.100 (with field reference order.orderNumber) is now returned if "order number is already in use for client"
  • 400.103 (with field reference customer.customerNumber) is now returned if customer number differs from CustomerNo in checkout
  • 400.109 (with field reference contractID) is now returned when invalid contract id is given
  • 400.115 (with field reference none) is now returned when reservation is not found
  • 400.131 (with field reference none) is now returned when order is not found
  • 400.132 (with field reference none) is now returned when capture is not found
  • 400.117 (with field reference none) is now returned if Full Capture can not be done in full amount
  • 400.120 (with field reference none) is now returned if Invoice has already been created
  • 400.119 (with field reference orderItems) is now returned if no order items are provided when capture number is set
  • 400.108 (with field reference payment.type) is now returned if invalid payment method is selected
  • 400.111 (with field reference none) is now returned when installment profile plans are missing
  • 400.112 (field reference: none) is now returned when monthly installment amount is invalid
  • 400.113 (field reference: none) is now returned when duration is sent as amount
  • 400.114 (field reference: payment.account.AccountProfileNo) is now returned when invalid AccountProfileNo is sent
  • "readMore"field in installmentInfo response
  • partnerData field added to additionalData

Fixed

  • Error on high volumes of requests (@100/sek per client)
  • Performance improvements
  • Error if no CountryCode present in AvailablePaymentMethods request
  • System.NullReferenceException in GetRiskProvider
  • Exception in AuthorizePayment when calculatingTax fields
  • CreateContract now returns Error 500 instead of SystemError
  • Finnish SSN validation updated to check for length
  • DeleteShippingDetails returned incorrect response code when capture was not found
  • GetAllShipments returned incorrect response code when capture was not found
  • GetShipments returned incorrect response code when capture was not found
  • OrderManagementOperationBase returned "InvoiceLinesMissing" instead of 400.xxx
  • "OrderItemsMissingResponse" code instead of 400.xxx
  • NotImplementedException in Denmark for Required Customer field
  • Forward contractDate and InvoiceDate to proper places in backend system
  • DirectDebit does not return error anymore when client settings allow it without contract
  • Updated Developer Portal to reflect TotalGrossAmounnt and grossUnitPrice requirement on OrderItems
  • Empty LookupCustomer request give Internal Server Error
  • Authorize no longer returns [] when outcome is rejected
  • No access to service no longer gives code 0 but now gives 401

Changed

  • Internal customer lookup logic for all markets
  • Updated all customer-facing messages
  • Behavior of Bank detail saving for DirectDebit Agreements
  • Payment method not supported responds now with 400 error
  • Customer not found in external database now forwards the error from external system
  • Wrong payment method returns now a 400 error
  • When grossUnitPrice is missing in partial capture a 400 error is returned
  • If contract already exists in system 400.136 error is now returned
  • If address is not found 400.135 error is now returned
  • If technical timeout occurs, a 500 error is returned
  • Empty request now gets 400.001 response code
  • "phoneNumber" field changed to "mobilePhone"
  • Remove SSN from customerLookup response
  • If order is not found a 400.131 error is returned
  • If customer is not found internally using identification number the "address not found" error will be returned
  • Mapping of Error Codes
  • Currency, Country and Language enums
  • Rounding for AvailablePaymentMethodsResponse to use only 2 decimal places
  • StreetNumberAdditional length changed from 5 to 50
  • How system logs different errors
  • CustomerCategory behavior to facilitate "Company" value
  • Allow empty GroupId in OrderItem
  • Checkout process when customer is not found
  • Naming of fields in ValidateBankAccount (bankCode, bankAccount)
  • Payment items are now required for debit invoice
  • Rename invoiceCampaignNumber to campaignNumber in CaptureReques
  • Rename merchantTransactionId to parentTransactionId in CaptureRequest
  • Relocated CustomerIndividualScore to CustomerRisk
  • Removed IntermediarId from AdditionalData
  • DevPortal updated with new eCommerceServices.Contracts nuspec package
  • Made payment items required for partial refund
  • Allow full refund with empty payment items
  • Updated response codes for reservation not found
  • Update response code for reservation missing checkout
  • Updated response code for capture number not specified
  • Updated response code for positive gross or net unit price
  • Update response code for reservation mismatch
  • Update response code for refund amount is higher than invoice balance
  • Updated response code for invoice(s) not found
  • Updates for void response codes and automated tests
  • Updated response codes for getCapture
  • Update response code for invoice not found
  • Updated response code for missing order items
  • Order number missing response is now 400.002
  • PhoneNumber field changed to MobilePhone
  • IdentificationNumber has been removed from customer lookup response
  • Cleanup job for non-captured reservations is now configurable between 30-1095 instead of fixed 90 days
  • Make payment items required for partial refund
  • Allow full refund with empty payment items

Released: 25.10.2016

Added

  • Deployment of new AfterPay API