Overview
SKT Forms is a WordPress form builder built for two jobs at once: collecting information and collecting payments. Build a simple contact or survey form, or a full payment form with amount selection, product line items, conditional logic and a checkout flow — all from one drag-and-drop builder, with no code required.
- Create and publish forms with the field types that best fit each piece of information you need.
- Validate submissions with built-in and cross-field rules.
- Show or hide fields dynamically with conditional logic.
- Accept payments through Razorpay, PayU, Instamojo, PhonePe, PayPal, or Cash on Delivery.
- Send tailored email notifications to customers and admins.
- Track form performance with the built-in analytics dashboard.
Installation
Method 1 — WordPress Admin (recommended)
- Download the SKT Forms plugin ZIP file.
- Go to WordPress Admin → Plugins → Add New.
- Click Upload Plugin and select the ZIP file.
- Click Install Now, then Activate Plugin.
Method 2 — Manual installation
- Extract the plugin files to
/wp-content/plugins/skt-forms/on your server. - Activate the plugin from Plugins in the WordPress admin.
Admin Menu
Once activated, SKT Forms adds its own top-level menu to the WordPress admin sidebar. Every feature in this documentation is reached from one of these eight screens.
| Menu Item | What it's for |
|---|---|
| Dashboard | At-a-glance stats (active forms, submissions, successful payments, revenue) and recent transactions. |
| Forms | Create, edit, duplicate, preview and delete every form see field count, status and shortcode for each. |
| Transactions | Every payment and data-collection submission, with filters, exports and manual approval. |
| Analytics | Form views, starts, completions and field-level interaction tracking per form. |
| Email Notifications | Global and per-form email templates for payment and submission events. |
| Payments | Enable and configure payment gateways, and set success/failure/cancel page handling. |
| Integration | Connect external spam-protection services: Google reCAPTCHA, Cloudflare Turnstile, hCaptcha. |
| Help | System information for support and troubleshooting. |
Dashboard
The Dashboard is the home screen of SKT Forms. It gives you a quick read on how your forms are performing without opening the Transactions or Analytics screens.
| Stat card | What it shows |
|---|---|
| Active Forms | Number of forms currently set to Active status. |
| Form Submission | Total number of transactions recorded across all forms (payments and data-collection submissions). |
| Successful Payments | Count of transactions with a Success payment status. |
| Total Revenue | Sum of all successful payment amounts, formatted to two decimal places. |
Below the stat cards, Quick Actions gives one-click shortcuts to Create New Form, Manage Forms, View Transactions and Payment Gateway Settings, and a Recent Transactions table lists the latest submissions with their status, gateway and amount.
Creating a Form
To create a new form, go to SKT Forms → Forms → Add New. You can start from a ready-made template or build entirely from scratch.
- Enter a name for your form in the Form Title field (required).
- Add an optional Description to note the form's purpose internally.
- Choose Use a Template to start from a pre-built layout, or Start from Scratch to build a fully custom form.
- Click Create Form to open the form builder and start adding fields.
Form Settings
The left-hand sidebar of the form builder controls how the form behaves — independent of which fields you add. These settings are grouped into five sections.
General settings
| Setting | Description |
|---|---|
| Form Title | The internal and public name of the form. |
| Description | Optional text describing the form's purpose. |
| Submit Button Text | Custom text for the submit button. Leave empty to use the default — "Proceed to Payment" for payment forms, "Submit Form" otherwise. |
| Status | Active forms render on the front end Inactive forms are hidden even if the shortcode is still on a page. |
Validation & spam protection
| Setting | Options | Description |
|---|---|---|
| Validation Mode | Real-time / On Field Blur / On Form Submit | Controls when field errors first appear to the visitor as they fill out the form. |
| Validation Style | Inline Messages / Tooltip Messages / Summary at Top | Controls how validation errors are displayed. |
| Spam Protection (Captcha) | None / Math Captcha / Google reCAPTCHA / Cloudflare Turnstile / hCaptcha | Only one captcha runs per form. External providers must first be configured on the Integration page — see Spam Protection. |
Form type & payment settings
| Setting | Description |
|---|---|
| Payment Collection | Disabled keeps the form as data collection only Enabled turns it into a payment form and reveals the Payment Settings section (gateways, currency, amount). |
| Payment Gateways | Select one or more enabled gateways. If you select more than one, visitors choose their preferred gateway at checkout, the same way a WooCommerce store lets shoppers pick a payment method. |
| Currency | Filtered automatically to only the currencies supported by the gateway(s) you've selected. |
| Fixed Amount | The amount charged when the form doesn't use an Amount Selection or Product Item field to determine the price. |
Data collection notifications
Shown only when Payment Collection is Disabled — controls whether an email is sent for every submission of a non-payment form.
| Setting | Description |
|---|---|
| Send Email Notification | Yes/No — sends an email every time this form is submitted. |
| Send Email Notification To | The recipient address. Leave empty to use the site's admin email. |
Analytics & export
| Setting | Description |
|---|---|
| Enable Analytics | Turns on view/start/completion/field-interaction tracking for this form. See Analytics Dashboard. |
| Export Formats | Choose which formats (CSV, JSON, Excel) are available when exporting this form's submissions. |
Accessibility features
Three optional toggles improve the form's usability for visitors using assistive technology:
- High Contrast Mode — increases color contrast between text, borders and backgrounds.
- Large Text Mode — increases the base font size across the form.
- Screen Reader Optimized — adds extra ARIA labeling and descriptive text for screen readers.
Field Layout
Every field has a Field Width (Column) setting that controls how much horizontal space it
takes up: Full (100%), One Half (1/2), One Third (1/3),
Two Thirds (2/3), One Fourth (1/4), or Three Fourths (3/4).
Fields with partial widths are placed side-by-side in the same row and automatically wrap to a new line
once the row is full — so a Full Name field at One Half and an Email field at One Half will sit next to
each other, for example.
Fields can also be reordered by dragging them using the drag handle on each field row — the form builder supports full drag-and-drop reordering, including keyboard navigation for accessibility.
Using the Shortcode
Every saved form gets a unique shortcode shown in the Shortcode section of the form builder and on the Forms list. Paste it into any post, page, or widget area that supports shortcodes:
[skt_forms id="1"]
The shortcode accepts a single attribute, id — the numeric ID of the form to display. There
is no other configuration available through the shortcode itself; all form behavior is controlled from
the form builder.
Field Types
SKT Forms includes 20 field types, covering everything from a simple text box to a fully calculated order line item. Add a field with the Add Field button in the form builder, or use one of the four Quick Add shortcuts (Name, Email, Phone, Message) for the fields you'll need on almost every form.
| Field Type | Best used for |
|---|---|
| Text | Short single-line answers — names, company, job title, subject line. |
| Email addresses, with built-in format validation. | |
| Phone | Phone or mobile numbers. |
| Number | Any numeric-only value — age, quantity, a reference number. |
| Textarea | Longer free-text answers — messages, comments, project briefs. |
| Dropdown | A single choice from a longer list of options, shown as a select box. |
| Radio Buttons | A single choice from a short list, with every option visible at once. |
| Checkboxes | One or more choices from a list — interests, services, add-ons. |
| Date Picker | Calendar-based date entry — appointment date, date of birth, event date. |
| Time Picker | Time-of-day entry — booking slots, preferred call time. |
| File Upload | Attachments — resumes, ID proof, images, documents. |
| Address | A structured street/city/state/ZIP/country block for shipping or billing. |
| Rating | A star rating for feedback, reviews or satisfaction surveys. |
| Section Divider | Visually breaks a long form into labeled sections — no input, organization only. |
| Amount Selection | A fixed list of payable amounts to choose from — ticket tiers, donation levels. |
| Custom Amount | A free-entry payable amount — "pay what you want" donations, custom quotes. |
| Calculation | A value automatically computed from other fields — tax, totals, BMI, scores. |
| Product Item (Qty × Price) | An order line item with quantity, unit price and an auto-calculated total. |
| Slider | A range input for picking a numeric value between a minimum and maximum. |
| HTML / Custom Content | Custom HTML content or instructions inserted between fields — not an input. |
Every field, regardless of type, shares four common settings:
| Setting | Description |
|---|---|
| Field Label | The visible question or field name. Also used to auto-generate the Field ID. |
| Field ID | A unique, auto-generated identifier used internally and in email placeholders (e.g. full_name). Read-only. |
| Placeholder Text | Faint hint text shown inside an empty field. |
| Required Field | When checked, the form cannot be submitted until this field has a value. |
| Field Width (Column) | How much row width the field occupies — see Field Layout. |
Basic input fields
Text
Used for any short, single-line answer — full name, company name, subject line, reference number.
Renders as a standard text input. No type-specific options beyond the common field settings.
Used to collect an email address. Combine with Payment Gateways — every gateway needs an email field on the form.
Adds automatic email-format validation in the browser and on the server, on top of the common field settings.
Phone
Used to collect a phone or mobile number, e.g. for order confirmations or gateway checkout prefill.
Renders as a telephone-type input. Pair with the phone validation rule (see Validation Rules) to enforce a valid phone format.
Number
Used for any numeric-only value that isn't a payment amount — age, headcount, a quantity, a reference number.
The server rejects any non-numeric submission. Pair with the min_value / max_value validation rules to enforce a numeric range.
Textarea
Used for longer free-text answers — a message, comments, a project brief, special instructions.
Renders as a multi-line text box. No type-specific options beyond the common field settings.
Choice fields
Dropdown
Used when a visitor should pick exactly one option from a longer list, without taking up much vertical space — country, department, service type.
Options: an editable list of choices; any option can be marked Selected to pre-select it as the default value.
Radio Buttons
Used when a visitor should pick exactly one option from a short list, and you want every option visible at a glance — plan tier, yes/no/maybe.
Options: same editable option list as Dropdown, with one option markable as the default selection.
Checkboxes
Used when a visitor can pick more than one option — interests, add-on services, newsletter opt-ins.
Options: same editable option list; submits as an array of every option the visitor checked, so it can be referenced in conditional logic and exports.
Specialized fields
Date Picker
Used for any date input — appointment date, date of birth, event date, deadline.
Date Format: DD-MM-YYYY. The date picker displays dates in day-month-year format.
Time Picker
Used for time-of-day input — a booking slot, a preferred call-back time.
Time Format: 24-hour format with minute by minute selection.
File Upload
Used to collect attachments — a resume, ID proof, a reference image, a signed document.
Allowed File Types: a comma-separated list of extensions (e.g. jpg,png,pdf,doc). Max File Size: 1–100 MB (default 10 MB).
file_type / file_size rules under Validation Rules on the field — these take priority over the basic Allowed File Types / Max File Size settings.Address
Used to collect a structured mailing or billing address instead of one free-text field.
Sub-fields: choose which of Street Address, City, State/Province, ZIP/Postal Code, and Country to include (all five are included by default). Each selected sub-field renders as its own input; ZIP codes are format-validated on the server.
Rating
Used for feedback and review forms — "How would you rate our service?"
Maximum Rating: 5 Stars or 10 Stars. Renders as a row of clickable stars.
Slider
Used to pick a numeric value visually within a defined range — a budget range, a satisfaction score, a percentage.
Options: Minimum Value, Maximum Value, Step Value. Renders as a draggable range control with a live numeric readout.
Payment & calculation fields
Amount Selection
Used to offer a fixed menu of payable amounts on a payment form — ticket price tiers, donation levels, package pricing.
Options: a repeatable list of Label + Amount pairs (e.g. "Bronze — 500", "Gold — 1500"). The visitor picks one, and it becomes part of the total charged.
Custom Amount
Used when the visitor should choose their own amount to pay — "pay what you want" donations, custom deposits or quotes.
Renders as a plain numeric input (minimum 0.01) that feeds directly into the payment total. No additional options.
Calculation
Used to show a value automatically derived from other fields on the form — a tax amount, a shipping fee, a BMI or age calculator, a weighted score.
Formula: reference any other field with {field_id} tokens and standard math operators — + − × ÷ % ^ ( ). Use the Insert Field button to browse and insert field tokens without typing IDs by hand, and the live Formula Preview to check the result as you build it.
Other options: Decimal Places (0–4), Prefix (e.g. a currency code), Suffix (e.g. "%"), custom Help Text, and Add this value to the form's Total Amount.
Product Item (Qty × Price)
Used to build an order form — each Product Item field is one line item with a quantity, a unit price, and an automatically calculated line total.
Options: Default Unit Price (0 lets the visitor enter their own price), Default Quantity, whether the Price is Editable by the visitor, Currency (around 55 currencies supported), Calculation Type (Quantity × Price or Quantity + Price), and Add to Grand Total (on by default).
Layout & content fields
Section Divider
Used to visually break a long form into labeled sections — not an input, purely organizational.
Section Style: Simple Divider, Boxed Section (shows a title and description in a bordered box), or Card Style (shows a title and description in a card-style block).
HTML / Custom Content
Used to insert custom formatting, instructions, or embedded content between fields — a paragraph of instructions, a disclaimer, an embedded video or image.
HTML Content: a raw HTML text box, rendered safely (scripts and unsafe tags are stripped) between the surrounding fields.
Validation Rules
Validation rules help make sure visitors enter valid, accurate information before they can submit the form. Add one or more rules to any field from its editor.
How to add a validation rule
- Open the field you want to validate.
- Scroll to the Validation Rules section.
- Click Add Validation Rule.
- Choose a rule from the Select Rule dropdown.
- Enter a value or pattern, if the rule requires one.
- Optionally enter a Custom Validation Message to replace the default error text.
- Click Save Field.
| Rule | Applies to | What it checks |
|---|---|---|
email | Any text field | The value must be a valid email address. |
url | Any text field | The value must be a valid URL. |
phone | Any text field | The value must be a valid phone number. |
min_length | Text-based fields | The value must contain at least the specified number of characters. |
max_length | Text-based fields | The value must not exceed the specified number of characters. |
min_value | Number fields | The numeric value must be greater than or equal to the specified minimum. |
max_value | Number fields | The numeric value must be less than or equal to the specified maximum. |
pattern | Any text field | The value must match a custom regular expression you provide. |
file_type | File Upload fields | Restricts uploads to a comma-separated list of file extensions. |
file_size | File Upload fields | Restricts the maximum upload size, in MB. |
Cross-field validation
SKT Forms also supports validation rules that compare a field's value to another field on the same form — useful whenever one field's correctness depends on another.
| Rule | Purpose |
|---|---|
equals_field | The field's value must match the value of another field — e.g. Confirm Email must equal Email. |
not_equals_field | The field's value must be different from the value of another field. |
greater_than_field | The field's value must be numerically greater than another field's value — e.g. an End Date after a Start Date. |
less_than_field | The field's value must be numerically less than another field's value. |
depends_on_field | The field only becomes required if another field currently has a specific value. |
equals_field on a Confirm Email or Confirm Password field to make sure both entries match before the form can be submitted.Conditional Logic
Conditional logic shows, hides, enables or disables a field based on the value of another field — for example, revealing a "Company Name" field only when the visitor selects "Business" as their account type. Rules are organized into Rule Groups in the form builder, below the field list.
- Click Add Rule Group.
- Choose whether conditions inside the group must all be true (
AND) or whether any can be true (OR). - Add one or more rules: pick a Field, an Operator, a comparison Value, an Action, and the Target Field the action applies to.
- Add further rule groups for more complex logic — if a form has multiple groups, the overall condition passes if any one group passes.
Actions
| Action | Effect on the target field |
|---|---|
| Show Field | Reveals a hidden field when the condition is met. |
| Hide Field | Hides the field when the condition is met. |
| Field Editable | Enables (unlocks) the field for editing. |
| Field Read-only | Disables the field so it can't be edited. |
Operators
SKT Forms supports 21 comparison operators, giving you fine control over exactly when a rule fires:
| Operator | True when… |
|---|---|
equals | the field's value exactly matches the comparison value. |
not_equals | the field's value does not match the comparison value. |
contains | the field's value contains the comparison text. |
not_contains | the field's value does not contain the comparison text. |
greater_than | the field's numeric value is greater than the comparison value. |
greater_than_or_equal | the field's numeric value is greater than or equal to the comparison value. |
less_than | the field's numeric value is less than the comparison value. |
less_than_or_equal | the field's numeric value is less than or equal to the comparison value. |
between | the field's numeric value falls between two comparison values. |
not_between | the field's numeric value falls outside two comparison values. |
starts_with | the field's value starts with the comparison text. |
ends_with | the field's value ends with the comparison text. |
regex_match | the field's value matches a regular expression. |
in_list | the field's value matches one item in a comma-separated list. |
not_in_list | the field's value matches none of the items in a comma-separated list. |
is_empty | the field currently has no value. |
is_not_empty | the field currently has a value. |
is_null | the field has never been set. |
before_date | the field's date value is before the comparison date. |
after_date | the field's date value is after the comparison date. |
within_days | the field's date value falls within a number of days from today. |
Payment Gateways
SKT Forms connects to six payment options, configured under SKT Forms → Payments. Enable the gateways you want to accept, add your credentials, then select them on any form with Payment Collection turned on.
| Gateway | Currencies | Credentials needed | Notes |
|---|---|---|---|
| Razorpay | INR, USD | Key ID + Key Secret (test & live), optional Webhook Secret | Choose Flash (instant payment link) or Normal (redirect to Razorpay Checkout) checkout method. |
| PayU | INR, USD | Merchant Key + Salt Key (test & live), optional Auth Header | Generates a secure, hash-signed payment form for checkout. |
| PayPal | ~90 currencies incl. USD, EUR, GBP, INR | Client ID + Client Secret (test & live) | Renders PayPal's own Buttons widget on the form for checkout. |
| PhonePe | INR | OAuth Client ID + Client Secret + Client Version (test & live) | Uses PhonePe's SDK v2 OAuth token flow. |
| Instamojo | INR | API Key + Auth Token (test & live) | Popular for Indian merchants; supports cards, UPI, netbanking and wallets. |
| Cash on Delivery | INR, USD, EUR | None required for use | An always-offline option for collecting orders without an online charge — supports a ₹0/$0 amount. |
Common Payment Settings
Below the gateway list on the Payments screen, Common Settings controls what happens after a payment attempt finishes, and where global payment email notifications are sent.
Success / Failure / Cancel page handling
Pick a WordPress page to redirect customers to for each outcome. Use the Create Default Payment Pages button to auto-generate sample pages with working placeholders already inserted.
| Page | Available placeholders |
|---|---|
| Success Page | [TRANSACTION_ID], [AMOUNT], [DATE], [CUSTOMER_NAME], [CUSTOMER_EMAIL], [PAYMENT_STATUS] |
| Failure Page | [TRANSACTION_ID], [AMOUNT], [DATE], [FAILURE_REASON] |
| Cancel Page | [TRANSACTION_ID], [AMOUNT], [DATE] |
[AMOUNT], which is different
from the curly-brace {amount} placeholders used in email templates — see Placeholders.
Payment notifications
Set a global Admin Email for payment alerts and toggle Enable email notifications for payments on or off for the whole site.
Transactions
Every payment attempt and every data-collection submission is logged under SKT Forms → Transactions, whether or not money changed hands.
| Status | Meaning |
|---|---|
| Pending | A payment was started but the gateway hasn't confirmed the outcome yet. |
| Success | The payment completed successfully. |
| Failed | The payment attempt was declined or errored. |
| Data Collection | The form has no payment attached — this is a plain form submission. |
Stat tiles at the top show Total Form Submissions, Successful Payments and Pending Payments. Filters let you narrow the list by status, gateway and date range. Bulk actions include Delete, Export Selected, and Approve (to manually mark a pending or Cash on Delivery order as paid). Click View on any row to see the full submitted data and gateway response for that transaction. Export the list as CSV, JSON, or Excel.
Spam Protection
SKT Forms offers four ways to keep bots from submitting your forms, configured under SKT Forms → Integration for the three external services, and directly on each form for Math Captcha.
| Provider | What you need |
|---|---|
| Math Captcha | Nothing external — built in. Choose an Operation (Addition, Subtraction, Multiplication, or Mixed) and a Difficulty (Easy, Medium, Hard) directly on the form. |
| Google reCAPTCHA | Site Key and Secret Key from the Google reCAPTCHA admin console (v2 "I'm not a robot" checkbox). |
| Cloudflare Turnstile | Site Key and Secret Key from the Cloudflare Turnstile dashboard. |
| hCaptcha | Site Key and Secret Key from the hCaptcha dashboard. |
- Go to SKT Forms → Integration.
- Enable the provider you want to use and paste in its Site Key and Secret Key.
- Click Save Security Settings.
- Open any form, and select the now-available provider under Spam Protection (Captcha) in Form Settings.
Email Notifications
SKT Forms sends up to six kinds of email, depending on whether a form collects payment. Manage the four payment emails globally, and customize any of the six per form.
| Notification | Sent to | Trigger |
|---|---|---|
| Payment Success | Customer | A payment completes successfully. |
| Payment Success | Admin | A payment completes successfully. |
| Payment Failed | Customer | A payment attempt fails. |
| Payment Failed | Admin | A payment attempt fails. |
| New Submission Notification | Admin | A non-payment (data collection) form is submitted, if that form's "Send Email Notification" is on. |
| Submission Confirmation | Customer | A non-payment form is submitted. Off by default — enable it per form. |
- Go to SKT Forms → Email Notifications.
- Find the form you want to configure, and click Customize Email.
- Enable or disable individual notification types with the checkbox next to each one.
- Edit the Subject and Message for any template — use the placeholders listed at the bottom of the page.
- Click Save Email Settings.
Sender settings
| Setting | Description |
|---|---|
| Admin Email | Where admin-facing notifications are delivered. |
| From Name | The sender name shown to recipients. |
| From Email | The sender address used to send the email. |
Settings follow a fallback order: a per-form setting always wins if you've set one; otherwise the global Email Notifications setting is used; otherwise SKT Forms falls back to your site's default admin email and name.
Placeholders
Type these directly into any notification Subject or Message field — they're replaced with real values when the email is sent.
| Placeholder | Displays |
|---|---|
{transaction_id} | The transaction ID. |
{amount} | The payment amount, formatted with the transaction's currency. |
{customer_name} | The customer's name. |
{customer_email} | The customer's email address. |
{payment_date} | The date and time of the payment. |
{payment_method} | The gateway used, shown by its display name (e.g. "Cash on Delivery"). |
{form_title} | The title of the submitted form. |
{site_name} | Your WordPress site's name. |
{all_fields} | An automatically formatted table of every field submitted on the form. |
{field_<field id>} — for
example {field_full_name} or {field_estimated_budget} — so you can insert one
specific answer into the email instead of the full {all_fields} table. The full list for each
form is shown at the bottom of that form's email editor.
Analytics Dashboard
The Analytics Dashboard shows how visitors actually interact with a form — not just whether they submitted it, but where they dropped off along the way.
Metrics
| Metric | Description |
|---|---|
| Total Events | Every tracked event for the selected form and filters, of any type. |
| Field Interaction | How many times visitors interacted with individual fields. |
| Form Views | How many times the form was displayed to a visitor. |
| Form Starts | How many visitors began filling the form out. |
| Form Completions | How many visitors successfully completed and submitted the form. |
Tracked event types
| Event | Captured when… |
|---|---|
form_view | The form is rendered on the page. |
form_start | A visitor first interacts with the form. |
field_interaction | A visitor interacts with any individual field. |
validation_error | A field fails validation. |
form_submit | The form is submitted (before payment/validation completes). |
payment_start | A payment flow begins. |
payment_complete | A payment succeeds. |
payment_failed | A payment fails. |
form_complete | The submission finishes successfully end-to-end. |
form_abandon | A visitor leaves the page without completing the form. |
Use the Select Form, From/To Date and Event Type filters to narrow the data, then Apply Filters. The events table below shows every matching event with its type, data, visitor IP, session ID, referrer and timestamp — click View Details on any row for the full event payload. Export the filtered data as CSV, JSON, or Excel.
Frequently Asked Questions
How do I create my first payment form?
Go to SKT Forms → Forms → Add New, fill in the form title and description, add the fields you need (including a Name and Email field), turn on Payment Collection, select a gateway, and save. Then paste the generated shortcode onto any page or post.
Which payment gateways are supported?
Razorpay, PayU, PayPal, PhonePe, Instamojo, and Cash on Delivery — see Payment Gateways for details on each.
Can I customize the form's appearance?
Yes. SKT Forms outputs a set of predictable CSS classes you can target with your own theme's stylesheet:
| Class | Targets |
|---|---|
.skt-forms-form-wrapper | The overall form container. |
.skt-forms-field | An individual field wrapper. |
.skt-forms-field-label | Field labels. |
.skt-forms-field-input | Field inputs. |
.skt-forms-submit-btn | The submit button. |
How do I test payments before going live?
Enable Test Mode in the gateway's settings and use its sandbox credentials. Common test cards:
| Gateway | Test card | Result |
|---|---|---|
| Razorpay | 4111 1111 1111 1111 | Success |
| 4000 0000 0000 0002 | Failure | |
| PayU | 4012 0000 0000 0000 | Success |
| 4000 0000 0000 0002 | Failure |
Troubleshooting
Payments not processing
- Double-check the gateway credentials on the Payments screen.
- Confirm the webhook URL is reachable — each gateway's webhook lives at
/wp-json/skt-forms/v1/webhook/<gateway>. - Check your server's error logs for details.
- Make sure SSL is enabled before switching a gateway to live mode.
Form not displaying
- Confirm the form's Status is set to Active.
- Double-check the shortcode syntax —
[skt_forms id="1"]with the correct numeric ID. - Check the browser console for JavaScript errors that might indicate a conflict with your theme or another plugin.
Webhook issues
- Verify the webhook secret configured in SKT Forms matches the one in your gateway's dashboard.
- Confirm the webhook URL is publicly accessible (not blocked by a firewall or staging password).
- Review your server logs for incoming webhook requests and their responses.
wp-config.php for detailed error logging while troubleshooting:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);