Download the PHP package rewloy/rewloy-php without Composer

On this page you can find all versions of the php package rewloy/rewloy-php. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package rewloy-php

Rewloy PHP

Rewloy API'nin resmî PHP kütüphanesi.

Durum: önizleme (0.x), Packagist'te yayımlandı. API kararlı; kütüphane arayüzü 1.0'a kadar değişebilir.

Rewloy, işletmelerin dijital sadakat kartlarını müşterinin telefonuna koyar. Kart türleri damga, puan, VIP, cashback, hediye kartı, kupon ve indirimdir:

Kasada QR okutulur; bakiye, ödül ve kampanyalar kartın kendisinde güncellenir. Panelde yapılabilen her şey Rewloy API v1 ile de yapılabilir; bu kütüphane onu PHP'den kullanır. Geliştirici belgeleri: https://rewloy.com/gelistiriciler.

Kurulum

PHP 8.2 ya da üstü ve curl eklentisi gerekir:

Başlarken

Her işlem, adı operationId olan bir metottur (API referansı). Tek bir dizi alır, işlemin gerektirdikleriyle:

Metot yanıttaki datayı dizi olarak döndürür. Sayfalı listelerde ['data' => …, 'meta' => …] döner. Gövdesiz yanıtta (204) dönüş değeri yoktur. Dosyada (QR, harita, CSV, .pkpass) baytları taşıyan bir string döner.

Her metodun PHPDoc'u, argümanların ve yanıtın şeklini, API'nin açıklamasını ve referanstaki yerini taşır. İşlemin almadığı bir anahtar (örneğin yanlış yazılmış idempotency_key) InvalidArgumentException atar. İşlem tablosu da açıktır: Rewloy\Generated\Operations::get('passAction') → ['method' => 'POST', 'path' => …, 'auth' => …, 'idempotency' => 'required', …].

Kimlik

İstemci Ne için
new Client(apiKey: 'rwk_…') API anahtarı: kasa, e-ticaret, kendi sisteminiz
new Client(staffSession: 'rws_…', merchant: $isletmeId) ekip oturumu: bir kişinin işletme uygulaması
new Client(holderSession: 'rwh_…') kart sahibi oturumu: Rewloy Cüzdan gibi müşteri uygulamaları
new Client() kimlik istemeyen uç noktalar: giriş, katılım, kod

merchant, ekip oturumu birden fazla işletmede koltuk taşıyorsa hangi işletme için çalıştığını söyler (Rewloy-Merchant). Her çağrıda merchant ile değiştirilebilir. Oturumlar kimliksiz bir istemciyle açılır:

Bir işlem istemcinin kimlik türünü kabul etmiyor ama kimliksiz de çalışıyorsa (örneğin login), istemci onu kimliksiz çağırır. API, işlemin kabul etmediği bir kimliği reddeder (CREDENTIAL_NOT_ALLOWED).

Diğer seçenekler:

Başka bir adres (staging)

API'nin başka bir kopyasına (kendi staging ortamınız ya da bir vekil sunucu) baseUrl ile bağlanılır:

Gerçek müşterilere dokunmadan denemek için adres değiştirmeniz gerekmez: test modu aynı adreste, ayrı bir test ortamıyla çalışır.

Kart vermek ve kasada işlem

Satış: recordSale

Kasa ya da kendi yazılımınız için en kolay yol recordSaledir: "bu satış oldu, sen yaz". Ödenen toplamı (kartın para biriminde, kuruş) gönderirsiniz; ne yazılacağına kartın türü ve programın kendi kuralı karar verir. Kartın türünü bilmeniz gerekmez.

actions[].ready, kartın kendi durumuna göre işlemin şimdi yapılıp yapılamayacağıdır (damga ödülü hazır mı, puan bir ödüle yetiyor mu, bakiye var mı, kupon kullanılmamış mı, VIP ziyareti bu pencerede sayılmış mı). rewardReady aynen kalır ama türe göre anlam değiştirir: damga ve puanda "ödül hazır"; cashback ve hediye kartında bakiye sıfırdan büyükse; VIP'te her zaman true. Kasa ekranında "Ödül hazır" yazısını yalnız damga ve puanda gösterin.

