// Array with meta tag data $metaData = array( "" => array( "title" => "Online Payment System | Connecting Payment Systems and Banks Without Fees.", "description" => "Tegro.money offers advantageous tariff plans for online acquiring with a variety of payment acceptance methods. Register and start accepting payments today!", "keywords" => "tegro, online cash register, internet acquiring, payment acceptance, fund withdrawal, acquiring, card payment, online payment, online payment through internet, tegro.money" ), "referral-program" => array( "title" => "Referral Program | Online Payment System - Tegro.Money", "description" => "Invite acquaintances and friends – earn a percentage of their turnover. A unique opportunity for additional income from invited users.", "keywords" => "tegro, online cash register, internet acquiring, partnership, referral" ), "security" => array( "title" => "Security | Online Payment System - Tegro.Money", "description" => "We use PCI DSS security standard, SSL protocol, Verified by Visa and MasterCard SecureCode security systems.", "keywords" => "" ), "pricing" => array( "title" => "Tariffs | Online Payment System - Tegro.Money", "description" => "Payments for your customers will become simpler and more accessible, and more profitable for you.", "keywords" => "" ), "coupons" => array( "title" => "Discounts and Coupons | Online Payment System - Tegro.Money", "description" => "Payments for your customers will become simpler and more accessible, and more profitable for you.", "keywords" => "" ), "advantages" => array( "title" => "Our Advantages | Online Payment System - Tegro.Money", "description" => "Utilize all the features of Tegro.money service.", "keywords" => "" ), "policy" => array( "title" => "Personal Data Processing Policy | Tegro.Money", "description" => "Tegro.Money prioritizes compliance with and protection of its clients' interests.", "keywords" => "" ), "offer" => array( "title" => "Public Offer for Agreement on Use of Tegro.Money Service", "description" => "Agreement on Use of Tegro.Money Service", "keywords" => "" ), "contacts" => array( "title" => "Contacts | About Tegro.Money Company", "description" => "We are a modern IT company that provides services for electronic payments on the internet and beyond.", "keywords" => "" ), "docs/en/" => array( "title" => "Documentation and API | Tegro.Money", "description" => "Tegro.money API allows you to accept payments, process refunds, check transaction statuses, and much more. To use the API, you'll need to have a store in our system.", "keywords" => "" ) ); // Get the current page's name $current_page = basename($_SERVER['REQUEST_URI'], ""); // Check if there's data for the current page in the $metaData array if (array_key_exists($current_page, $metaData)) { $title = $metaData[$current_page]["title"]; $description = $metaData[$current_page]["description"]; $keywords = $metaData[$current_page]["keywords"]; } else { // If data is absent, set default values $title = "Online Payment System"; $description = "Tegro.money offers advantageous tariff plans for online acquiring with a variety of payment acceptance methods."; $keywords = "tegro, online cash register, internet acquiring, payment acceptance, fund withdrawal, acquiring, card payment, online payment, online payment through internet, tegro.money"; } ?>

Payment signature and sign errors

This page helps verify payment link signature generation and quickly troubleshoot error sign.

Signature algorithm

  1. Take parameters: shop_id, amount, currency, order_id.
  2. If you send test=1, include test in signature input too.
  3. Sort keys (same as PHP ksort).
  4. Build query string like PHP http_build_query.
  5. Calculate: md5(query + SECRET).

PHP reference example

<?php
$secret = 'YOUR_SECRET';
$data = [
    'shop_id' => 'SHOP_HASH',
    'amount' => '3000',
    'currency' => 'RUB',
    'order_id' => 'ef4c6d4e-660b-4ec8-b32a-31ea523ee758',
    // 'test' => '1', // only if you really send test=1
];
ksort($data);
$query = http_build_query($data);
$sign = md5($query . $secret);
?>

Python example (server-compatible)

import hashlib
from urllib.parse import urlencode

def make_sign(params: dict, secret: str) -> str:
    sorted_params = dict(sorted(params.items(), key=lambda x: x[0]))
    query = urlencode(sorted_params)  # compatible for standard scalar values
    return hashlib.md5((query + secret).encode("utf-8")).hexdigest()

Common reasons for error sign

  • amount was signed as 3000 but sent as 3000.0 (or vice versa).
  • test was included in signature but not sent in request (or vice versa).
  • Wrong secret or wrong shop ID is used.
  • Different key order is used during signing.
  • Unexpected fields are included in signature input.

Production diagnostics

The admin orders page includes a signature diagnostics panel now. You can filter by shop_id and inspect recent sign-related failures.

Main payment creation docs: /docs/en/payments/create-payment/.