This module provides an application based on commercetools Connect, which is triggered by HTTP requests from Checkout UI for payment operations.
The corresponding payment, cart or order details would be fetched from composable commerce platform, and then be sent to external PSPs for various payment operations such as create/capture/cancel/refund payment.
The module also provides template scripts for post-deployment and pre-undeployment action. After deployment or before undeployment via connect service completed, customized actions can be performed based on users' needs.
These instructions will get you up and running on your local machine for development and testing purposes.
Please run following npm commands under processor
folder.
In case SDK is provided by payment service provider for communication purpose, you can import the SDK by following commands
$ npm install <psp-sdk>
$ npm install
Build the application in local environment. NodeJS source codes are then generated under dist folder
$ npm run build
$ npm run test
$ npm run start
$ npm run lint:fix
$ npm run lint
$ npm run connector:post-deploy
$ npm run connector:pre-undeploy
Setup correct environment variables: check processor/src/config/config.ts
for default values.
Make sure commercetools client credential have at least the following permissions:
manage_payments
manage_checkout_payment_intents
view_sessions
introspect_oauth_tokens
npm run dev
Some of the services have authentication mechanism.
oauth2
: Relies on commercetools OAuth2 serversession
: Relies on commercetools session servicejwt
: Relies on the jwt token injected by the merchant center via the forward-to proxy
OAuth2 token can be obtained from commercetools OAuth2 server. It requires API Client created beforehand. For details, please refer to Requesting an access token using the Composable Commerce OAuth 2.0 service.
Payment connectors relies on session to be able to share information between enabler
and processor
.
To create session before sharing information between these two modules, please execute following request to commercetools session service
POST https://session.<region>.commercetools.com/<commercetools-project-key>/sessions
Authorization: Bearer <oauth token with manage_sessions scope>
{
"cart": {
"cartRef": {
"id": "<cart-id>"
}
},
"metadata": {
"allowedPaymentMethods": ["card", "ideal", ...],
"paymentInterface"?: "<payment interface that will be set on payment method info https://docs.commercetools.com/api/projects/payments#ctp:api:type:PaymentMethodInfo>"
}
}
Afterwards, session ID can be obtained from response, which is necessary to be put as x-session-id
inside request header when sending request to endpoints such as /operations/config
and /operations/payments
.
jwt
needs some workaround to be able to test locally as it depends on the merchant center forward-to proxy.
In order to make easy running the application locally, following commands help to build up a jwt mock server:
####Set environment variable to point to the jwksUrl
export CTP_JWKS_URL="http://localhost:9000/jwt/.well-known/jwks.json"
####Run the jwt server
docker compose up -d
####Obtain JWT
# Request token
curl --location 'http://localhost:9000/jwt/token' \
--header 'Content-Type: application/json' \
--data '{
"iss": "https://mc-api.europe-west1.gcp.commercetools.com",
"sub": "subject",
"https://mc-api.europe-west1.gcp.commercetools.com/claims/project_key": "<commercetools-project-key>"
}'
Token can be found in response
{"token":"<token>"}
Use the token to authenticate requests protected by JWT: Authorization: Bearer <token>
.