{"id":32310,"date":"2014-10-16T05:22:26","date_gmt":"2014-10-16T05:22:26","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/sagepay-form-payment-gateway-for-gravity-forms\/"},"modified":"2026-04-07T15:04:17","modified_gmt":"2026-04-07T15:04:17","slug":"sagepay-form-payment-gateway-for-gravity-forms","status":"publish","type":"plugin","link":"https:\/\/tw.wordpress.org\/plugins\/sagepay-form-payment-gateway-for-gravity-forms\/","author":8520520,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.2","stable_tag":"1.2.2","tested":"6.9.4","requires":"4.5","requires_php":"","requires_plugins":null,"header_name":"Opayo Form Gateway for Gravity Forms","header_author":"PatSaTECH","header_description":"","assets_banners_color":"ced2e3","last_updated":"2026-04-07 15:04:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"http:\/\/www.patsatech.com\/","header_author_uri":"http:\/\/www.patsatech.com","rating":0,"author_block_rating":0,"active_installs":80,"downloads":5984,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"patsatech","date":"2014-10-16 06:14:02"},"1.1.0":{"tag":"1.1.0","author":"patsatech","date":"2015-09-14 23:09:03"},"1.1.1":{"tag":"1.1.1","author":"patsatech","date":"2015-10-27 19:17:52"},"1.1.2":{"tag":"1.1.2","author":"patsatech","date":"2017-12-21 15:01:40"},"1.1.3":{"tag":"1.1.3","author":"patsatech","date":"2017-12-21 15:04:30"},"1.1.4":{"tag":"1.1.4","author":"patsatech","date":"2018-11-20 17:24:48"},"1.1.5":{"tag":"1.1.5","author":"patsatech","date":"2018-11-24 14:58:26"},"1.1.6":{"tag":"1.1.6","author":"patsatech","date":"2021-07-21 10:21:06"},"1.1.7":{"tag":"1.1.7","author":"patsatech","date":"2022-02-25 17:53:48"},"1.1.8":{"tag":"1.1.8","author":"patsatech","date":"2022-12-01 15:39:07"},"1.1.9":{"tag":"1.1.9","author":"patsatech","date":"2023-03-28 17:40:37"},"1.2.0":{"tag":"1.2.0","author":"patsatech","date":"2026-03-22 16:02:41"},"1.2.1":{"tag":"1.2.1","author":"patsatech","date":"2026-04-03 09:39:38"},"1.2.2":{"tag":"1.2.2","author":"patsatech","date":"2026-04-07 15:04:17"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":2888624,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":2888624,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":2888624,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.2.0","1.2.1","1.2.2"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[282,1655,201126,201125,6593],"plugin_category":[45],"plugin_contributors":[85964],"plugin_business_model":[],"class_list":["post-32310","plugin","type-plugin","status-publish","hentry","plugin_tags-ecommerce","plugin_tags-gravity-forms","plugin_tags-opayo-go","plugin_tags-opayo-server","plugin_tags-payment-gateway","plugin_category-ecommerce","plugin_contributors-patsatech","plugin_committers-patsatech"],"banners":{"banner":"https:\/\/ps.w.org\/sagepay-form-payment-gateway-for-gravity-forms\/assets\/banner-772x250.png?rev=2888624","banner_2x":"https:\/\/ps.w.org\/sagepay-form-payment-gateway-for-gravity-forms\/assets\/banner-1544x500.png?rev=2888624","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/sagepay-form-payment-gateway-for-gravity-forms\/assets\/icon.svg?rev=2888624","icon":"https:\/\/ps.w.org\/sagepay-form-payment-gateway-for-gravity-forms\/assets\/icon.svg?rev=2888624","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This add-on connects <strong>Gravity Forms<\/strong> to <strong>Opayo Form<\/strong> (formerly Sage Pay Form), Elavon\u2019s hosted payment integration. Shoppers are sent to Opayo to enter card details; card data never touches your WordPress site, which keeps your PCI scope lower than with on-page card fields.<\/p>\n\n<p><strong>You need<\/strong><\/p>\n\n<ul>\n<li>WordPress 4.5 or higher and a supported PHP version (7.0+ recommended).<\/li>\n<li><strong>Gravity Forms<\/strong> with a license that includes payment add-ons (this plugin extends the Gravity Forms payment framework).<\/li>\n<li>An <strong>Opayo<\/strong> account with <strong>Form<\/strong> integration enabled, plus your vendor name and Form encryption password from <strong>MyOpayo<\/strong>.<\/li>\n<\/ul>\n\n<p><strong>What it supports<\/strong><\/p>\n\n<ul>\n<li>Product and donation feeds, billing field mapping, and delayed notifications or post creation until payment completes (where you configure it in the feed).<\/li>\n<li>Opayo <strong>VPS Protocol 4.00<\/strong>, test and live modes, and current Elavon gateway hosts (<code>sandbox.opayo.eu.elavon.com<\/code> \/ <code>live.opayo.eu.elavon.com<\/code>), with a filter to override URLs if your integration pack specifies different endpoints.<\/li>\n<li>Reliable handoff to Opayo using a short on-site URL plus a transient (avoids oversized query strings that can cause registration errors).<\/li>\n<li>After payment, customers can be returned to the form\u2019s page so Gravity Forms can run the normal <strong>confirmation<\/strong> (message or redirect), using the entry\u2019s source URL when available.<\/li>\n<\/ul>\n\n<p><strong>Support and feedback<\/strong><\/p>\n\n<p>Questions or ideas: <a href=\"https:\/\/www.patsatech.com\/contact-us\">contact PatSaTECH<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li><p><strong>Install Gravity Forms<\/strong> (if it is not already installed) and ensure your license supports payment add-ons.<\/p><\/li>\n<li><p><strong>Install this plugin<\/strong><\/p>\n\n<ul>\n<li>In WordPress: <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, choose the ZIP, then <strong>Install Now<\/strong>, <strong>Activate<\/strong>; or<\/li>\n<li>Upload the plugin folder to <code>wp-content\/plugins\/<\/code> via FTP\/SFTP, then activate under <strong>Plugins<\/strong>.<\/li>\n<\/ul><\/li>\n<li><p><strong>Configure Opayo (global)<\/strong><br \/>\nGo to <strong>Forms \u2192 Settings \u2192 Opayo Form<\/strong> (or the Opayo Form item under Gravity Forms settings). Enter <strong>Vendor name<\/strong>, <strong>Encryption password<\/strong>, <strong>Vendor email<\/strong>, choose <strong>Test<\/strong> or <strong>Live<\/strong>, set <strong>Transaction type<\/strong> (e.g. PAYMENT), and save. Use the credentials from <strong>MyOpayo<\/strong> for the same environment (test vs live).<\/p><\/li>\n<li><p><strong>Add a payment feed to a form<\/strong><br \/>\nOpen your form \u2192 <strong>Settings \u2192 Opayo Form<\/strong> \u2192 add a feed. Map billing fields, choose products or donations, and adjust notifications\/posts options as needed. There is no separate \u201cCancel URL\u201d or \u201cSuccess URL\u201d field: cancel uses the entry <strong>source URL<\/strong> (the page where the form was submitted), and success returns through Gravity Forms\u2019 normal confirmation flow.<\/p><\/li>\n<li><p><strong>Test<\/strong><br \/>\nUse Opayo <strong>test\/sandbox<\/strong> mode and a test card until you are satisfied, then switch to <strong>Live<\/strong> and verify with a small real transaction.<\/p><\/li>\n<\/ol>\n\n<p>For gateway-specific rules, limits, and 3D Secure behaviour, refer to <strong>Opayo \/ Elavon<\/strong> documentation and your MyOpayo account.<\/p>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial Release<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Completely rewritten to work with latest version of GravityForms plugin.<\/li>\n<li>Conditional Logic Issues resolved.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Have resolved the issue related to \"Uncaught SecurityError\" during redirecting to Opayo.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Minor code changes<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Updated the tested upto for Wordpress.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Updated to support the PHP version 7.0 and above.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Updated to resolve issue with Apply3DSecure flag.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Edited to send 2 character ISO 3166 country code.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Edited to check if the entry is already paid or processing. And resolve 5080 issue due to state being empty.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Edited to support the latest version of the Opayo protocol (v4.00).<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Updated to change branding from Sagepaay to Opayo.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Hardened IPN\/callback handling (validate crypt, decode before logging, safer VendorTxCode parsing, correct error when entry is missing).<\/li>\n<li>Fixed duplicate-payment guard when redirecting to Opayo (avoid blocking legitimate submissions).<\/li>\n<li>Restored Apply 3D Secure global setting and send Apply3DSecure in the Crypt payload.<\/li>\n<li>Fixed mislabeled transaction type setting; use version_compare for OpenSSL vs mcrypt.<\/li>\n<li>Added filter gform_sagepay_form_gateway_register_url to override test\/live registration URLs if Opayo changes endpoints.<\/li>\n<li>Synced plugin version constant with readme; trimmed noisy debug logging on redirect.<\/li>\n<li>Default Form registration URLs now use Elavon Opayo hosts (sandbox.opayo.eu.elavon.com \/ live.opayo.eu.elavon.com) instead of legacy test.sagepay.com \/ live.sagepay.com. Same path: \/gateway\/service\/vspform-register.vsp. Use filter gform_sagepay_form_gateway_register_url to point at legacy or alternate URLs if required.<\/li>\n<li>Fixed Opayo Form Crypt encryption for PHP OpenSSL: removed double padding (manual PKCS5 plus OpenSSL PKCS7), which commonly caused error 5080 \u201cForm transaction registration failed\u201d. Encryption now matches Opayo\u2019s documented approach (16-byte key\/IV from password, uppercase hex).<\/li>\n<li>Amount sent as formatted decimal (e.g. 10.00). Sanitize Crypt field values (control characters). Safer VendorData mapping; optional ReferrerID via filter gform_sagepay_form_referrer_id.<\/li>\n<li>Resolve Opayo Vendor from add-on settings, legacy gf_sagepay_form_configured option, or wrongly nested upgrade data; filter gform_sagepay_form_vendor_name.<\/li>\n<li>Block checkout if vendor name is still missing (clear error instead of posting blank Vendor to Opayo).<\/li>\n<li>On the bridge page, reinject Vendor from saved settings when the query string omits it; restore hidden fields and auto-submit (removed debug text inputs \/ disabled submit).<\/li>\n<li>Upgrade copy_settings now merges legacy settings flat instead of nesting them under gf_sagepay_form_configured.<\/li>\n<li>Default payment handoff uses a short URL + server-side transient, then POSTs to Opayo (avoids huge Crypt in the query string, which is often truncated by servers\/proxies and causes 5080).<\/li>\n<li>Strip &amp; and = from values inside the encrypted Crypt payload (they break Opayo\u2019s name=value parsing).<\/li>\n<li>Filters: gform_sagepay_form_use_transient_bridge (default true), gform_sagepay_form_bridge_params.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed <strong>Send E-Mail<\/strong> (\u201cNo One\u201d = <code>0<\/code>) and <strong>Apply 3D Secure<\/strong> (\u201cNo\u201d = <code>0<\/code>) not being applied when saving settings: Gravity Forms <code>rgar()<\/code> \/ PHP treat string <code>\"0\"<\/code> as empty, so the add-on fell back to defaults (<code>SendEMail<\/code> = 2 vendor-only, 3DS = Yes). Settings are now read with a helper that uses <code>array_key_exists()<\/code> so <code>0<\/code> is preserved in the Opayo Crypt payload.<\/li>\n<li>Readme: expanded Description and Installation; aligned <strong>Requires at least<\/strong> with the plugin header; <strong>Tested up to<\/strong> WordPress 6.9.4.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Feed settings: optional <strong>Cancel \/ failure return URL<\/strong> and <strong>Success return URL<\/strong>; when empty, behavior matches previous versions (entry source URL \/ home for cancel). Filters <code>gform_sagepay_form_cancel_return_url<\/code> and <code>gform_sagepay_form_success_return_url<\/code> accept an optional fourth argument (<code>$feed<\/code>).<\/li>\n<\/ul>","raw_excerpt":"Accept card payments in Gravity Forms using Opayo Form (hosted checkout by Elavon)\u2014customers pay on Opayo\u2019s pages, not on your server.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/32310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=32310"}],"author":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/patsatech"}],"wp:attachment":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=32310"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=32310"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=32310"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=32310"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=32310"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=32310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}