Download the PHP package hamoda-dev/moyasar-php without Composer
On this page you can find all versions of the php package hamoda-dev/moyasar-php. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download hamoda-dev/moyasar-php
More information about hamoda-dev/moyasar-php
Files in hamoda-dev/moyasar-php
Package moyasar-php
Short Description A simple, expressive PHP client for the Moyasar payment gateway.
License MIT
Informations about the package moyasar-php
Moyasar PHP
A simple, expressive PHP client for the Moyasar payment gateway.
This package provides a clean interface for working with Moyasar's Invoices and Payments APIs in any PHP 8.2+ application. It's framework-agnostic and works great with Laravel, Symfony, or plain PHP.
Requirements
- PHP 8.2+
- Saloon
^4.0 - Saloon Pagination Plugin
^2.3Installation
Install via Composer:
That's it. No service providers to register, no config files to publish. The package is framework-agnostic — use it in Laravel, Symfony, Slim, or plain PHP.
Quick Start
Grab your secret key from the Moyasar dashboard, then:
Three lines to take a payment. No Guzzle, no array-shuffling, no JSON decoding.
Recommended Environment Setup
Keep credentials out of your code:
[!WARNING] Never commit API keys to version control. Use environment variables, a secrets manager, or your framework's config system. Treat your secret key like a password.
[!TIP] Moyasar issues separate test (
sk_test_...) and live (sk_live_...) keys. Use the test key in development and staging — you can run real payment flows against test cards without charging anyone.
Invoices
Invoices are the fastest way to accept a payment: you create one, send the customer to invoice->url, and Moyasar handles the entire checkout UI for you.
Create an Invoice
| Parameter | Type | Required | What it's for |
|---|---|---|---|
amount |
int |
Yes | Smallest currency unit (halalas for SAR, cents for USD) |
currency |
string |
Yes | ISO 4217 code (SAR, USD, ...) |
description |
string |
Yes | Shown to the customer on the payment page |
callbackUrl |
?string |
No | Webhook URL — Moyasar POSTs here when payment status changes |
successUrl |
?string |
No | Where to redirect after a successful payment |
backUrl |
?string |
No | Where to redirect if the customer cancels |
expiredAt |
?string |
No | ISO 8601 — invoice auto-expires after this |
metadata |
?array |
No | Arbitrary key-value data — perfect for your internal IDs |
Prefer building DTOs from incoming request data? Use the array factory:
Retrieve an Invoice
List Invoices (with Pagination)
Moyasar returns invoices in pages. The SDK's paginator handles page-walking for you — no manual ?page=N tracking:
[!TIP] Every item yielded by
items()is a fully-typedInvoiceDTO. Your IDE will autocomplete->id,->status,->amount, and every other field.
Update an Invoice
Only metadata is updatable after creation — use this to attach internal context as your order progresses:
Bulk-Create Invoices
Need to send 50 invoices for a batch of orders? One request, one round-trip:
Cancel an Invoice
InvoiceDTO Reference
| Property | Type | Notes |
|---|---|---|
id |
string |
Unique identifier |
status |
string |
initiated, pending, paid, expired, canceled |
amount |
int |
Smallest currency unit |
currency |
string |
ISO 4217 |
description |
string |
|
url |
string |
Hosted payment page — redirect customers here |
amountFormat |
string |
e.g. "25.00 SAR" |
logoUrl |
string |
Your merchant logo |
callbackUrl |
?string |
|
successUrl |
?string |
|
backUrl |
?string |
|
expiredAt |
?string |
|
createdAt |
string |
|
updatedAt |
string |
|
metadata |
array |
|
payments |
array |
Payment attempts linked to this invoice |
Need the raw Saloon response? It's always available:
Payments
Invoices are great when you want Moyasar to host the checkout. Payments are for when you want full control — your own card form, your own UX, direct charges against a card or token.
[!NOTE] If you're collecting card details directly, make sure your integration is PCI-compliant. For most merchants, tokenization (using a saved
tokensource) is safer and simpler than passing raw card numbers.
Create a Payment
About 3D Secure: when threeDs: true, the response may include a redirect URL the customer must visit to complete verification. Always check $payment->status and any redirect instructions returned by the API before assuming the payment succeeded.
About manual capture: setting manual: true authorizes the charge without capturing funds. Use this when you want to verify a payment now but only capture later (e.g. when you ship the item). See Capture below.
Supported Source Types
| Source | DTO | Use case |
|---|---|---|
| Credit/debit card | CreditCardSourceDTO |
Direct card charge |
| Apple Pay | Pass a raw array as source |
Apple Pay token from the browser/app |
| STC Pay | Pass a raw array as source |
STC Pay flow |
| Saved token | CreditCardSourceDTO with token set |
Charging a previously saved card |
Fetch a Payment
List Payments
Same paginator API as invoices:
Update a Payment
Update description or metadata after the fact — handy for enriching records once your internal workflow catches up:
Refund a Payment
Full refund:
Partial refund (amount in smallest currency unit):
Capture an Authorized Payment
If you created the payment with manual: true, capture it when you're ready to actually charge the customer:
Void a Payment
Cancel a payment before the funds settle in your bank account. Works on paid, authorized, or captured payments — as long as settlement hasn't happened yet.
[!TIP] Void vs. refund: void prevents the money from leaving the customer's account; refund returns money that's already moved. Void is cheaper and faster — always prefer it when available.
Payment Status Reference
| Status | What it means |
|---|---|
initiated |
Payment created, customer hasn't paid yet |
paid |
Payment succeeded — you can fulfill the order |
failed |
Payment failed — check message on the DTO for the reason |
authorized |
Card authorized but not charged — needs capture() |
captured |
Authorized payment has been successfully captured |
refunded |
Payment refunded (full or partial) |
voided |
Payment canceled before settlement |
verified |
Card verified during tokenization (no charge made) |
Error Handling
Saloon throws RequestException on any non-2xx response. The response object is attached, so you get full context:
Moyasar Error Types
| Type | Meaning | What to do |
|---|---|---|
invalid_request_error |
You sent bad parameters | Check the errors field, fix, retry |
authentication_error |
Invalid API key | Verify your secret key and base URL |
rate_limit_error |
Too many requests | Back off and retry with exponential delay |
api_connection_error |
Couldn't reach Moyasar | Retry with backoff |
account_inactive_error |
Account not activated for live payments | Contact Moyasar sales |
3ds_auth_error |
3D Secure failed | Ask the customer to try again |
api_error |
Something else went wrong | Retry; contact support if it persists |
HTTP Status Codes
| Code | Meaning |
|---|---|
200 |
Success |
400 |
Bad request — missing or invalid parameters |
401 |
Unauthorized — API key invalid |
403 |
Forbidden — credentials lack permission |
404 |
Resource not found |
405 |
Method not allowed — account not activated for live |
429 |
Rate limited |
500 / 503 |
Moyasar server issue — retry later |
[!WARNING] Moyasar occasionally returns
201with a failure payload (e.g. bank declines). Don't trust the status code alone — always inspect$payment->statusor$invoice->statuson the DTO.
Testing Your Integration
Use Moyasar's test cards with your sk_test_... key. A few quick patterns:
| Scenario | Card number |
|---|---|
| Successful charge | 4111 1111 1111 1111 |
| Declined charge | 4000 0000 0000 0002 |
| 3D Secure required | 4000 0000 0000 3220 |
Always verify your webhook handler works end-to-end in test mode before flipping to live.
Contributing
Bug reports and pull requests welcome. If you're adding a new Moyasar endpoint, please follow the existing Resource / Request / DTO pattern — consistency is why this SDK is pleasant to use.
License
Moyasar PHP is open-sourced software licensed under the MIT license.
Next Steps
See TODO