Skip to main content

Payeer

Payeer payment integration — accept USD, EUR, RUB and crypto payments via Payeer merchant gateway.

Installation

npm install @foxses/pay-payeer

How It Works

Payeer uses a form-based redirect (similar to SSLCommerz):

  1. Build signed URL — foxses-pay generates a SHA256-signed checkout URL
  2. Redirect user to Payeer checkout page
  3. User pays via Payeer balance, card, or crypto
  4. Payeer POSTs to your statusUrl with payment result (IPN)
  5. Verify — validate IPN signature and update order

Configuration

gateway.use("payeer", {
merchantId: "P1000000", // required — your Payeer account ID
secretKey: "YOUR_SECRET_KEY", // required
successUrl: "https://yoursite.com/success", // required
failureUrl: "https://yoursite.com/cancel", // required
statusUrl: "https://yoursite.com/payeer/ipn", // optional — IPN callback
});
FieldTypeDescription
merchantIdstringYour Payeer account ID (e.g. P1000000)
secretKeystringSecret key from merchant settings
successUrlstringRedirect after successful payment
failureUrlstringRedirect when user cancels
statusUrlstringServer-to-server IPN callback URL (optional)

Getting Credentials

  1. Go to payeer.com → Log in
  2. Merchant → Add store
  3. Set your store name, success/fail/status URLs
  4. Copy your Account ID (merchantId) and Secret Key

Create Payment

const payment = await gateway.createPayment("payeer", {
amount: 10,
currency: "USD", // USD, EUR, or RUB
orderId: "ORDER-001",
});

Response:

{
transactionId: "ORDER-001",
provider: "payeer",
amount: 10,
currency: "USD",
status: "pending",
checkoutUrl: "https://payeer.com/merchant/?m_shop=P1000000&m_orderid=ORDER-001&...",
}

Redirect the user to checkoutUrl.

Verify Payment (IPN Handler)

Payeer sends a POST request to your statusUrl when payment completes.

app.post("/payeer/ipn", express.urlencoded({ extended: false }), async (req, res) => {
const result = await gateway.verifyPayment("payeer", {
transactionId: req.body.m_orderid,
...req.body, // pass all IPN fields for signature verification
});

if (result.status === "completed") {
await fulfillOrder(req.body.m_orderid);
res.send(`${req.body.m_orderid}|success`);
} else {
res.send(`${req.body.m_orderid}|error`);
}
});

Important: Your IPN response must be ORDER_ID|success or ORDER_ID|error.

Signature

Payeer uses SHA256 for signing:

sign = SHA256(merchantId:orderId:amount:currency:base64(description):secretKey).toUpperCase()

foxses-pay generates this automatically. For IPN verification, the formula adds more fields:

sign = SHA256(operation_id:ps:op_date:pay_date:shop:orderid:amount:curr:base64(desc):status:secretKey).toUpperCase()

IPN Fields

FieldDescription
m_operation_idPayeer operation ID
m_orderidYour order ID
m_amountAmount paid
m_currCurrency
m_statussuccess or fail
m_signSignature to verify

Status Mapping

Payeer IPN Statusfoxses-pay Status
successcompleted
failfailed

Supported Currencies

CurrencyCode
US DollarUSD
EuroEUR
Russian RubleRUB

Important Notes

  • No programmatic refunds — refund manually from the Payeer dashboard.
  • IPN required for reliable payment confirmation — redirect-based success is not guaranteed.
  • statusUrl must be publicly accessible (not localhost).

Credentials

Get from payeer.com → Merchant settings