| 开发者 | fungies |
|---|---|
| 更新时间 | 2026年6月1日 19:22 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 6.9 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
fungies). Errors and warnings are always logged; verbose dumps are off by default to keep log files small and avoid storing third-party API payloads unless you're troubleshooting.https://api.fungies.io/v0https://api.stage.fungies.net/v0https://{your-store}.app.fungies.io.zip fileYes. The hosted checkout URL only works when your Fungies store is published. Go to the Fungies Dashboard and make sure your store is not in draft mode.
Only OneTimePayment products and their offers are synced into WooCommerce. Other product types (Digital Downloads, Subscriptions, Game Keys, etc.) are not imported. Product names and descriptions from Fungies are used for the WooCommerce product listings.
Yes. Fungies registers as a standard WooCommerce payment gateway. Customers can choose it at checkout alongside any other enabled gateways.
Every hour via WordPress Cron. You can also trigger a manual sync anytime from the Fungies settings page.
Enable Sandbox Mode in the plugin settings, use staging keys from app.stage.fungies.net, and pay with Stripe test cards.
You need to configure the Instant Redirect URL in Fungies Dashboard → Settings → Store → Checkout tab. Use the Post-Purchase Redirect URL shown on the plugin settings page and add the Order ID and User Email URL parameters.
Yes. Production and staging environments in Fungies are completely separate. API keys, products, and webhooks are independent — staging keys will not work against the production API, and vice versa.
Enable these events in your Fungies webhook configuration: payment_success, payment_failed, payment_refunded, subscription_created, subscription_interval, and subscription_cancelled.
When a payment succeeds, the plugin stores the Fungies order ID, order number, payment ID, payment type, subscription ID (if applicable), invoice URL, processing fee, and tax amount on the WooCommerce order.
Yes. The plugin is fully compatible with both the classic WooCommerce checkout and the new block-based cart and checkout experience.
Fungies_Checkout_URL_Builder::build() was sending fngs-user-email as the prefill query parameter, but per the official Fungies docs the prefill parameter is fngs-customer-email. fngs-user-email is the outbound system parameter Fungies appends to the post-purchase Instant Redirect URL — not the inbound prefill param. Mixing the two meant the WC billing email was passed but ignored by Fungies, so customers had to retype their email at checkout. The plugin now sends fngs-customer-email for prefill while still reading fngs-user-email from the return URL (where Fungies appends it) — both names are now used in their correct directions. No data migration needed; existing orders are unaffected.phpcs:ignore annotations added in 2.4.2 with proper phpcs:disable / phpcs:enable blocks. The slow-query sniff fires on the 'meta_key' / 'meta_value' / 'meta_query' array-key string tokens inside the wc_get_orders() / get_posts() literal, not on the outer call line, so the single-line ignore form never reached them. Affects Fungies_Order_Sync::find_order_by_meta(), Fungies_Return_Resolver::by_meta(), and Fungies_Product_Sync::push_to_fungies().Fungies_Workspace_Meta::get_all_pushed_offer_ids() and Fungies_Product_Sync::cleanup_pushed_duplicates() that interpolated class constants directly into the SQL string with fully prepared statements using $wpdb->prepare() + $wpdb->esc_like(). Behaviour is unchanged — values were already trusted constants, but the new form is what WordPress.org Plugin Check requires and what static analyzers can verify./* translators: ... */ comments above every gettext call that uses placeholders so translators see what each %s / %d refers to. Reworked 'Connected to %s API! (%s)' into ordered placeholders 'Connected to %1$s API! (%2$s)' per WP i18n guidelines.phpcs:ignore annotations with inline rationale on the handful of justified direct-DB / slow-query / nonce-check warnings (e.g. the wc-api=fungies_return redirect handler reads $_GET for read-only redirect logic and is paired with an HMAC-verified webhook; the direct postmeta lookups are single-row indexed reads). No new ignores were added blindly.Requires Plugins: woocommerce header introduced in WordPress 6.5. WordPress now refuses to activate the plugin unless WooCommerce is installed and active, and the WooCommerce dependency is shown in the Plugins screen.fungies-wp to fungies-for-woocommerce (matching the plugin slug) across all 97 gettext calls and the plugin header. Required for the WordPress.org translation platform to pick up strings for community translation. Any custom .po / .mo files keyed off the old fungies-wp domain must be re-generated.<input type="url"> and saves through esc_url_raw, plus the runtime read site re-validates with esc_url_raw + wp_http_validate_url and rejects anything other than http/https schemes before building a customer redirect.fungies.io, fungies.net) before sideloading product images via media_sideload_image, mitigating SSRF risk from third-party image URLs. Extensible via the fungies_image_host_allowlist filter.__() with translator comments and numbered placeholders.console.log / console.error calls from the front-end Blocks checkout JS so the customer's browser console stays clean.permission_callback => '__return_true' explaining the HMAC-SHA256 signature verification, timing-safe comparison, and idempotency replay protection that act as the real auth.changelog.txt per WP.org guidelines, keeping the readme focused on the current and previous major..gitattributes now export-ignores README.md, build.ps1, and fungies-*.zip so the shipped plugin zip contains only runtime files.Donate link and the Screenshots section (no screenshot assets shipped).save_post_shop_coupon runs Fungies_Coupon_Sync::on_coupon_saved, which creates or updates the corresponding Fungies discount immediately — no need to wait for the hourly cron or click "Sync Now". Skipped silently for autosaves and revisions, debounced via a 5-second transient lock per coupon.before_delete_post) now clears its workspace-scoped _fungies_pushed_discount_id__<hash> post meta, so re-creating a coupon with the same code creates a fresh Fungies discount instead of trying to update a stale ID.fngs-discount-code query parameter, so the Fungies-side total automatically matches the WooCommerce-side total after discount. The first coupon code on the order is forwarded as-is — it is expected to match a Fungies discount code already synced via "Sync Now". No action needed on the Fungies dashboard side as long as the coupon was synced.PATCH /v0/discounts/:id/update rejected every coupon update with id: Required because the Fungies update schema demands id in the request body in addition to the URL path. The API client now injects the discount UUID into the body automatically.1 USD becomes "100" in responses), so the previous diff always reported "different" and triggered an update on every sync. The mapper now multiplies fixed amounts by wc_get_price_decimals() before comparing, and converts validUntil from milliseconds to seconds before comparing.GET /v0/discounts/list endpoint returns 500 because of pre-existing rows with negative validFrom Dates (a known server-side timezone bug). The plugin now falls back to a row-by-row walk that skips broken pages, and primarily relies on the local _fungies_pushed_discount_id post meta to decide between create and update.percent10 / fixed1 rows already in your Fungies workspace from a v2.2.0 install must be archived manually in the Fungies dashboard — the plugin can no longer see them through the broken LIST page.validFrom: 0 with "Number must be greater than or equal to 0" even though the spec lists 0 as valid. The coupon now sends the WooCommerce coupon's actual date_created timestamp (or current time as fallback) for validFrom, which is also more semantically correct.purchaseLimit was always sent — its create-schema enum forbids null, so coupons without a usage limit failed validation. The field is now only included when the WooCommerce coupon has a usage limit set.GET /v0/discounts/list fails on the first page, the coupon sync now returns the API error instead of silently treating the remote index as empty (which could create duplicates on a transient outage).percent, fixed_cart, fixed_product) is created or updated as a Fungies discount with the same code, amount, amount type, expiration date, and usage limit. The Sync panel reports a third "Coupons → Fungies" line with created / updated / error counts. Mapping is workspace-scoped (sandbox vs production) so toggling Sandbox Mode does not orphan the link, and re-running Sync skips coupons that are already in sync.
For changelog entries from earlier releases (2.1.x, 2.0.x, 1.x), see changelog.txt in the plugin root.