JVZIPN v2 – How to Receive JVZoo Order Data in Your Script (Updated for Payouts)
JVZoo
Last Update منذ يومين
**This is an advanced topic. This is only recommended for vendors with advanced programming knowledge or those that have the assistance of a programmer.
1) What is JVZIPN?
JVZIPN (JVZoo Instant Payment Notification) is how JVZoo tells your system that an order event just happened. As soon as a customer buys, refunds, or rebills, JVZoo sends an HTTP POST to the URL you provide. Your script can then:
- Create or update a membership or license
- Add the buyer to your CRM/email system
- Send the order to your fulfillment/shipping
- Log the transaction in your own database
JVZIPN v2 keeps the same basic idea as v1, but adds cleaner fields, full customer/shipping data, and a payouts array so you can see who got paid on the order.
2) What’s New in JVZIPN v2?
- Clear field names (e.g., customer_first_name, customer_last_name, customer_email, delivery_address_line_1, delivery_city, delivery_region, delivery_country)
- Full order + product info (product_id, product_name, product_type, transaction_type, status, total, payment_method)
- Vendor + Affiliate details (IDs, names, emails)
- Structured payouts (transactionPayouts array) with payee, amount, type, processor, and status
- Same verification model, now with an explicit field list for the signature
3) When Does JVZoo Send JVZIPN v2?
JVZoo will POST to your URL for important events. Always check both transaction_type and status to decide what to do:
- SALE – customer paid (grant access, fulfill, email)
- RFND – refund (revoke access, mark refunded)
- BILL / REBILL – recurring payment (extend access)
- CANCEL-REBILL – subscription canceled (schedule end of access)
- CGBK – chargeback (revoke access, flag account)
5) Verification – Exact JVZIPN v2 Logic
JVZIPN v2 signs the payload with an 8-character uppercase hash called cverify. To confirm authenticity, rebuild the value using the exact fields and order, then compare:
Field order for signature (in order):
- paykey
- customer_email
- product_name
- transaction_type
- date
- append your Secret Key (not sent in POST)
Build this string:
Then:
- Convert to UTF-8
- Run SHA1
- Uppercase the result
- Take the first 8 characters
Example using sanitized data:
PHP verification example:
6) Working with transactionPayouts
Because payouts are an array, loop and store them for accounting/BI/partner reporting:
7) Setup Steps (Non‑Developers)
- In JVZoo, set that endpoint as the JVZIPN URL for your product
- Add the verification code above
- On verified SALE/COMPLETED → grant access; on RFND/CGBK → revoke access
- Save transactionPayouts for reporting
- Create an endpoint on your site, e.g., https://yourdomain.com/jvzipn-v2.php
- Always return HTTP 200 on success (JVZoo retries if not)
8) Recommended Database Tables
- jvzoo_ipn_log: id, received_at, transaction_id, raw_payload(JSON), verified(BOOL)
- jvzoo_ipn_payouts: id, transaction_id, payee_user_id, payee_name, payout_type, amount, payment_processor, payout_status
9) Mapping – v1 to v2
| cproditem / cprodtitle | product_id / product_name |
| ctransaction | transaction_type |
| ctransvendor / ctransaffiliate | vendor_id / vendor_user_id / affiliate_id (+ names/emails) |
| Amounts sometimes in cents | Amounts as standard currency strings (e.g., 97.00) |
| No structured payouts | transactionPayouts array |
| cverify (v1) | cverify (v2) – explicit signature fields |
10) Migration from v1 to v2
- Keep your v1 handler running for existing products
- Detect v2 by fields like transactionPayouts and new customer/delivery names
- If v2 → run new parsing + save payouts; else → fall back to v1
- Log both versions during rollout and compare for a few days
11) FAQ
Q: Will every order have payouts?
A: Typically yes—at least a vendor row. Many include vendor + affiliate + platform.
Q: Can I ignore payouts?
A: Yes. Ignore transactionPayouts if you don’t need them.
Q: Is verification required?
A: Absolutely. Never grant access unless your calculated cverify matches the incoming cverify.
Q: What if my script fails to respond?
A: JVZoo will retry the POST. Always return HTTP 200 after successful processing.
For more information on JVZIPN v1, please click here.
