---
title: Auto Activation for SureCart Licenced Plugins
date: 2025-03-01T18:27:59Z
modified: 2025-03-05T00:14:51Z
permalink: "https://techarticles.co.uk/auto-activation-for-surecart-licenced-plugins/"
type: post
status: publish
excerpt: ""
wpid: 4594
categories:
  - Automation
  - Blog
  - Coding
  - Plugins
  - SureCart
  - Wordpress
timestamp: 2025-03-05T00:14:51Z
tags:
  - Automation
  - Blog
  - Coding
  - Plugins
  - SureCart
  - Wordpress
---

I need to be able to auto activate a [surecart](https://ta0.uk/surecart) licensed plugin of mine, Ticket Manager Pro for SureCart, so I could create a sandbox to allow people to test it and this sandbox took a little planning for reasons like I needed to stop plugin uploads but allow people to connect there own SMTP connection – Thanks SureMails and Install SureCart but allow them to be able to connect there own API key.

The issue I had was licenceing just like the bricks dilemea I couldn’t add it to the wp-config for it to spin up on creation so I needed to make another MU plugin to handle licence activation at creation of the site.

My first port of call was the [Surecart SDK](https://github.com/surecart/wordpress-sdk); I was quite quickly able to produce a robust auto-activator that requires only three defined variables to work and should work with all SureCart Licenced products and add it to my MU autoupdater for future updates too.

**Note 1** : SC\_OPTION\_NAME **MUST** be the correct one. I suggest activating and checking the database to make sure you get it correct.

**Note 2:** The Plugins Public Token needs to go in SC\_PUBLIC\_TOKEN not your public token this connects the Licence Key to the plugin / Store and allows you to activate.

```
<span class="line"><span style="color: #F97583"><?</span><span style="color: #79B8FF">php</span></span>
<span class="line"><span style="color: #6A737D">/*</span></span>
<span class="line"><span style="color: #6A737D">Plugin Name: SureCart Plugins License Activator</span></span>
<span class="line"><span style="color: #6A737D">Description: Automatically activates a plugin license via SureCart API.</span></span>
<span class="line"><span style="color: #6A737D">Author: Nathan Foley</span></span>
<span class="line"><span style="color: #6A737D">Version: 1.3</span></span>
<span class="line"><span style="color: #6A737D">*/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">// Exit if accessed directly.</span></span>
<span class="line"><span style="color: #F97583">if</span><span style="color: #E1E4E8"> ( </span><span style="color: #F97583">!</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">defined</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'ABSPATH'</span><span style="color: #E1E4E8"> ) ) {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">exit</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/**</span></span>
<span class="line"><span style="color: #6A737D"> * Configuration constants.</span></span>
<span class="line"><span style="color: #6A737D"> *</span></span>
<span class="line"><span style="color: #6A737D"> * Replace 'your-license-key-here' with your license UUID.</span></span>
<span class="line"><span style="color: #6A737D"> * Replace 'xxx' with your desired prefix (e.g., 'sc') for the option name.</span></span>
<span class="line"><span style="color: #6A737D"> */</span></span>
<span class="line"><span style="color: #79B8FF">define</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC_LICENSE_KEY'</span><span style="color: #E1E4E8">, </span><span style="color: #9ECBFF">'licence key here'</span><span style="color: #E1E4E8"> );</span></span>
<span class="line"><span style="color: #79B8FF">define</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC_OPTION_NAME'</span><span style="color: #E1E4E8">, </span><span style="color: #9ECBFF">'XXXXX_license_options'</span><span style="color: #E1E4E8"> ); </span><span style="color: #6A737D">// This will result in an option named "xxx_license_options".</span></span>
<span class="line"><span style="color: #79B8FF">define</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC_PUBLIC_TOKEN'</span><span style="color: #E1E4E8">, </span><span style="color: #9ECBFF">'Your Plugins Public Token'</span><span style="color: #E1E4E8"> ); </span><span style="color: #6A737D">// This should be the public token".</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/**</span></span>
<span class="line"><span style="color: #6A737D"> * SureCart Licensing Client</span></span>
<span class="line"><span style="color: #6A737D"> */</span></span>
<span class="line"><span style="color: #F97583">class</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">SC_Client</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> $version </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'1.0.1'</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> $public_token;</span></span>
<span class="line"><span style="color: #E1E4E8">    </span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">__construct</span><span style="color: #E1E4E8">( $public_token ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">$this</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">public_token </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> $public_token;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">endpoint</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'https://api.surecart.com/'</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">send_request</span><span style="color: #E1E4E8">( $method, $route, $body </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">null</span><span style="color: #E1E4E8"> ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        $headers </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> [</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #9ECBFF">'X-SURECART-WP-LICENSING-SDK-VERSION'</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">$this</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">version,</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #9ECBFF">'Accept'</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'application/json'</span><span style="color: #E1E4E8">,</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #9ECBFF">'Authorization'</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">"Bearer {</span><span style="color: #79B8FF">$this</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">public_token</span><span style="color: #9ECBFF">}"</span><span style="color: #E1E4E8">,</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #9ECBFF">'Content-Type'</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'application/json'</span></span>
<span class="line"><span style="color: #E1E4E8">        ];</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        $response </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">wp_remote_request</span><span style="color: #E1E4E8">(</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #79B8FF">$this</span><span style="color: #F97583">-></span><span style="color: #B392F0">endpoint</span><span style="color: #E1E4E8">() </span><span style="color: #F97583">.</span><span style="color: #E1E4E8"> $route,</span></span>
<span class="line"><span style="color: #E1E4E8">            [</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #9ECBFF">'headers'</span><span style="color: #E1E4E8">  </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> $headers,</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #9ECBFF">'method'</span><span style="color: #E1E4E8">   </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> $method,</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #9ECBFF">'timeout'</span><span style="color: #E1E4E8">  </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">30</span><span style="color: #E1E4E8">,</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #9ECBFF">'body'</span><span style="color: #E1E4E8">     </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> $body </span><span style="color: #F97583">?</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">wp_json_encode</span><span style="color: #E1E4E8">( $body ) </span><span style="color: #F97583">:</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">null</span><span style="color: #E1E4E8">,</span></span>
<span class="line"><span style="color: #E1E4E8">            ]</span></span>
<span class="line"><span style="color: #E1E4E8">        );</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> ( </span><span style="color: #B392F0">is_wp_error</span><span style="color: #E1E4E8">( $response ) ) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> $response;</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">json_decode</span><span style="color: #E1E4E8">( </span><span style="color: #B392F0">wp_remote_retrieve_body</span><span style="color: #E1E4E8">( $response ) );</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/**</span></span>
<span class="line"><span style="color: #6A737D"> * SureCart License Management</span></span>
<span class="line"><span style="color: #6A737D"> */</span></span>
<span class="line"><span style="color: #F97583">class</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">SC_License</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">protected</span><span style="color: #E1E4E8"> $client;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">__construct</span><span style="color: #E1E4E8">( $client ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">$this</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">client </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> $client;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">validate</span><span style="color: #E1E4E8">( $license_key ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        $route </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">"v1/public/licenses/{</span><span style="color: #E1E4E8">$license_key</span><span style="color: #9ECBFF">}"</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">$this</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">client</span><span style="color: #F97583">-></span><span style="color: #B392F0">send_request</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'GET'</span><span style="color: #E1E4E8">, $route );</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/**</span></span>
<span class="line"><span style="color: #6A737D"> * SureCart Activation Management</span></span>
<span class="line"><span style="color: #6A737D"> */</span></span>
<span class="line"><span style="color: #F97583">class</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">SC_Activation</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">protected</span><span style="color: #E1E4E8"> $client;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">__construct</span><span style="color: #E1E4E8">( $client ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">$this</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">client </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> $client;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">public</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">create</span><span style="color: #E1E4E8">( $license_id ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        $body </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> [</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #9ECBFF">'activation'</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> [</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #9ECBFF">'fingerprint'</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">esc_url_raw</span><span style="color: #E1E4E8">( </span><span style="color: #B392F0">get_site_url</span><span style="color: #E1E4E8">() ),</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #9ECBFF">'name'</span><span style="color: #E1E4E8">        </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">get_bloginfo</span><span style="color: #E1E4E8">(),</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #9ECBFF">'license'</span><span style="color: #E1E4E8">     </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> $license_id,</span></span>
<span class="line"><span style="color: #E1E4E8">            ]</span></span>
<span class="line"><span style="color: #E1E4E8">        ];</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">$this</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">client</span><span style="color: #F97583">-></span><span style="color: #B392F0">send_request</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'POST'</span><span style="color: #E1E4E8">, </span><span style="color: #9ECBFF">'v1/public/activations'</span><span style="color: #E1E4E8">, $body );</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/**</span></span>
<span class="line"><span style="color: #6A737D"> * Activate SureCart License and store the activation data in the options table.</span></span>
<span class="line"><span style="color: #6A737D"> */</span></span>
<span class="line"><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">sc_activate_license</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> ( </span><span style="color: #79B8FF">empty</span><span style="color: #E1E4E8">( </span><span style="color: #79B8FF">SC_LICENSE_KEY</span><span style="color: #E1E4E8"> ) </span><span style="color: #F97583">||</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">empty</span><span style="color: #E1E4E8">( </span><span style="color: #79B8FF">SC_PUBLIC_TOKEN</span><span style="color: #E1E4E8"> ) ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">error_log</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC License activation aborted: Missing license key or public token.'</span><span style="color: #E1E4E8"> );</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Check if activation is already successful</span></span>
<span class="line"><span style="color: #E1E4E8">    $stored_license_data </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">get_option</span><span style="color: #E1E4E8">( </span><span style="color: #79B8FF">SC_OPTION_NAME</span><span style="color: #E1E4E8">, [] );</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// If activation data exists and matches, do nothing</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">isset</span><span style="color: #E1E4E8">($stored_license_data[</span><span style="color: #9ECBFF">'sc_license_key'</span><span style="color: #E1E4E8">]) </span><span style="color: #F97583">&&</span></span>
<span class="line"><span style="color: #E1E4E8">        $stored_license_data[</span><span style="color: #9ECBFF">'sc_license_key'</span><span style="color: #E1E4E8">] </span><span style="color: #F97583">===</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">SC_LICENSE_KEY</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">&&</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">!</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">empty</span><span style="color: #E1E4E8">($stored_license_data[</span><span style="color: #9ECBFF">'sc_activation_id'</span><span style="color: #E1E4E8">])</span></span>
<span class="line"><span style="color: #E1E4E8">    ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">; </span><span style="color: #6A737D">// No need to re-activate</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Initialize Client, License, and Activation handlers</span></span>
<span class="line"><span style="color: #E1E4E8">    $client </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">new</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">SC_Client</span><span style="color: #E1E4E8">( </span><span style="color: #79B8FF">SC_PUBLIC_TOKEN</span><span style="color: #E1E4E8"> );</span></span>
<span class="line"><span style="color: #E1E4E8">    $license </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">new</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">SC_License</span><span style="color: #E1E4E8">( $client );</span></span>
<span class="line"><span style="color: #E1E4E8">    $activation </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">new</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">SC_Activation</span><span style="color: #E1E4E8">( $client );</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Validate the license</span></span>
<span class="line"><span style="color: #E1E4E8">    $validated_license </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> $license</span><span style="color: #F97583">-></span><span style="color: #B392F0">validate</span><span style="color: #E1E4E8">( </span><span style="color: #79B8FF">SC_LICENSE_KEY</span><span style="color: #E1E4E8"> );</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> ( </span><span style="color: #B392F0">is_wp_error</span><span style="color: #E1E4E8">( $validated_license ) ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">error_log</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC License validation failed: '</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">.</span><span style="color: #E1E4E8"> $validated_license</span><span style="color: #F97583">-></span><span style="color: #B392F0">get_error_message</span><span style="color: #E1E4E8">() );</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">add_action</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'admin_notices'</span><span style="color: #E1E4E8">, </span><span style="color: #F97583">function</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #79B8FF">echo</span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'<div class="notice notice-error"><p>SureCart License validation failed. Please check your license key.</p></div>'</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        });</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> ( </span><span style="color: #79B8FF">empty</span><span style="color: #E1E4E8">( $validated_license</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">id ) ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">error_log</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC License validation failed: No license ID returned.'</span><span style="color: #E1E4E8"> );</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Get License ID</span></span>
<span class="line"><span style="color: #E1E4E8">    $license_id </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> $validated_license</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">id;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Activate the license</span></span>
<span class="line"><span style="color: #E1E4E8">    $activation_data </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> $activation</span><span style="color: #F97583">-></span><span style="color: #B392F0">create</span><span style="color: #E1E4E8">( $license_id );</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> ( </span><span style="color: #B392F0">is_wp_error</span><span style="color: #E1E4E8">( $activation_data ) ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">error_log</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC License activation failed: '</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">.</span><span style="color: #E1E4E8"> $activation_data</span><span style="color: #F97583">-></span><span style="color: #B392F0">get_error_message</span><span style="color: #E1E4E8">() );</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">add_action</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'admin_notices'</span><span style="color: #E1E4E8">, </span><span style="color: #F97583">function</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #79B8FF">echo</span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'<div class="notice notice-error"><p>SureCart License activation failed. Please try again.</p></div>'</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        });</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> ( </span><span style="color: #79B8FF">empty</span><span style="color: #E1E4E8">( $activation_data</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">id ) ) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">error_log</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC License activation failed: No activation ID returned.'</span><span style="color: #E1E4E8"> );</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Get Activation ID</span></span>
<span class="line"><span style="color: #E1E4E8">    $activation_id </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> $activation_data</span><span style="color: #F97583">-></span><span style="color: #E1E4E8">id;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Prepare the serialized data format</span></span>
<span class="line"><span style="color: #E1E4E8">    $license_options </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> [</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">0</span><span style="color: #E1E4E8">                  </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">false</span><span style="color: #E1E4E8">, </span><span style="color: #6A737D">// Represents "i:0;b:0;" in the serialized format.</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #9ECBFF">'sc_license_key'</span><span style="color: #E1E4E8">    </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">SC_LICENSE_KEY</span><span style="color: #E1E4E8">,</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #9ECBFF">'sc_license_id'</span><span style="color: #E1E4E8">     </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> $license_id,</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #9ECBFF">'sc_activation_id'</span><span style="color: #E1E4E8">  </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> $activation_id,</span></span>
<span class="line"><span style="color: #E1E4E8">    ];</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Store activation data in the options table</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">update_option</span><span style="color: #E1E4E8">( </span><span style="color: #79B8FF">SC_OPTION_NAME</span><span style="color: #E1E4E8">, $license_options );</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #79B8FF">error_log</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'SC License activated successfully and saved in the options table.'</span><span style="color: #E1E4E8"> );</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">add_action</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'admin_notices'</span><span style="color: #E1E4E8">, </span><span style="color: #F97583">function</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #79B8FF">echo</span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'<div class="notice notice-success"><p>SureCart License successfully activated.</p></div>'</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    });</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">// Run the activation function on admin init</span></span>
<span class="line"><span style="color: #B392F0">add_action</span><span style="color: #E1E4E8">( </span><span style="color: #9ECBFF">'admin_init'</span><span style="color: #E1E4E8">, </span><span style="color: #9ECBFF">'sc_activate_license'</span><span style="color: #E1E4E8"> );</span></span>
```PHP