Files
wp-digital-download/tests/webhook-samples.md
2025-08-29 18:54:14 -07:00

4.0 KiB

Gitea Webhook Integration Test Samples

The corrected webhook implementation now properly receives and processes webhook notifications FROM Git platforms like Gitea when new releases are published.

Sample Gitea Release Webhook Payload

When a release is published in Gitea, it sends a webhook payload like this:

{
  "action": "published",
  "release": {
    "id": 123,
    "tag_name": "v1.2.0",
    "target_commitish": "main",
    "name": "Version 1.2.0",
    "body": "## What's New\n- Added new feature X\n- Fixed bug Y\n- Improved performance\n\n## Breaking Changes\n- None",
    "url": "https://git.example.com/user/repo/releases/tag/v1.2.0",
    "html_url": "https://git.example.com/user/repo/releases/tag/v1.2.0",
    "tarball_url": "https://git.example.com/user/repo/archive/v1.2.0.tar.gz",
    "zipball_url": "https://git.example.com/user/repo/archive/v1.2.0.zip",
    "draft": false,
    "prerelease": false,
    "created_at": "2025-01-15T10:30:00Z",
    "published_at": "2025-01-15T10:30:00Z",
    "author": {
      "id": 1,
      "login": "developer",
      "full_name": "Developer Name"
    }
  },
  "repository": {
    "id": 456,
    "name": "my-wordpress-plugin",
    "full_name": "user/my-wordpress-plugin",
    "html_url": "https://git.example.com/user/my-wordpress-plugin",
    "clone_url": "https://git.example.com/user/my-wordpress-plugin.git"
  },
  "sender": {
    "id": 1,
    "login": "developer"
  }
}

How the Webhook Handler Processes This

  1. Authentication: Validates the passcode in the URL path
  2. Event Detection: Identifies this as a Gitea release event (action: "published")
  3. Version Extraction: Extracts version "1.2.0" from tag_name: "v1.2.0"
  4. Changelog Processing: Uses the release body field for changelog
  5. Package Creation: Clones the repository at tag v1.2.0 and creates distribution package
  6. Database Storage: Stores the new version in wpdd_software_versions table
  7. Customer Updates: Customers with valid licenses can now receive the update

Sample GitHub Release Webhook Payload

GitHub uses a similar but slightly different structure:

{
  "action": "published",
  "release": {
    "tag_name": "v1.2.0",
    "target_commitish": "main", 
    "name": "Version 1.2.0",
    "body": "Release notes here...",
    "draft": false,
    "prerelease": false
  },
  "repository": {
    "name": "my-plugin",
    "clone_url": "https://github.com/user/my-plugin.git"
  }
}

Sample Git Push with Tag Webhook

For platforms that send tag push events instead of release events:

{
  "ref": "refs/tags/v1.2.0",
  "repository": {
    "clone_url": "https://git.example.com/user/repo.git"
  },
  "commits": [
    {
      "id": "abc123",
      "message": "Release version 1.2.0"
    }
  ],
  "head_commit": {
    "id": "abc123", 
    "message": "Release version 1.2.0"
  },
  "after": "abc123"
}

Webhook URL Format

The webhook URLs generated for each software product follow this format:

https://streamers.channel/wp-json/wpdd/v1/webhook/{product_id}/{passcode}

Example:

https://streamers.channel/wp-json/wpdd/v1/webhook/123/a1b2c3d4e5f6

Where:

  • 123 is the WordPress post ID of the software product
  • a1b2c3d4e5f6 is the randomly generated passcode for security

Testing the Integration

To test this webhook integration:

  1. Create a software product in WordPress admin
  2. Set the product type to "Software License"
  3. Configure the Git repository URL and credentials
  4. Copy the generated webhook URL from the metabox
  5. Add the webhook URL to your Gitea repository settings:
    • Go to Settings → Webhooks
    • Add new webhook with the WPDD URL
    • Select "Release events" as the trigger
    • Set Content-Type to "application/json"
  6. Create and publish a new release in Gitea
  7. Check the wpdd_webhook_events table to see the received payload
  8. Check the wpdd_software_versions table to see the processed release

This corrected implementation properly receives release notifications FROM Git platforms like Gitea, rather than attempting to push to them.