Linux 软件免费装
Banner图

SignSealer

开发者 mashdunllc
更新时间 2026年10月19日 01:34
PHP版本: 7.4 及以上
WordPress版本: 7.1
版权: GPLv2 or later
版权网址: 版权信息

标签

signature agreement esignature contract waiver

下载

1.17.1

详情介绍:

Your site sends somebody a document to sign, and later wants to know whether they signed it. That is the whole job of this plugin. Everything that makes a signature worth having happens on SignSealer: consent recorded as its own event before the signature is accepted, the document's exact text fingerprinted into every entry on the trail, and a hash chain that breaks if any entry is altered. A certificate can be checked afterwards by anyone holding its code, without an account. You need a SignSealer account. This plugin is a client for it. See https://signsealer.com. Three things this plugin refuses to do These are limits on purpose, not features that are missing. It never renders a signature pad. Signing happens on SignSealer's own pages. A drawing captured in WordPress and posted to an API would make every claim on the certificate untrue — the certificate says what the signing engine observed, and it cannot observe something that arrived as a form field. It never stores evidence. Document ids, a status and a link. If you restore a six-month-old backup of this site, nothing about any signature changes, because nothing about any signature was here. It never holds a master credential. The connection is OAuth 2.0 with PKCE, scoped to one business, and you can end it from your own SignSealer account without touching WordPress. There is no key here that reaches two accounts. Why a link, and a frame only where the site is proven SignSealer's signing pages refuse to be framed (frame-ancestors) on any site the business has not proven is its own. A signing page inside another site's frame is a clickjacking target, and the thing being clicked is a signature. So the block, the shortcode and the forms send the signer to SignSealer's own page, where they can see whose address bar they are signing on. The frames are where signing comes first, on this site: WooCommerce's Before payment, a form set to be signed before it is sent, and Amelia's and Simply Schedule Appointments' signing before the booking. Connecting the plugin proves the site to SignSealer, which is what lets its signing page be shown here. What it does For developers Every verified delivery fires an action: add_action( 'signsealer_event', function ( $event, $payload ) { if ( 'signing.completed' === $event ) { // $payload['document']['id'] has signed. } }, 10, 2 ); The signature is checked before this fires, so a handler can trust what it is handed. Once a document completes, its signers' answers to your form's questions are handed to signsealer_document_completed, asked for from SignSealer just after the delivery. This plugin stores none of them; what your own code does with them is up to it: add_action( 'signsealer_document_completed', function ( $document ) { if ( 'Yes' === ( $document['answer']['married'] ?? '' ) ) { // "Are you married?" was answered Yes. } } ); $document['answer'] has one value per question, by the question's key; a tick box is Yes or No. A question more than one person answered (two signers, each person in a party) holds every different answer, sorted and joined with a comma: Yes means everyone said Yes, No, Yes that they differed. answers_text is every answer, one line each, for an email; answers has each one with who gave it. Sensitive answers are masked, as your staff see them. To ask for a document's answers yourself: signsealer_get_answers( $document_id ). It runs from WP-Cron, so on a site that runs WP-Cron from the server it waits for the next run.

安装:

  1. Install and activate the plugin.
  2. Open SignSealer → Start here in the admin menu and press Connect to SignSealer.
  3. Sign in to SignSealer (or create an account there), choose the business this site belongs to, and approve. You are brought straight back.
  4. Back on Start here, pick the integrations you want. Each card has its three steps and a link to a step-by-step guide at https://signsealer.com/wordpress.
The plugin registers itself with SignSealer, registers its own webhook endpoint, and signed statuses start arriving with nothing to copy or paste. Your site must be on https: SignSealer checks the plugin is really running there before it connects, and https is also how it posts signed statuses back.

屏幕截图:

  • SignSealer → Bookings: the agreement each accommodation type starts, and
  • SignSealer → Templates: the business's forms and templates, with the
  • With Before payment, the cart sends the customer to sign the agreement
  • The signing page on your own site, in your theme.

升级注意事项:

1.17.1 Saving a form's settings keeps every line of its extra blanks, which 1.17.0 joined into one. Automator's "Any form" is the business's forms only. 1.17.0 A form's answers for your own code and for Uncanny Automator recipes, asked for when a document completes. The plugin stores none of them. 1.16.2 Stylesheets and scripts in files of their own, output escaped as it is printed, and no token on the plugin's public page. 1.16.1 Nonces on the forms the plugin draws for visitors and on Amelia's question; fewer admin notices. 1.16.0 Amelia and Simply Schedule Appointments: the person who booked signs on the page, Amelia before it books. 1.15.0 An optional "Signed with SignSealer" line under the signing button, off unless you turn it on. 1.14.5 Connecting finishes by itself when SignSealer did not answer at first, and the signing button keeps its business after the token is refreshed. 1.14.4 Security and reliability fixes from a review: no unserializing of form answers, one token refresh at a time, and a limit on agreements started by one visitor. 1.14.3 Wording on SignSealer → Bookings, and new screenshots. 1.14.2 No change in what it does: Plugin Check reports nothing at any severity. 1.14.1 Start here: a card and a guide for each of Amelia, LatePoint and Simply Schedule Appointments. 1.14.0 Bookly: an appointment booked on its form can now start its agreement. 1.13.0 MotoPress Hotel Booking: a confirmed stay can now start its rental agreement. 1.12.0 FluentBooking: a meeting or lesson booked on its pages can now start its agreement. 1.11.0 Booking Calendar: a booking on its calendar can now start its agreement. 1.10.0 Events Manager: a booking for an event can now start its waiver or agreement. 1.9.0 Event Tickets: an RSVP or a ticket for an event can now start its waiver or agreement. 1.8.0 Forminator, MetForm, Everest Forms and JetFormBuilder: a form submission in each can now start a signing, before or after the form is sent. Amelia, LatePoint and Simply Schedule Appointments: a booking can start its agreement. 1.7.1 A rental agreement's pickup and return boxes, filled in by the sender, are listed with the form's other blanks. 1.7.0 Formidable Forms, Ninja Forms and SureForms. A form can sign before it is sent. Form settings move into each form plugin, the shop's into WooCommerce → Settings. A template's extra blanks are answered by you or asked of the person. The link to sign is a button. 1.6.3 WooCommerce no longer marks the plugin incompatible with its block cart and checkout. 1.6.2 With signing before payment, the cart sends customers to sign first, and the signing page looks like part of your shop. 1.6.1 An order's agreement no longer shows as "draft" for a moment after it is sent. 1.6.0 Customers can ask for the signing link by text as well as email, at checkout or on a form, when your SignSealer plan includes texting. 1.5.1 The Sign button is styled on block themes, and the thank-you page asks for the signature once, near the top. 1.5.0 SignSealer moves from Settings to its own menu item, with a Start here page that explains each integration. Old links still work. 1.4.2 Deleting the plugin now removes everything it stored. 1.4.1 Gravity Forms submissions now go straight to the signing page, and spam entries start nothing. 1.4.0 WooCommerce can require the agreement to be signed before payment. 1.3.2 Reconnecting no longer adds a duplicate webhook endpoint. 1.3.1 The block's editor script updates with the plugin and can be translated. 1.3.0 Connecting no longer asks for an application id and secret. Already connected sites are unaffected. 1.2.0 WooCommerce Bookings and Contact Form 7. Nothing changes for a site that uses neither. 1.1.0 WooCommerce, Gravity Forms, WPForms and Fluent Forms integrations, and the signer is sent back to your site afterwards. Nothing changes for a site that uses none of them. 1.0.1 Three screens that told you something untrue. One of them, if you did what it said, registered a second webhook endpoint and doubled what you were billed for deliveries. 1.0.0 First release.

常见问题:

Why does my site need to be on https?

Two reasons. Before SignSealer connects a site it fetches a small page the plugin serves, to check the plugin is really running there and that the request came from this site; it will only do that over https, so nobody can register an application in your site's name. And once connected, SignSealer posts signed statuses back to your site, which must also be over https so those deliveries are private and verifiable.

Do I need a SignSealer account?

Yes. This plugin talks to the SignSealer API; it is not a standalone signing tool.

Where is the signed document kept?

On SignSealer, with its certificate and audit trail. This site keeps the document's id and its status so a page can say whether it is signed.

Can I collect the signature on my own page?

No, and that is deliberate. See "Three things this plugin refuses to do" above.

Does the plugin add a link or a credit to my site?

Not unless you ask it to. Under SignSealer → Settings → The sign button there is a setting, off by default, that puts a small "Signed with SignSealer" line under the signing button block and the [signsealer_sign] shortcode, linking to signsealer.com. Only a button to your own business's form gets it: nothing else the plugin shows, and not a shortcode pointed at another business. A business with white label is not offered it.

What happens if I deactivate the plugin?

Nothing at SignSealer. Your documents, evidence and certificates are unaffected. Deactivating does not revoke the connection — end that in SignSealer under Developers → Connected apps.

Does it work with WooCommerce?

Yes. On a product's edit screen, under General, choose the SignSealer agreement that product needs. When an order containing it is paid — or placed, under WooCommerce → Settings → SignSealer — the document is started for the customer, offered on the thank-you page, in their order email and under My Account, and its status appears on the order screen and in the order notes as SignSealer reports it. Works whether your orders live in posts or in WooCommerce's own order tables.

Can the customer sign before they pay?

Yes. Under WooCommerce → Settings → SignSealer choose Before payment. While a customer's cart holds a product whose agreement is unsigned, the cart's checkout button reads Sign the agreement and goes to a page of your site, in your theme, that shows SignSealer's signing page in a frame; a customer who reaches the checkout some other way is sent back to it. The classic checkout and the checkout block both refuse to place the order until SignSealer confirms it is signed, and the order then carries that signed document. SignSealer shows its signing page in a frame only on sites the business has proven, and the site you connected is one.

My agreement asks for something the order does not know

A template blank that nothing fills — {{location}} on a photo release, say — would make SignSealer refuse to start the document. So on the product's edit screen, under its SignSealer agreement, each such blank has a box: fill it in to answer it for every order of that product, or leave it empty and the customer is asked. Before payment they are asked on the signing page, beside their name and email. After payment the order's Sign link — on the thank-you page, in the order email and under My Account — opens a page of your site that asks, and the agreement is sent once they have answered. The order notes say when an agreement is waiting for that.

Does it work with WooCommerce Bookings?

Yes. A bookable product is a product, so mark it the same way. A booking you confirm starts its agreement at once, whether or not it has been paid, because the agreement is wanted before the day. The booking's date, time, number of people and resource go to the template as booking_date, booking_time, persons and resource, and the booking's own screen shows where the agreement stands.

Does it work with Amelia, LatePoint or Simply Schedule Appointments?

Yes, since 1.8.0. Open SignSealer → Bookings, which lists the services in each (in Simply Schedule Appointments, its appointment types), and choose the workflow a booking of each starts. A booking made through the plugin's booking form, or by staff, starts that workflow for the person who booked, and SignSealer emails them the link; LatePoint's confirmation step shows a button to sign too. Since 1.16.0 the person signs on the page in the other two as well. Amelia's booking form opens the agreement over itself when the person presses Book, and makes the booking once it is signed (a booking Amelia takes payment for through Stripe or WooCommerce is made first, and the agreement opens just after). Simply Schedule Appointments opens it over the page as soon as the booking is made, or on the page its form sends people to afterwards. Closed without signing, a button to sign stays on the page, and the email has the link. In Simply Schedule Appointments an appointment waiting on payment starts its agreement once it is booked. The booking fills in booking_date, booking_time, service_name, persons and staff. Any other blank the agreement asks is listed under the service: choose what of the booking answers it (a location blank is given the booking's location, when the plugin has locations set up), or type the answer to use for every booking of that service. A booking saved again — rescheduled, confirmed, paid — starts nothing a second time, and a canceled one starts nothing. If a booking could not start its agreement, SignSealer → Bookings says which and why.

Does it work with Event Tickets?

Yes, since 1.9.0: its RSVPs (the ones Event Tickets 5.30 makes, and the older kind a site has not moved over yet) and its Tickets Commerce tickets, free or paid. Open SignSealer → Bookings. Under Event Tickets, the first row is every ticket and RSVP; each ticket of the events still to come is listed under it, for any that should start a different workflow. Whoever RSVPs or buys is emailed the link to sign: one agreement for each ticket in their order, saying how many people it is for, because Event Tickets asks one name and email an order. A logged-in visitor's RSVP is under their account's email, as Event Tickets records it. The event fills in service_name (the event's name), ticket_name, booking_date, booking_time, persons, location (its venue) and staff (its organizer); an RSVP on a page rather than an event fills in the page's name, the ticket and how many. The RSVP's "received" message and the order page show a button to sign. An RSVP of "not going" starts nothing, and a ticket starts its agreement once its order is completed. Event Tickets Plus, the paid add-on that sells tickets through WooCommerce, has not been tested.

Does it work with Events Manager?

Yes, since 1.10.0. Open SignSealer → Bookings. Under Events Manager, the first row is every event; each event still to come is listed under it, with its date, for any that should start a different workflow (each date of a recurring event is an event of its own). A booking starts its agreement for the person who booked, one agreement a booking with persons the spaces they took, and SignSealer emails them the link; Events Manager's own message after booking shows a button to sign too. A booking waiting for your approval starts it; one waiting on a payment starts it once it is approved; a rejected or cancelled one starts nothing; approving a booking later starts nothing a second time. The event fills in service_name (the event's name), ticket_name, booking_date and booking_time (in the event's own time zone), persons and location. Events Manager Pro's payments and forms have not been tested.

Does it work with Booking Calendar?

Yes, since 1.11.0, with the free Booking Calendar's calendar. Open SignSealer → Bookings and choose the workflow every booking starts. A booking made on the calendar, or added in its admin, starts that workflow for whoever booked, and SignSealer emails them the link; Booking Calendar's own message after booking shows a button to sign too (with its "message" setting for after booking; with its own thank-you page, the email is the way). Its form's fields are read by name: firstname (or name) and secondname, email (or any email field), phone, and adults and children (or visitors) for persons. The booking fills in booking_date (its first day) and booking_time for a time slot. A booking waiting for your approval starts its agreement, and an edited booking does not start a second one. The paid editions' separate resources are not listed yet: their bookings start the one workflow.

Does it work with FluentBooking?

Yes, since 1.12.0. Open SignSealer → Bookings. Under FluentBooking, the first row is every event type; each active event type is listed under it, by its calendar, for any that should start a different workflow. A booking starts its agreement once it is scheduled: booked on its page, added by the host, or, for one waiting for the host's confirmation or a payment, once confirmed or paid. SignSealer emails the person the link, and FluentBooking's confirmation (and its receipt page) shows a button to sign. The booking fills in service_name (the event type), booking_date and booking_time (in the calendar's time zone), persons, staff (the host) and location for an in-person place, with the person's name, email and phone. In a group event each person has a booking of their own and signs their own. FluentBooking Pro's group, round-robin and multi-slot bookings have not been tested.

Does it work with MotoPress Hotel Booking?

Yes, since 1.13.0, with the free MotoPress Hotel Booking Lite (and the paid version, which has the same hooks). Open SignSealer → Bookings. Under MotoPress Hotel Booking, the first row is every accommodation type; each type is listed under it, for any that should start a different rental agreement. A booking starts its agreement once it is confirmed: by the guest's email link (its default), by you, or by a payment. SignSealer emails the guest the link, and its Booking Confirmed page (and Reservation Received after a payment) shows a button to sign. The booking fills in booking_date and booking_time (the check-in date and the site's check-in time), check_out_date, nights, service_name (the accommodation types booked) and persons (the adults and children in all of them), with the guest's name, email and phone. A booking with several accommodations starts the first one's workflow. A booking imported from another site's calendar (Airbnb, Booking.com) has nobody to sign and starts nothing.

Does it work with Bookly?

Yes, since 1.14.0, with the free Bookly (and Bookly Pro, which adds to it). Open SignSealer → Bookings. Under Bookly, the first row is every service; each service is listed under it, for any that should start a different workflow. A booking starts its agreement once it is approved: as it is made, which is Bookly's default, or, for one left pending, when you approve it, when its approve link is followed, or when it is paid for. A booking your staff add in Bookly's calendar starts one too. SignSealer emails the customer the link, and the last step of Bookly's booking form shows a button to sign. The booking fills in service_name, booking_date and booking_time, persons and staff (the staff member), with the customer's name, email and phone. Bookly Pro's recurring appointments start one agreement for the series. A booking whose time has already passed starts nothing. Bookly's free version announces nothing to other plugins, so SignSealer looks for the bookings Bookly approved as each of its requests ends; a booking made some other way, such as Bookly Pro's WooCommerce add-on, is not seen yet.

Does it work with Gravity Forms, WPForms, Fluent Forms or Contact Form 7?

Yes. Open the form's SignSealer settings, in its own plugin: Gravity Forms' form Settings, WPForms' builder Settings, Fluent Forms' Settings & Integrations, or Contact Form 7's SignSealer tab (SignSealer → Forms lists every form with a link there). Choose a workflow and say which of its fields hold the email address and the name (and the last name, when the form asks for it in a field of its own). Every other blank the workflow's document asks is listed, and for each you choose the field that answers it or type the answer to use; one left with neither is asked of the person on a page of your site just before they sign. After they submit, the person is sent straight to the signing page, or the form's own confirmation gains a button to sign — your choice per form. The entry keeps the document's id, title and status, and a note on it says what was sent and what happened. Contact Form 7 keeps no entries, so there the link is carried to its own script and shown under the form's message.

And Formidable Forms, Ninja Forms or SureForms?

Yes, since 1.7.0. In Formidable Forms the settings are in the form's Settings, under SignSealer; in SureForms, in the form's Form Settings, under SignSealer, with a Save button of its own. In Ninja Forms SignSealer is an action: open the form's Emails & Actions, add SignSealer, and fill in the person's email and name with merge tags, the way the form's own email is set up. Each answers the agreement's blanks and sends the person on to sign the same way as the plugins above. These three keep the entry as they always have; see who signed in SignSealer.

Can they sign before the form is sent?

Yes, since 1.7.0. In a form's SignSealer settings, under When they sign, choose Before the form is sent. Pressing the form's own button then opens the agreement over the form, on your page; once it is signed, the form is sent by itself and its entry carries the signed document. Somebody who closes it without signing sends nothing, and no entry is kept. The check is made by your site asking SignSealer, not by the browser, so it cannot be skipped. SignSealer emails them the link as well, as it always does.

A visitor was told "Too many agreements have been started from your connection"

Since 1.14.4 one visitor's address may start 20 agreements an hour, before payment or from a form: enough for anybody signing their own, and a limit on a script sending your agreements to address after address. Your staff, logged in, are not counted. A form sent past the limit keeps its entry, with a note saying nothing was sent. To change the number, return another from the signsealer_starts_per_hour filter (0 for no limit). If your site is behind a proxy that does not pass the visitor's address on, every visitor looks like the proxy: return the address your proxy vouches for from the signsealer_visitor_ip filter.

And Forminator, MetForm, Everest Forms or JetFormBuilder?

Yes, since 1.8.0. None has a place in its own screens for another plugin's settings, so a form's SignSealer settings are a page of this plugin's: open SignSealer → Forms and press Open settings beside the form. MetForm's, Everest Forms' and JetFormBuilder's lists of forms also have a SignSealer link under each form. Everest Forms and JetFormBuilder work whether a form sends with AJAX or reloads the page; a JetFormBuilder form that signs first is sent with AJAX, so the signing can open over it. Both answer the agreement's blanks, can sign before the form is sent, and send the person on to sign the same way as the others. MetForm shows its messages as plain text, so the button to sign appears under the form rather than in its message.

Can WordPress do something different depending on an answer?

Yes, with Uncanny Automator (free). Make an Everyone recipe with the trigger SignSealer → "A document from a form is signed", choose the form, and choose the answer it waits for, such as "Are you married? → Yes". Make a second recipe for "No". Each question on the form is also a token for the recipe's actions. Developers can use the signsealer_document_completed action instead (see For developers).

What about Elementor Pro Forms?

Not yet. Start here names it if it finds it on your site, with the way round it until then: give the form you want signed a public address in SignSealer, and set your form's confirmation to redirect to it (or to a page with the SignSealer agreement block). The person types their name and email again, and nothing is recorded on the entry.

Where did Settings → SignSealer go?

Since 1.5.0 SignSealer has its own item in the admin menu, with Start here, Forms, WooCommerce, Templates and Settings under it. Old bookmarks to the Settings pages still work: they take you to the same page in its new place. Since 1.7.0 a form's settings are with the form, in its own plugin, and the shop's under WooCommerce → Settings → SignSealer; SignSealer's Forms and WooCommerce items take you there.

Does the signer come back to my site afterwards?

Yes, when your site is on https. After signing, the page offers a way back to the order they came from, or the page the form was on. SignSealer only sends people to sites a business has proven it holds, and connecting this plugin proved this one.

更新日志:

1.17.1 1.17.0 1.16.2 1.16.1 1.16.0 1.15.0 1.14.5 1.14.4 1.14.3 1.14.2 1.14.1 1.14.0 1.13.0 1.12.0 1.11.0 1.10.0 1.9.0 1.8.0 1.7.1 1.7.0 1.6.3 1.6.2 1.6.1 1.6.0 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.0 1.1.0 1.0.1 1.0.0