GET /v1/passes/{serial} ayrıca actions (kartın aldığı kasa işlemleri ve şimdi yapılıp yapılamayacakları) ve sale (bir satışın bu kartta ne yazacağı) alanlarını verir.

İade. reverseSale bir satışın karta yazdığını geri alır; satışı yazarken gönderdiğiniz anahtarla (saleKey) ya da referencela bulur:

Bir satış bir kez geri alınır (tekrar duplicate: true döner). Kazanılan kullanılmışsa (ödüle ya da harcamaya gitmişse) 409 SALE_ALREADY_SPENT gelir ve hiçbir şey yazılmaz.

Çevrimdışı kasa kuyruğu: occurredAt. Bağlantı koptuğunda satışı sonra yazıyorsanız occurredAt ile satışın gerçekten olduğu anı (ISO 8601, saat dilimiyle) gönderin; kartın geçmişinde o anla görünür. Gelecekte olamaz (2 dakikalık saat farkı kabul edilir). idempotencyKey kuyruktaki kayıtla birlikte saklanır, tekrar gönderilince satış ikinci kez yazılmaz.

Kasa işlemini iptal etmek: reverseAction. passAction ile yapılan bir harcama, ödül ya da kullanım yanlışlıkla yapıldıysa (spend, spend-points, redeem-stamps, redeem-reward, use) reverseAction tamamını geri verir. İşlemi, yaparken gönderdiğiniz Idempotency-Key (actionKey) ya da işlemin reference değeriyle bulur (passAction artık isteğe bağlı bir reference alır). reverseAction bir Idempotency-Key istemez: bir işlem bir kez geri alınır, tekrar duplicate: true döner.

