PayPal
This page is for owners and store managers whose store takes PayPal through the ezpaypal extension. It is about
running it: the checks, the one setting most stores get wrong, and what to do when something does not match. How the
extension works and what it checks before it marks an order paid is on
PayPal payments for businesses; the settings reference is
ezpaypal.
What runs on your store
se7enxweb/ezpaypal is required by the root composer.json, so it is installed with Exponential. When it is
activated and on the checkout, the customer is sent to PayPal to pay, and PayPal notifies your site at
/paypal/notify_url. Before the order is marked paid, the extension checks with PayPal that the notification is
genuine, that the payment status is Completed, and that amount and currency match the order
(PayPal payments for businesses).
Card details are typed on PayPal's page, never on yours (Card payments and PCI).
The setting to check first
paypal.ini [OrderSettings] PaymentMadeOrderStatusID is the order status set when PayPal confirms a payment. Its
shipped value is 1000, which is the first number for custom statuses, not the shipped Paid status (5)
(ezpaypal). Ask your partner which value your store uses, and make
sure it is a status on your path (Order statuses):
| Your choice | Then |
|---|---|
| Point it at Paid (5) | The dashboard's paid figures and your status path use the standard status |
| Keep 1000 | A custom status with the number 1000 must exist, for example "Paid with PayPal" |
Who does what
| Task | Who |
|---|---|
| The PayPal business account, fees, disputes | Owner |
| Refunds in the PayPal account | Owner, or one named person |
paypal.ini overrides, the notify address, updates | Partner or administrator (settings go in settings/override/paypal.ini.append.php) |
| Daily comparison of PayPal payments and orders | Store manager |
Every day
- To do: Every PayPal payment received has an order with your paid status.
- To do: No order with your paid status lacks a PayPal payment.
- To do: Orders in Payment failed or still Pending after a PayPal payment are looked at the same day.
Every month
- To do: PayPal's monthly statement matches the paid orders of the month (Store reports).
- To do: Refunds made in PayPal are reflected as Refunded or Partially refunded on the orders.
- To do: PayPal's messages about account or interface changes are forwarded to your partner.
When a paid order is not marked paid
Work through the table from PayPal payments for businesses:
| Symptom | First thing to check, or ask your partner |
|---|---|
| Customer paid, order not marked paid | Is /paypal/notify_url reachable from the internet without a login? Does the extension's log show a failed check? |
| "Amount does not match" in the log | Rounding or currency differences (Prices and currencies) |
| Customers land on the sandbox | [ServerSettings] ServerName still points at the sandbox |
| A status is set but nobody sees it | PaymentMadeOrderStatusID points at a status you do not use |
Until it is fixed, handle the affected orders by hand: confirm the payment in PayPal, then set the order to your paid status yourself, and note why in your log.
Warning
Maintenance mode, a login in front of the site, or an IP allow list blocks PayPal's notification too. Plan work that does this outside shop hours, and check the orders placed just before and after.
After any change
Changes to the site, the server, HTTPS or the PayPal extension can affect the notification. After each one:
- To do: One small real payment, then a refund in PayPal, and the order statuses checked.
- To do: Or, if your partner has a sandbox setup on a copy, a full test there first.
Related pages
- Payment gateways
- PayPal payments for businesses
- ezpaypal
- Order statuses
- Free documentation: this page is free to copy, translate and improve under the GNU FDL 1.3.
Become an Exponential Partner
Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.