PHPackages                             spryker/app-merchant - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. spryker/app-merchant

ActiveLibrary

spryker/app-merchant
====================

AppMerchant module

2.3.1(1y ago)01.4k↑100%proprietaryPHPPHP &gt;=8.2

Since Aug 2Pushed 1y ago20 watchersCompare

[ Source](https://github.com/spryker/app-merchant)[ Packagist](https://packagist.org/packages/spryker/app-merchant)[ RSS](/packages/spryker-app-merchant/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (9)Dependencies (36)Versions (12)Used By (0)

AppMerchant Module
==================

[](#appmerchant-module)

[![Latest Stable Version](https://camo.githubusercontent.com/6e179994cd75bb12d18b48741368efb1170a63fc3538437c444995031599db25/68747470733a2f2f706f7365722e707567782e6f72672f737072796b65722f6170702d6d65726368616e742f762f737461626c652e737667)](https://packagist.org/packages/spryker/app-merchant)[![Minimum PHP Version](https://camo.githubusercontent.com/ec21f169d70b69344c67d6f18fa1a24d20476d2f0cd680e8c4a1534c22f34e5f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345253344253230382e322d3838393242462e737667)](https://php.net/)

Provides SyncAPI and AsyncAPI schema files and the needed code to be used in a Payment Service Provider App.

Installation
------------

[](#installation)

```
composer require spryker/app-merchant

```

### Testing the AppMerchant

[](#testing-the-appmerchant)

You can test the AppMerchant as usual with Codeception. Before that you need to run some commands:

```
composer setup

```

With these commands you've set up the AppMerchant and can start the tests

```
vendor/bin/codecept build
vendor/bin/codecept run

```

Documentation
=============

[](#documentation)

The `AppMerchant` package contains the Spryker Glue Application code with a controller and a routing plugin that enables the [Mini-Framework](https://github.com/spryker-projects/mini-framework) to onboard Spryker Merchants to an App. The Route Plugin provides the following URL:

- `/merchants-onboarding`

This endpoint is used by Merchants after the Spryker application (tenant) is notified via the `ReadyForMerchantAppOnboarding` message. When an App uses the `AppMerchant` package and needs Merchant Onboarding to the App the `\Spryker\Zed\AppMerchant\Communication\Plugin\AppKernel\InformTenantAboutMerchantAppOnboardingReadinessConfigurationAfterSavePlugin` needs to be added on the App's project level code.

High-Level Architecture
-----------------------

[](#high-level-architecture)

[![High-Level Architecture](docs/images/app-merchant-high-level-architecture.svg)](https://docs.spryker.com/)

Features
--------

[](#features)

### Tenant Onboarding

[](#tenant-onboarding)

Before Merchants can be boarded to an App it is required that the Tenant's application is enabled to use this App. When an App config is created/updated the `ReadyForMerchantAppOnboarding` message will be sent to the Tenant. It contains the following information which can be different for each App implementation:

- `onboarding` - This field contains the supported onboarding logic.
- `type` - The type of onboarding, every App can have multiple onboardings e.g. for legal reasons and for the App functionality itself, etc.
- `appName` - The name of the App.
- `appIdentifier` - The identifier of the App.
- `additionalLinks` - A list of Links that can be displayed in the Merchant Portal.
- `merchantOnboardingStates` - A list of possible states the onboarding of a Merchant can have. Each state can have attributes that are used on the Tenant side for displaying purposes.
    - `statusText` - The text that should be displayed as status. (Can be translated on the Tenant side)
    - `displayText` - An additional text that can be displayed alongside the statusText. (Can be translated on the Tenant side)
    - `buttonText` - The text that will be used in the button on the onboarding page. (Can be translated on the Tenant side)
    - `buttonInfo` - An additional text that can be displayed alongside the buttonText. (Can be translated on the Tenant side)

Further reading:

### Merchant Onboarding

[](#merchant-onboarding)

This is the process where Merchants of a Tenant go through the onboarding process provided by the App.

Configuration
-------------

[](#configuration)

### Configure the MessageBroker

[](#configure-the-messagebroker)

Add the following to your project:

```
$config[MessageBrokerConstants::MESSAGE_TO_CHANNEL_MAP] =
$config[MessageBrokerAwsConstants::MESSAGE_TO_CHANNEL_MAP] = [
    ReadyForMerchantAppOnboardingTransfer::class => 'merchant-app-events',
    MerchantAppOnboardingStatusChangedTransfer::class => 'merchant-app-events',
];

$config[MessageBrokerConstants::CHANNEL_TO_TRANSPORT_MAP] = [
    'merchant-app-events' => MessageBrokerAwsConfig::HTTP_TRANSPORT,
];

$config[MessageBrokerAwsConstants::CHANNEL_TO_SENDER_TRANSPORT_MAP] = [
    'merchant-app-events' => MessageBrokerAwsConfig::HTTP_TRANSPORT,
];

```

Database
--------

[](#database)

This package adds the following database tables to the App:

- `spy_merchant`

This package updates the following database table:

- `spy_payment_transfer`
    - The column `merchant_reference` will be added to the table
    - The unique key will be updated

Plugins
-------

[](#plugins)

This package provides the following plugins

### Glue

[](#glue)

- `\Spryker\Glue\AppMerchantBackendApi\Plugin\GlueApplication\MerchantAppOnboardingBackendApiRouteProviderPlugin`

### Zed

[](#zed)

- `\Spryker\Zed\AppMerchant\Communication\Plugin\AppKernel\InformTenantAboutMerchantAppOnboardingReadinessConfigurationAfterSavePlugin`
- `\Spryker\Zed\AppMerchant\Communication\Plugin\AppPayment\MerchantsPaymentTransmissionsRequestExtenderPlugin`
- `\Spryker\Zed\AppMerchant\Communication\Plugin\AppWebhook\AccountUpdatedWebhookHandlerPlugin`

#### MerchantAppOnboardingBackendApiRouteProviderPlugin

[](#merchantapponboardingbackendapirouteproviderplugin)

This plugin can be added to the `\Pyz\Glue\GlueBackendApiApplication\GlueBackendApiApplicationDependencyProvider::getRouteProviderPlugins()`.

#### InformTenantAboutMerchantAppOnboardingReadinessConfigurationAfterSavePlugin

[](#informtenantaboutmerchantapponboardingreadinessconfigurationaftersaveplugin)

This plugin can be added to the `\Pyz\Zed\AppKernel\AppKernelDependencyProvider::getConfigurationAfterSavePlugins()` that is explained in the [AppKernel](https://github.com/spryker/app-kernel) documentation. When this plugin is used and the configuration of an App gets created/updated the `ReadyForMerchantAppOnboarding` message will be sent to the Tenant. See Tenant Onboarding.

#### MerchantsPaymentTransmissionsRequestExtenderPlugin

[](#merchantspaymenttransmissionsrequestextenderplugin)

This plugin can be added to the `\Pyz\Zed\AppPayment\AppPaymentDependencyProvider::getPaymentTransmissionRequestExtenderPlugins()` that is explained in the AppPayment documentation. When this plugin is used and via the AppPayment package a “payout“ is requested this plugin groups orders for “payouts“ by Merchants so each Merchant will get all payments for items of one Order transferred to him.

#### AccountUpdatedWebhookHandlerPlugin

[](#accountupdatedwebhookhandlerplugin)

This plugin can be added to the `\Pyz\Zed\AppWebhook\AppWebhookDependencyProvider::getWebhookHandlerPlugins()` that is explained in the AppWebhook documentation. When this plugin is used and can handle a webhook that comes from a third-party provider for notifications of an updated account on the third-party side.

Inside of this plugin, the `\Spryker\Zed\AppMerchantExtension\Dependency\Plugin\MerchantAppOnboarding\AppMerchantPlatformPluginInterface::handleWebhook()` method will be used. The `WebhookRequestTransfer` object will contain the loaded AppConfig and the Merchant. Depending on the implementation of the App you will get back a `WebhookResponseTransfer` that will be used to update the Merchant Onboarding status on the Tenant side as well as in the database of the App itself. To do so, a `MerchantAppOnboardingStatusChanged` message will be sent. This message is handled on the Tenant side and updates the database as needed.

Extension
---------

[](#extension)

This package provides the following extension points

### Zed

[](#zed-1)

- `\Spryker\Zed\AppMerchantExtension\Dependency\Plugin\MerchantAppOnboarding\AppMerchantPlatformPluginInterface`

#### AppMerchantPlatformPluginInterface

[](#appmerchantplatformplugininterface)

This extension provides the following methods:

- `provideOnboardingDetails` - Used on the App implementation to provide details of how the App can be used to onboard Merchants.
- `onboardMerchant` - Used on the App implementation to do the Merchant onboarding to the App.
- `handleWebhook` - Used on the App implementation to handle Merchant-related Webhooks.

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance39

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 54.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~14 days

Total

10

Last Release

522d ago

Major Versions

1.0.1 → 2.0.02024-09-05

PHP version history (2 changes)1.0.0PHP &gt;=8.1

2.2.2PHP &gt;=8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/10738957?v=4)[Spryker Bot](/maintainers/spryker-bot)[@spryker-bot](https://github.com/spryker-bot)

---

Top Contributors

[![vol4onok](https://avatars.githubusercontent.com/u/5063777?v=4)](https://github.com/vol4onok "vol4onok (17 commits)")[![stereomon](https://avatars.githubusercontent.com/u/1382877?v=4)](https://github.com/stereomon "stereomon (11 commits)")[![abitskil](https://avatars.githubusercontent.com/u/10989183?v=4)](https://github.com/abitskil "abitskil (1 commits)")[![pushokwhite](https://avatars.githubusercontent.com/u/4017411?v=4)](https://github.com/pushokwhite "pushokwhite (1 commits)")[![spryker-release-bot](https://avatars.githubusercontent.com/u/26904324?v=4)](https://github.com/spryker-release-bot "spryker-release-bot (1 commits)")

###  Code Quality

TestsCodeception

Static AnalysisPHPStan, Rector

Type Coverage Yes

### Embed Badge

![Health badge](/badges/spryker-app-merchant/health.svg)

```
[![Health](https://phpackages.com/badges/spryker-app-merchant/health.svg)](https://phpackages.com/packages/spryker-app-merchant)
```

###  Alternatives

[spryker/search

Search module

152.8M64](/packages/spryker-search)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