passActionın yanıtı kart türüne göre iki biçimdedir (PHPDoc'ta iki dizi şeklinin birleşimi): bakiyeli kartlarda balance (damga, puan, VIP, cashback, hediye kartı), kupon ve indirim kartında status, uses ve usesLeft (isset($sonuc['uses']) ile ayırın; PHPStan bunu daraltır). Kazanımlar (earn-stamps, earn-points, visit) reverseActionla değil reverseSalela geri alınır.

Yazımın yanıtında kartın durumu: card. recordSale, passAction, reverseSale ve reverseAction yanıtları card taşır: yazımdan sonraki kart, getPass'in customer hariç aynı alanlarıyla (programName, currency, stamps/points/money, actions…). Yazımla aynı işlemde okunur, yanıtın balance'ıyla aynı anı söyler. Tekrarda (duplicate: true) kartın şimdiki durumudur. Kimliğin kartın programında passes.read yetkisi yoksa (yalnız kasa yetkisi olan bir eklenti anahtarı) card nulldır. recordSale yanıtındaki reversed: true, bu anahtarla yazılan satışın sonradan geri alındığını söyler (yalnız bir tekrarda olabilir; credited ilk isteğin yazdığıdır, kart onu artık taşımaz): fişi yeniden yazmak için yeni bir anahtar gönderin.

Kartın işlemleri: listPassOperations. Kartın defterindeki işlemler, yeniden eskiye, sayfalı ($rewloy->paginate('listPassOperations', ['params' => ['serial' => $seri]])): bir kasa ekranındaki "son işlemler" listesi ve her birinin İade düğmesi için; kasanın kendi anahtar günlüğünü tutması gerekmez. Her işlemde undoWith hangi uç noktanın geri aldığını ('sale/reverse' ya da 'actions/reverse'), reversible bu kimliğin şimdi geri alıp alamayacağını söyler; bu kimliğin kendi işlemlerinde saleKey ya da actionKey de gelir.

occurredAt reddedilirse 400 VALIDATION gelir ve $e->details[0]['reason'] nedeni söyler: in_future, too_old (72 saatten eski), before_issue (kart o anda yoktu: occurredAt olmadan yeniden gönderin), invalid. Tanımadığınız bir reason'ı invalid gibi ele alın.

Fiş satırları ve kazanım kuralları (API 1.3)

recordSale fişin satırlarını da alabilir (lines, en çok 500: lineId, name, sku, category bir metin ya da yol, quantity üç ondalıkla, unit, unitPriceMinor, discountMinor, totalMinor, kind, tags; fiş indirimi receiptDiscountMinor). İşletmenin kuralı yoksa kazanım eskisi gibidir. Kural varsa yanıt earn taşır: her satırın durumu (earned, no_rule, excluded, below_unit_price, refunded…), hangi gruplarda ve hangi kuralda olduğu ve toplam, adım adım (sınırlar, kampanya, credited). Satırların toplamı ödenenle tutmazsa 422 LINES_TOTAL_MISMATCH, 500'den fazlaysa 422 TOO_MANY_LINES.

LINE_NOT_FOUND (satışta öyle bir satır yok) ve LINE_ALREADY_REFUNDED yalnız satırla iadede gelir. Ürün grupları (createEarnGroup, listEarnGroups…, bir grup kategorilerden, SKU'lardan, adlardan ya da etiketlerden kurulur) ve bir programın kuralları (getEarnRules, putEarnRules ve tek kural işlemleri; her kayıt bir sürümdür ve revision ile karşılaştırılıp yazılır: 409 REVISION_CONFLICT) de API'dedir. Kuralları denemek için ayrıca listEarnTemplates.

Şube QR'ı ve şube dondurma (API 1.3)

Her şubenin kalıcı bir QR'ı vardır (listLocations ve getLocation'da qr: code, url, state). publicBranch o sayfanın verisini kimlik göndermeden okur; QR'ın kendisi ve basılacak sayfalar bayt dizisi olarak gelir:

QR'daki kartların listesi getLocationQrItems / putLocationQrItems (listenin versionı ile; başkası değiştirmişse 409 QR_LIST_CHANGED), addQrItems ve previewLocationQr ile düzenlenir. Kart sahibinin işlemleri (holderBranch, joinHolderBranch) Rewloy Cüzdan oturumu ister, API anahtarı değil.

Şube dondurma: freezeLocation ekip oturumu ve kişinin şifresi ister (API anahtarı 403 CREDENTIAL_NOT_ALLOWED alır); notu değiştirmek (updateLocationFreeze), başlamamış dondurmayı iptal etmek (cancelLocationFreeze) ve şubeyi açmak (unfreezeLocation) locations.freeze yetkili anahtarla da olur. Donuk şubenin kasası 409 LOCATION_FROZEN der; her şubesi donuk olan işletme 409 BUSINESS_FROZEN der. Ücretsiz gün hakkı listLocationFreezes'ta. Yeni webhook olayları: pass.extended, location.frozen, location.unfrozen, business.paused, business.resumed.

copyProgram yalnız hediye kartı, kupon ve indirim kartını kopyalar; bir sadakat kartı 422 NOT_AN_INSTRUMENT alır.

Idempotency-Key

recordSale, passAction, sendCampaign ve refundShopRedemption bir Idempotency-Key ister: API'nin tanımında (OpenAPI) bu başlık bu işlemlerde zorunludur, bu yüzden idempotencyKey bu metotlarda zorunlu bir argümandır. Verilmezse (ya da null ise) kütüphane istek göndermeden InvalidArgumentException atar; sizin yerinize anahtar üretmez. Üretilmiş rastgele bir anahtar yalnızca tek çağrının yeniden denemelerini korurdu: uygulama çöküp yeniden başlarsa yeni bir anahtar çıkar ve satış ikinci kez yazılabilirdi. Anahtarı kendiniz üretip satışla birlikte saklayın. Anahtar 8–64 karakterlik görünür ASCII olmalıdır (0x21–0x7E: harf, rakam ve noktalama; boşluk, Türkçe harf ya da fiş gibi ASCII dışı karakter olmaz); aksi halde kütüphane yine istek göndermeden InvalidArgumentException atar. Başlığın isteğe bağlı olduğu işlemlerde (örneğin issuePass) anahtar verilmezse kütüphane bir UUID üretir ve aynı çağrının her denemesinde aynısını gönderir.

Sayfalama

paginate sayfalı her listeyi (page/limit ve meta) öğe öğe dolaşır ve son sayfada durur. Döngüden çıkınca sonraki sayfayı istemez. Tek bir sayfa için metodun kendisi yeter:

Canlı akış

liveFeed (işletmenin tezgâh akışı) ve holderCardEvents (kart sahibinin kartındaki değişiklik) sunucu olayları (text/event-stream) yayınlar. $rewloy->stream('liveFeed', $argumanlar) aynı işi görür. Her olay (Rewloy\ServerSentEvent) event, data ve id taşır; json() veriyi çözer.

Webhook doğrulama

Rewloy her teslimi imzalar:

Rewloy\Webhook::verify() imzayı ham gövdeyle ve webhook oluşturulurken bir kez gösterilen sırla (whsec_…) doğrular:

Webhook'u panelden ya da API'den ekleyebilirsiniz. webhooks.manage yetkili bir API anahtarı createWebhook, listWebhooks, getWebhook, setWebhookStatus, testWebhook ve listWebhookDeliveriesyi çağırabilir; webhookEvents abone olunabilecek olayları söyler. Sır (secret) yalnız createWebhook yanıtında gelir, saklayın:

Adres herkese açık bir https adresi olmalıdır (test ortamında da); yerelde bir tünel kullanın.

Sırrı yenilemek. Kaybolan ya da sızan bir sır için rotateWebhookSecret webhook'a yeni bir sır verir (yeni secret yalnız o yanıtta döner); webhook'u silip yeniden eklemek gerekmez. Eski sır 24 saat daha yeninin yanında imzalar: o sürede Rewloy-Signature iki v1 taşır ve teslimler Rewloy-Signature-Rotating: 1 başlığıyla gelir. Webhook::verify() her v1'i ve $secret olarak verilen birden çok sırrı dener; yenilemeden önce alıcınızı [$yeni, $eski] ile güncelleyin. deleteWebhook webhook'u teslim geçmişiyle birlikte kalıcı siler (204).

Tutmazsa WebhookSignatureException atar: 400 ile yanıtlayın ve hiçbir işlem yapmayın. Gövde mutlaka ham olmalıdır. JSON olarak çözülüp yeniden yazılan bir gövde imzayı tutturmaz.

Düz PHP:

Laravel (routes/api.php; buradaki yollar CSRF jetonu istemez):

Laravel 11 ve üstünde routes/api.php dosyasını php artisan install:api ekler. Yolu routes/web.php'ye koyarsanız bootstrap/app.php içinde CSRF denetiminden çıkarın: $middleware->validateCsrfTokens(except: ['rewloy/webhook']).

Symfony:

İki çerçevede de getContent() ham gövdeyi verir. $request->all(), $request->toArray() ya da json_decode sonrası yeniden yazılan bir gövde imzayı tutturmaz.

Başlıklar:

Gövde kişinin iletişim bilgisini taşımaz; kişiyi customer_id ile API'den okuyun. 2xx ile yanıtlanmayan bir teslim yaklaşık 45 saat içinde toplam 8 kez denenir ve her deneme yeni bir t ile imzalanır. Yeni olay türleri gelebilir: type'a göre seçerken bir varsayılan dal bırakın. Kendi işleyicinizi test etmek için Webhook::sign($govde, $sir) aynı başlığı üretir.

Webhook'un durumu. Webhook nesnesinde (listWebhooks, getWebhook, setWebhookStatus, createWebhook ve rotateWebhookSecret'ın webhook'u) iki tarih alanı hep vardır, ikisi de boş olabilir (string|null, bir tarih):

Hatalar ve yeniden deneme

RewloyException şunları taşır:

Alt sınıflar:

Rewloy'un olmayan bir hata gövdesi (örneğin bir vekil sunucunun 502 sayfası) HTTP_502 gibi bir kodla gelir; JSON olmayan bir başarılı yanıt INVALID_RESPONSE ile.

Yeniden deneme. Şunlar en çok maxRetries kez (varsayılan 2) yeniden denenir: bağlantı hatası, zaman aşımı, 429, 502, 503, 504 ve Cloudflare'in 520–524 hataları.

Kullanımdan kalkma

Kalkacak bir uç nokta en az 180 gün önceden duyurulur. O süre boyunca her yanıtı Deprecation, Sunset ve Link başlıklarını taşır.

Yanıtın tamamı ve test modu

request($islem, $argumanlar) her işlemi çağırır ve yanıtın tamamını (Rewloy\Response) döndürür: data, sayfalı listede meta, status, headers, requestId, mode ve replayed (rateLimit() istek sınırı başlıklarını okur).

mode, yanıtın Rewloy-Mode başlığıdır: live ya da test. Başlık yoksa null.

Test modu

Gerçek müşterilere dokunmadan denemek için işletmenizin bir test ortamı vardır: ona bağlı ayrı bir işletme (adı "· Test" ile biter); kendi programları, müşterileri, kartları, anahtarları ve webhook'ları. Panel → Geliştirici → "Test ortamını aç" ya da POST /v1/test/environment. Orada oluşturulan anahtar rwk_test_ ile başlar ve aynı adreste, aynı yollarla çalışır:

Ayrıntı: https://rewloy.com/gelistiriciler#test-ortamı

HTTP katmanı

Varsayılan katman Rewloy\Http\CurlTransport'tur: bağlantıları çağrılar arasında açık tutar, yönlendirme izlemez. Vekil sunucu ya da kendi sertifika deponuz için ona curl seçenekleri verin:

Kendi katmanınız için Rewloy\Http\Transport arayüzünü (send() ve stream()) uygulayın. Kendi testlerinizde ağa çıkmadan yanıt vermenin yolu da budur.

Geliştirme

Canlı testler

tests/Live, kütüphaneyi çalışan bir geliştirme (dev) Rewloy'una karşı uçtan uca sınar: bir sürüm adayı canlıya çıkmadan önce her istemci kütüphanesi bu testten geçer. Normal composer test bunları çalıştırmaz.

Değişken Anlamı
REWLOY_BASE_URL Dev sunucusunun adresi. Biri eksikse testler atlanır (hata değildir).
REWLOY_API_KEY Test ortamının anahtarı: rwk_test_…. Başka her anahtar reddedilir.
REWLOY_STAFF_SESSION ya da REWLOY_STAFF_EMAIL + REWLOY_STAFF_PASSWORD İsteğe bağlı: test ortamında koltuğu olan birinin ekip oturumu (ikinci faktörsüz). resetTestEnvironment API anahtarıyla çalışmaz, ekip oturumu ister; yoksa sıfırlama atlanır ve özet bunu söyler.
REWLOY_STAFF_PASSWORD İsteğe bağlı: aynı kişinin şifresi. Şube dondurma (freezeLocation) şifre ister; yoksa dondurma testleri atlanır ve özet bunu söyler.
REWLOY_WEBHOOK_URL İsteğe bağlı: webhook testi için herkese açık bir https adresi (yalnız sunucu çözülemeyen adresi reddederse kullanılır; varsayılan https://example.com/rewloy-live-tests).

Önce GET /v1/meta sorulur (anahtar gönderilmeden); environment "dev" değilse ya da alan yoksa hiçbir şey çalışmaz (çıkış kodu 2). Canlıya karşı çalışmaz. Kapsam: meta ve işletme; programlar (damga ve hediye kartı, güncelle, arşivle, sil); kart verme, kasa görünümü, damga/ödül/harcama; satış (fiş numarasıyla ve numarasız), reverseSale, reverseAction, işlem listesi; müşteri araması; kodlar (listAllBatches, gönderme ve reddedilme durumları); webhook (oluştur, listele, sırrı yenile, sil); Idempotency-Key; istek sınırı başlıkları; hata nesnesi (404 ve doğrulama); sayfalama; 1.3.0'dan: ürün grupları ve kazanım kuralları (kaydetme, sürüm çakışması, tek kural), previewEarn, previewSale, satırlı recordSale ve earn açıklaması, tek satır iadesi, şube QR'ı (herkese açık sayfa, SVG, PNG, PDF sayfaları, liste), şube dondurma (ekip oturumu ve şifreyle; test için ayrı bir şube açılır, sonunda açılır), copyProgram ve NOT_AN_INSTRUMENT; en sonda test ortamının sıfırlanması. Özet, alan başına geçen/kalan sayısını yazar; herhangi bir hatada çıkış kodu sıfırdan farklıdır. Test ortamı günde en fazla 5 kez sıfırlanır. Yapılmayanlar (BUSINESS_FROZEN, kod kartlı şube QR'ı, Rewloy Cüzdan işlemleri…): tests/Live/TODO.md.

Belgeler

Başlarken https://rewloy.com/gelistiriciler
API referansı https://rewloy.com/gelistiriciler/api
OpenAPI 3.1 https://app.rewloy.com/v1/openapi.json
Hata kodları https://rewloy.com/gelistiriciler/hatalar
API'nin değişiklik günlüğü https://rewloy.com/gelistiriciler/degisiklikler
Bu kütüphanenin değişiklikleri CHANGELOG.md

Sürümler:

Güvenlik

Bir güvenlik açığı bulursanız SECURITY.md dosyasındaki yoldan özel olarak bildirin. Lütfen herkese açık issue açmayın.

Lisans

MIT


English

Developer docs (in Turkish): https://rewloy.com/gelistiriciler.

The official PHP library for the Rewloy API.

Status: preview (0.x), published on Packagist. The API is stable; the library's interface may change until 1.0.

The documentation of the API itself is in Turkish (links above). In short:

Install

PHP 8.2 or later with curl:

Use

Webhooks

Verify the raw body (file_get_contents('php://input'), or $request->getContent() in Laravel and Symfony) with the secret shown when the webhook was created:

rotateWebhookSecret gives a webhook a new secret (returned only in that answer); the old one keeps signing for 24 hours, so Rewloy-Signature carries two v1 values and the delivery has Rewloy-Signature-Rotating: 1. Webhook::verify() tries every v1 and every secret you pass: [$newSecret, $oldSecret]. deleteWebhook removes a webhook and its delivery history for good.

A webhook object (listWebhooks, getWebhook, setWebhookStatus, and the webhook of createWebhook and rotateWebhookSecret) always carries two fields, each string|null (a date-time), null when it does not apply:

Also in Rewloy 1.2.0 (library 0.2.4): createApiKey(['body' => ['kind' => 'pos', 'locationId' => …, 'register' => …, 'password' => …]]) (a till key bound to one branch); resetTestEnvironment(['body' => ['revokeKeys' => true]]) (keeps the test business, programmes and keys; revokes keys only when asked); listAllBatches (every gift-card, coupon and discount code of the business, with the archived state); 409 PROGRAM_ARCHIVED when creating a code for an archived programme. sendBatchLink e-mails a code's link only while the code issues a card: 410 BATCH_CLOSED (stopped), 410 BATCH_EXPIRED (past its date), 410 BATCH_FULL (every card given) and 409 PROGRAM_ARCHIVED (its programme is archived) refuse it and no mail goes; before 1.2.0 the last three were sent anyway. The codes are in the Rewloy\Generated\ErrorCode constants (ErrorCode::BATCH_FULL…).

Also in Rewloy 1.3.0 (library 0.3.0), all additive:

Errors, retries, deprecations

Live tests

tests/Live tests the library end to end against a running dev Rewloy: a release candidate passes every client library's live suite before it goes live. The normal composer test does not run them.

Security and licence

Report vulnerabilities privately, as SECURITY.md says. MIT licensed.

Yeni sürüm yayımlamak / Releasing

Client::VERSION'ı ve CHANGELOG'u güncelleyin, commit'leyin, v<sürüm> etiketini gönderin. Packagist etiketi kendiliğinden alır.

Bump Client::VERSION and the changelog, commit, and push a v<version> tag. Packagist picks the tag up by itself.


All versions of rewloy-php with dependencies

PHP Build Version
Package Version
Requires php Version >=8.2
ext-curl Version *
ext-hash Version *
ext-json Version *
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package rewloy/rewloy-php contains the following files

Loading the files please wait ...