Welcome to version 3 of the Intershop PayPal Complete Payments Service Connector.
This connector is a complete, modernized rewrite of the previous “PayPal Service Connector” and integrates with PayPal using the PayPal REST APIs for payment operations and merchant onboarding.
Unlike the previous connector generation, this solution is explicitly designed for use within the PayPal Partner Program. Intershop provides this integration in the role of a PayPal technology partner, enabling merchants to onboard and use PayPal via a partner‑managed setup flow. Correspondingly, the connector replaces the former PayPal Service Connector 8, which relied on the legacy PayPal Classic API.
The PPCP Connector implements Intershop’s Payment Framework and exposes the latest PayPal payment, onboarding, and account‑management capabilities for Intershop Commerce Management projects.
This release note outlines the version’s scope, dependencies, configuration, customization options, supported features, and known limitations.
This glossary describes the terms used in this document:
Term | Description |
|---|---|
PPCP Connector | PayPal Complete Payments Service Connector |
ISU | Integrated Sign Up |
ICM | Intershop Commerce Management |
PSP | Payment Service Provider |
PCI-DSS | Payment Card Industry Data Security Standard |
Payment Method | A payment method describes the way money is transferred from one party to another |
Payment Instrument | A payment instrument is the object that holds the data representing the user's bank account. The data depend on the payment method used |
Payment | A payment is the actual object that facilitates a transaction via a specific payment method (using a payment instrument) |
Intershop CM | Intershop PWA | PayPal Complete Payments Connector | PayPal Server SDK |
|---|---|---|---|
12.4.0+ | 9.0.0+ | 2.1.0+ | 1.1.0 |
12.6.1+ / 13.5.3+ / 14.2.2+ | 10.0.0+ | 3.0.2+ | 1.1.0 |
Used PayPal REST APIs:
Orders v2
Partner Referrals v1 & v2
Webhooks Management v1
The table below provides information about the cartridges included in the package. Not all of these cartridges are required.
Cartridge | Description | Required |
|---|---|---|
| Shared business logic, service configuration abstractions reused across layers | Yes |
| Storefront-facing checkout integration, payment orchestration, redirect handling | Yes |
| Extension for the basket REST API | Yes |
| Commerce Management integration (service definitions, ISU onboarding UI hooks) | Yes |
| Webhook receiver & processing | Yes |
| Application suite registering the cartridges in the Component Framework | Yes |
| Feature cartridge enabling the connector in an ICM AS setup | Yes |
| Demonstration feature (bundles feature cartridges with sample config) | No |
| Sample configuration for demonstration | No |
The PayPal Complete Payments Service Connector can be used for the following application types:
Application Type | Application Type ID | Compatible | Description |
|---|---|---|---|
Progressive Web App |
| ✅ | B2C / B2B via REST |
The customization image for the connector is available in Intershop's public repository.
Add the customization according to standard Intershop Helm deployment patterns:
Add the customization image reference.
Append the feature cartridge ft_ppcp to CARTRIDGE_LIST (see Concept - Customization - Deployment - ICM 11+).
Provide required environment variables.
Example (simplified excerpt):
icm-as:
customizations:
paypal-complete-payments:
repository: intershophub/icm-as-customization-paypal-complete-payments:<TAG>
...
environment:
CARTRIDGE_LIST: "ft_icm_as ft_ppcp"
# PayPal configuration (examples for sandbox - replace "sandbox" by "production" for a live environment)
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_CLIENTID: "<sandbox-client-id>"
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_SECRET: "<sandbox-secret>"
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_WEBHOOKID: "<pre-registered-webhook-id>"
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_ATTRIBUTIONID: "<intershop-bn-code>"
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_PARTNERMERCHANTID: "<intershop-partner-id>"
The examples in the setup section above demonstrate how to provide PayPal credentials via environment variables.
While this approach is suitable for local development and temporary test environments, it must not be used in Integration, UAT, or Production environments, as credentials would otherwise be stored in Git repositories!
For managed environments, Intershop recommends storing PayPal credentials in Azure Key Vault and synchronizing them to Kubernetes using the External Secrets Operator.
This setup provides:
No credentials committed to Git repositories
Centralized, environment-specific secret management
Automatic synchronization and refresh
Support for secret rotation without changing Helm values
For background information about the secret management architecture, see Guide - Secret Store Process.
The PPCP Connector supports two credential sets:
SANDBOX credentials
PRODUCTION credentials
The active mode (SANDBOX or PRODUCTION) is configured at runtime in the ICM back office within the PayPal Common Configuration service . Depending on this setting, the connector reads the corresponding environment variables.
Therefore, the required credentials must be available in the respective Kubernetes environment.
Environment Type | Recommended Setup |
|---|---|
Local Development | SANDBOX only |
Integration | SANDBOX only |
UAT | SANDBOX only (recommended) or both |
Production (Edit/Live) | Both SANDBOX and PRODUCTION |
For security reasons, it is strongly recommended to provide only SANDBOX credentials in all non-production environments.
This prevents accidental switching to PRODUCTION mode and unintended execution of live transactions.
In UAT and Production environments, providing both credential sets allows switching between SANDBOX and PRODUCTION without redeployment.
For secure handling of PayPal credentials, you need to:
Store credentials in Azure Key Vault
Synchronize secrets to Kubernetes
Inject secrets via Helm
These steps are described in more detail below.
Create the required secrets in the environment-specific Azure Key Vault.
Required SANDBOX Secrets:
ppcp-sandbox-clientid
ppcp-sandbox-secret
ppcp-sandbox-webhookid
ppcp-sandbox-attributionid
ppcp-sandbox-partnermerchantid
Required PRODUCTION Secrets:
ppcp-production-clientid
ppcp-production-secret
ppcp-production-webhookid
ppcp-production-attributionid
ppcp-production-partnermerchantid
The secret names must match the remoteRef.key values used in the ExternalSecret configuration.
Create an ExternalSecret resource in your environment repository (e.g., environments/<env>/icm/secret-store.yaml) and add this resource to your kustomization.yaml.
Example (secret-store.yaml):
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: ppcp-secret
namespace: ${namespace}
spec:
refreshInterval: 15m
secretStoreRef:
name: ${secret_store_eso_sest_name}
kind: SecretStore
target:
name: ppcp-secret
creationPolicy: Owner
data:
# SANDBOX credentials
- secretKey: ppcp-sandbox-clientid
remoteRef:
key: ppcp-sandbox-clientid
- secretKey: ppcp-sandbox-secret
remoteRef:
key: ppcp-sandbox-secret
- secretKey: ppcp-sandbox-webhookid
remoteRef:
key: ppcp-sandbox-webhookid
- secretKey: ppcp-sandbox-attributionid
remoteRef:
key: ppcp-sandbox-attributionid
- secretKey: ppcp-sandbox-partnermerchantid
remoteRef:
key: ppcp-sandbox-partnermerchantid
# PRODUCTION credentials
- secretKey: ppcp-production-clientid
remoteRef:
key: ppcp-production-clientid
- secretKey: ppcp-production-secret
remoteRef:
key: ppcp-production-secret
- secretKey: ppcp-production-webhookid
remoteRef:
key: ppcp-production-webhookid
- secretKey: ppcp-production-attributionid
remoteRef:
key: ppcp-production-attributionid
- secretKey: ppcp-production-partnermerchantid
remoteRef:
key: ppcp-production-partnermerchantid
Important:
${secret_store_eso_sest_name} references the preconfigured SecretStore for your environment
The resulting Kubernetes Secret (ppcp-secret) is managed automatically and kept in sync with Azure Key Vault.
Instead of defining PayPal credentials directly in the environment section of the Helm deployment, use secretMounts (see GitHub: intershop/hem-charts | Attributes in Section secretMounts).
Example (e.g., icm.yaml):
icm-as:
...
secretMounts:
- secretName: ppcp-secret
key: ppcp-sandbox-clientid
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_CLIENTID
- secretName: ppcp-secret
key: ppcp-sandbox-secret
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_SECRET
- secretName: ppcp-secret
key: ppcp-sandbox-webhookid
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_WEBHOOKID
- secretName: ppcp-secret
key: ppcp-sandbox-attributionid
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_ATTRIBUTIONID
- secretName: ppcp-secret
key: ppcp-sandbox-partnermerchantid
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_PARTNERMERCHANTID
- secretName: ppcp-secret
key: ppcp-production-clientid
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_PRODUCTION_CLIENTID
- secretName: ppcp-secret
key: ppcp-production-secret
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_PRODUCTION_SECRET
- secretName: ppcp-secret
key: ppcp-production-webhookid
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_PRODUCTION_WEBHOOKID
- secretName: ppcp-secret
key: ppcp-production-attributionid
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_PRODUCTION_ATTRIBUTIONID
- secretName: ppcp-secret
key: ppcp-production-partnermerchantid
targetEnv: INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_PRODUCTION_PARTNERMERCHANTID
Ensure that the database and required infrastructure is running.
Mount the customization layer or reference the combined image.
Extend CARTRIDGE_LIST to include ft_ppcp.
Provide PayPal Complete Payments-related environment variables in the appserver service.
Example (simplified excerpt):
services:
customize-paypal-complete-payments:
image: intershophub/icm-as-customization-paypal-complete-payments:<TAG>
volumes:
- customizations:/customizations
...
appserver:
depends_on:
- customize-paypal-complete-payments
...
environment:
CARTRIDGE_LIST: "ft_icm_as ft_ppcp"
# PayPal configuration (examples for sandbox - replace "sandbox" by "production" for a live environment)
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_CLIENTID: "<sandbox-client-id>"
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_SECRET: "<sandbox-secret>"
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_WEBHOOKID: "<pre-registered-webhook-id>"
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_ATTRIBUTIONID: "<intershop-bn-code>"
INTERSHOP_PAYMENT_PAYPAL_CHECKOUT_SANDBOX_PARTNERMERCHANTID: "<intershop-partner-id>"
After startup, the database preparation registers the new payment service(s). Once this process is complete, you can log in to the Intershop Commerce Management and find the PayPal payment services available for use under Services.
In case it is needed to customize the PayPal Complete Payments Connector, you need to create a customization project for the payment connector.
To add the customization image for the connector to your project, add it to the dependencies of your customization, performing the following steps:
Add the dependency in your main build.gradle.kts (example snippet):
val ppcpConnectorVersion: String by project
intershop {
projectConfig {
modules {
register("paypal-complete-payments") {
dependency.set("com.intershop.services.payment_paypal_checkout:paypal-complete-payments:$ppcpConnectorVersion")
image.set("$icmDockerRegistry/icm-as-customization-paypal-complete-payments:$ppcpConnectorVersion")
testImage.set("$icmDockerRegistry/icm-as-customization-paypal-complete-payments:$ppcpConnectorVersion")
}
}
}
}
subprojects {
plugins.withType<JavaPlugin> {
dependencies {
cartridge(platform("com.intershop.services.payment_paypal_checkout:versions:$ppcpConnectorVersion"))
implementation(platform("com.intershop.services.payment_paypal_checkout:versions:$ppcpConnectorVersion"))
}
}
}
Add dependencies to the PayPal feature to your project's feature definition (e.g., ft_myproject/build.gradle.kts):
dependencies {
cartridgeRuntime("com.intershop.icm:ft_icm_as")
cartridgeRuntime("com.intershop.services.payment_paypal_checkout:ft_ppcp")
}
To include the PayPal feature, add your project's feature definition cartridge to your development configuration within your main build.gradle.kts. If you need additional feature cartridges for local development, you can add them here as well.
intershop_docker {
// ... other configuration ...
developmentConfig {
appserverAsContainer = true
cartridgeList.set(setOf("ft_myproject"))
testCartridgeList.set(setOf("ft_ppcp"))
}
}
Define ppcpConnectorVersion in gradle.properties.
... ppcpConnectorVersion = <TAG> ...
Start your application server in development mode:
Use Gradle to manage the server instance by using the command gradlew startAS.
Run gradlew tasks to see available tasks or check for further options.
For details on managing the artifacts, see:
This section outlines the required post-deployment configuration steps.
In general, it is recommended to configure the PayPal Complete Payments service(s) on channel level.
You can enable the payment service either via the UI in the Organization Management (see Cookbook - Payment | Recipe: Enable a Payment Service), or by using DBPrepare. If you choose the DBPrepare option, use the following service definitions.
Service definition ID |
|
Parameter group ID |
|
Localization key for name |
|
Cartridge |
|
Group ID |
|
Service definition ID |
|
Parameter group ID |
|
Localization key for name |
|
Cartridge |
|
Group ID |
|
Service definition ID |
|
Parameter group ID |
|
Localization key for name |
|
Cartridge |
|
Group ID |
|
Service definition ID |
|
Parameter group ID |
|
Localization key for name |
|
Cartridge |
|
Group ID |
|
The UI-based configuration is divided into two sections: one common service configuration used by all payment services for PayPal Complete Payments, and the payment method-specific service configuration.
Note
There can only be one active configuration - preferably on channel level - for the common service. If more than one service is found, a warning is written to the log and the first service from the retrieved list is used. This order may change.
In contrast to other managed services, the configuration cannot be completed within a single creation wizard run-through.
It is recommended to complete the onboarding process before configuring the individual services.
Follow these steps:
Create the managed service for the PayPal common configuration and complete the initial configuration in the Services tab.
Reopen the newly created service and perform the onboarding with PayPal. To do so, go to the Integration tab and click the button Connect a PayPal Account.
Please note that the environment cannot be changed as soon as a PayPal Account is connected to this service, because the account belongs to this environment. To change the value, you need to disconnect and reconnect after changing the environment.
This initiates the onboarding process and you are redirected to PayPal.
Finally, you are redirected and can configure the details of the service. Details about the connected account are shown at the bottom of the page for reference. In the section Pay Later and Messaging, you can toggle the visibility of the Pay Later feature provided by PayPal.
See Cookbook - Payment | Recipe: Enable a Payment Service for detailed instructions on enabling and configuring a payment service.
The table below lists possible settings you can configure for the payment service. Please note that not all of them are available for each service.
Name | Description |
|---|---|
Auto Capture | Toggles automatic capture after successful authorization |
Allow PayPal address update | Enables address updates on the PayPal side (limited in multi-bucket configurations) |
Digital goods | Enables PayPal for digital products |
Transfer Order Details | Basket line-level transmission strategy (see Order Detail Transmission Options) |
3-D Secure | Selection of the rule set to be applied for 3-D Secure outcome evaluation. Possible options are Recommended rules and Advanced rules. |
Advanced 3-D Secure Rules | Only available when Advanced rules is selected for 3-D Secure With this setting, you can define how to handle different authentication outcomes, allowing you to choose when payments are accepted or declined based on issuer responses or authentication results. The available options map to the 3-D Secure authentication response from PayPal as follows: Authentication System Error
Bank Authentication Failed
Buyer Skipped Authentication
Challenge Required
Automatically Passed
Card Not Enrolled
For detailed definitions of the |
Since onboarding and administrative interactions with PayPal are bundled into the PayPal Common Service, relevant information is extracted from the response and preprocessed there. Any errors or restrictions identified are shown in the common service.
You can find the existing localization files for storefront-relevant artifacts here: <IS_SHARE>/system/cartridges/ac_payment_paypal_checkout/release/localizations
For details about localization, see:
Name | Description | Payment Management Options |
|---|---|---|
PayPal | Checkout via Orders API v2 starting from the payment page in the checkout | Capture, Refund (Full/Partial) |
PayPal Express Checkout | Direct shortcut from cart using PayPal buttons | Capture, Refund (Full/Partial) |
PayPal Credit Card | White label PCI-DSS compliant credit card payment option | Capture, Refund (Full/Partial) |
Operation | Description |
|---|---|
Capture | Capture full authorized amount. (Only available if Auto Capture is disabled.) |
Refund | Refund a captured amount (fully or partially). |
Rounding errors can occur when transmitting basket data to a payment service provider. If a PSP’s API expects basket totals (for example, shipping, taxes, and discounts) as values with two decimal places, the sum of these rounded amounts may differ from the original total amount (calculated with higher precision, such as 5 decimals) used for authorization. Even a difference of a single cent can be enough for the PSP to reject the payment.
These rounding issues are typically caused by price calculations involving percentage values, for example:
Converting net prices into gross prices (for instance, when prices are stored as net values in the back office but displayed as gross in the storefront)
Percentage‑based discounts
The e-commerce manager has the following options for submitting order details (basket transmission) to PayPal.
Mode | Behavior | Possible Rounding Issues | Strategy to avoid rounding errors |
|---|---|---|---|
No details | No details besides the order total appear at PayPal. | No | |
Detailed order data | The connector uses most of the PayPal API. Order details appear at PayPal at dedicated places. | Yes | The connector validates the sums using the simplified calculation of the PayPal Orders REST API. If a difference is detected, the mode “No Details” is used in order to allow the customers to complete their order and increase the conversion rate. |
If a basket changes (pricing, items, shipping) after the initial PayPal approval, a re-initiation flow ensures that PayPal has accurate amounts.
The connector supports merchant onboarding via Partner Referrals API v2. To connect the service to a PayPal account, merchants follow the steps described in Onboarding.
In order to react to permission changes on PayPal side, ICM listens to the following events:
Supported events | Processing |
|---|---|
| Disconnects merchant from PayPal |
The following table describes the data transmitted by the connector from ICM to PayPal during the payment process:
Description | PayPal | PayPal Express-Checkout | PayPal Credit Card | |
|---|---|---|---|---|
Amount | The amount of the transaction |
|
|
|
Currency | Currency code, e.g., EUR/USD |
|
|
|
Customer details | Customer e-mail, first name, last name |
|
|
|
Address details (street, zip, city, country) | Invoice address details provided by the user |
|
|
|
Shipping address details provided by the user |
|
|
| |
Reference (order id) | Order reference generated by the merchant |
|
|
|
Shipping Details | Shipping amount, shipping discount |
|
|
|
Description of the items | Product description |
|
|
|
No raw payment instrument credentials (funding sources) are stored.
Symbol | Description |
|---|---|
| Transmitted |
| Not Transmitted |
| Optional / Configurable |
Only REST (PWA storefront) is officially supported by the 3.0.2 release.
The connector supports payments for baskets with digital goods. The PWA does not fully support this at the moment.
The PayPal Complete Payments Service connector overwrites the following templates of the ICM back office:
ServiceConfigurationParameterGroup.isml
ServicesEditConfiguration_inc.isml.
If these files have to be customized in another ICM customization or the integration project, the special handling has to be merged in the project.
This approach ensures broad compatibility across multiple ICM versions.
ICM versions 13.0.0–13.5.2 and 14.0.0–14.0.2 do not allow updating data stored in the payment instrument if it was initially empty. As a result, the used credit card is not displayed in the storefront in that case. This does not affect functionality. To resolve this issue, update to the latest version of the major release used in the project.
The onboarding required per service was extracted from the single payment services and moved to a dedicated service for common configuration valid for all services. Since there could be multiple configurations, it is not possible to pick the correct payment service as source for the migration. As a result, the onboarding has to be repeated once for the PayPal Common Configuration service.
The handling of the Pay Later and Messaging preferences was moved to the same PayPal Common Configuration. Please apply your preferred settings there. The channel preference for PayPal Complete Payments was removed.
There is no direct migration path from PayPal (Standard) Service Connector 8 to PayPal Complete Payments Connector 2. They do not share sources or configuration, so they can be deployed on the same environment. However, avoid having both connectors active for customers to prevent confusion.
Recommended steps for switching integrations:
Deploy to non-production.
Enable ft_ppcp alongside ft_paypal.
Onboard the same merchant that was used in the legacy integration.
Validate payment lifecycle scenarios (authorize/capture/refund).
Disable the payment methods provided by the legacy PayPal integration for the intershop.REST application.
This way, no new orders can be created with the legacy PayPal payment methods, while the management options remain available.
Added support for credit card payments
Combined onboarding into a common configuration service
Moved channel preferences for Pay Later and Messaging to the common service
Fixed a potential exception when de-serializing the received product names in the GET Seller Status call to PayPal
Fixed an issue preventing merchant onboarding in Production environment
Fixed a potential NullPointerException when logging failed requests to PayPal
Complete rewrite using PayPal’s recent REST APIs for orders, payment, and integrated sign-up
The information provided in the Knowledge Base may not be applicable to all systems and situations. Intershop Communications will not be liable to any party for any direct or indirect damages resulting from the use of the Customer Support section of the Intershop Corporate Website, including, without limitation, any lost profits, business interruption, loss of programs or other data on your information handling system.