अवलोकन

यह क्या है

Apple Pay भुगतान स्वीकार करें MONDO के माध्यम से

आपको क्या चाहिए

MONDO खाता ID + गुप्त कुंजी

आप क्या भेजते हैं

Apple Pay टोकन + राशि + मुद्रा

आपको क्या मिलेगा

संपन्न या अस्वीकृत स्थिति

यह कैसे काम करता है

ग्राहक
Apple Pay
आप
MONDO
हो गया

विकल्प A: स्वयं होस्ट किया गया

आप अपनी साइट पर Apple Pay बटन दिखाएं और हमें टोकन भेजें

विकल्प B: MONDO-मेजबानी

हम सब कुछ संभालते हैं - बस अपने ग्राहक को हमारे पास पुनर्निर्देशित करें

त्वरित प्रारंभ (स्व-होस्टेड)

POST https://server-to-server.getmondo.co/payment/

{ "company_account_id": "your_id",
"gateway_secret_key": "your_key",
"apple_pay_token": { /* from Apple Pay JS */ },
"transaction_amount": "99.99",
"transaction_currency_iso3": "EUR",
"live_or_sandbox": "sandbox"
}

Apple Pay के बारे में

Apple Pay ग्राहकों को तेज़, सुरक्षित और निजी तरीके से भुगतान करने की सुविधा प्रदान करता है। MONDO को अपने भुगतान सेवा प्रदाता (PSP) के रूप में चुनकर, आप अपना खुद का Apple डेवलपर खाता बनाए बिना Apple Pay स्वीकार कर सकते हैं।

MONDO आपका PSP के रूप में

  • MONDO के पास Apple व्यापारी आईडी है
  • MONDO ऐप्पल पे प्रमाणपत्र प्रबंधित करता है
  • MONDO व्यापारी मान्यता संभालता है
  • MONDO भुगतान टोकन को डिक्रिप्ट और प्रोसेस करता है
आपको क्या नहीं चाहिए: कोई Apple डेवलपर अकाउंट नहीं, कोई Apple मर्चेंट आईडी नहीं, प्रबंधित करने के लिए कोई प्रमाणपत्र नहीं।

टोकन हैंडलिंग - कौन क्या करता है?

Apple Pay कार्डधारक डेटा की सुरक्षा के लिए एंड-टू-एंड एन्क्रिप्शन का उपयोग करता है। यहाँ जिम्मेदारियाँ कैसे बाँटी गई हैं:

Apple (ग्राहक का डिवाइस) एक एन्क्रिप्टेड पेमेंट टोकन उत्पन्न करता है जिसमें कार्ड डेटा, क्रिप्टोग्राम, और प्रमाणीकरण विवरण शामिल हैं
आप (व्यापारी) एन्क्रिप्टेड टोकन को सीधे MONDO को apple_pay_token पैरामीटर के माध्यम से पास करें — डिक्रिप्ट करने का प्रयास न करें
मोंडो (PSP) टोकन को डिक्रिप्ट करता है हमारे Apple Pay पेमेंट प्रोसेसिंग सर्टिफिकेट का उपयोग करके और CardCorp के साथ भुगतान संसाधित करता है
महत्वपूर्ण: आप कभी भी कच्चे कार्ड नंबर नहीं देखते या संभालते हैं। Apple से प्राप्त टोकन एन्क्रिप्टेड होता है और केवल MONDO द्वारा हमारे व्यापारी प्रमाणपत्र का उपयोग करके डिक्रिप्ट किया जा सकता है।

अपनी एकीकरण विधि चुनें

सर्वोत्तम के लिए: अपने चेकआउट पृष्ठ पर Apple Pay बटन की उपस्थिति और उपयोगकर्ता अनुभव पर पूर्ण नियंत्रण।

📋 पूर्वापेक्षाएँ

  • साझेदार खाता आईडी - आपकी अद्वितीय MONDO खाता पहचानकर्ता
  • साझेदार गुप्त कुंजी - आपकी API प्रमाणीकरण कुंजी
  • HTTPS - आपकी वेबसाइट को HTTPS का उपयोग करना चाहिए

⚠️ डोमेन सत्यापन आवश्यक

आपका डोमेन Apple के साथ MONDO के माध्यम से पंजीकृत होना चाहिए। यह एक बार की स्थापना है।

  1. जाओ GETMONDO.CO
  2. LoginDeveloperApple PayAdd Apple Pay Domain

🔄 भुगतान प्रवाह

1
उपयोगकर्ता ऐप्पल पे बटन पर क्लिक करता है
आपकी वेबसाइट पर
2
Apple Pay शीट खुलती है
नेटिव ऐप्पल पे इंटरफेस
3
व्यापारी मान्यता
आपका JS मोंडो के वैलिडेशन एंडपॉइंट को कॉल करता है
4
उपयोगकर्ता प्रमाणित
Face ID / Touch ID
5
टोकन MONDO को भेजा गया
POST to /payment/ with apple_pay_token
6
3D सुरक्षित और पुनर्निर्देशन
उपयोगकर्ता सफलता/असफलता URL पर पुनर्निर्देशित

🔗 API एंडपॉइंट

POST https://server-to-server.getmondo.co/payment/

व्यापारी मान्यता बिंदु

POST https://server-to-server.getmondo.co/payment/apple_pay_validate_merchant.php

व्यापारी मान्यता पैरामीटर्स

पैरामीटरप्रकारआवश्यकविवरण
validationURLstring✓ हाँApple द्वारा प्रदान किया गया URL onvalidatemerchant इवेंट
company_account_idstring✓ हाँआपका MONDO पार्टनर खाता आईडी
gateway_secret_keystring✓ हाँआपकी MONDO साझेदार गुप्त कुंजी
domain_namestring○ सशर्तआपका Apple Pay डोमेन (उदा. paynow.yoursite.com). सर्वर-से-सर्वर कॉल के लिए आवश्यक जहां ब्राउज़र ओरिजिन हेडर उपलब्ध नहीं है। यदि सीधे ब्राउज़र से कॉल कर रहे हैं तो आवश्यक नहीं है।
सर्वर-से-सर्वर एकीकरण नोट:
यदि आपका बैकएंड प्रॉक्सी मर्चेंट वैलिडेशन कॉल करता है (अर्थात आपका सर्वर सीधे कॉल करने के बजाय MONDO को कॉल करता है), तो आपको शामिल करना होगा domain_name आपके Apple Pay बटन के प्रदर्शित होने वाले डोमेन पर सेट करें। यह सुनिश्चित करता है कि Apple Pay सत्र आपके भुगतान पृष्ठ डोमेन से मेल खाता है।

📝 आवश्यक पैरामीटर्स (भुगतान प्रक्रिया)

पैरामीटरप्रकारविवरण
company_account_idstringआपका MONDO पार्टनर खाता आईडी
gateway_secret_keystringआपकी MONDO साझेदार गुप्त कुंजी
apple_pay_tokenobjectएन्क्रिप्टेड टोकन से event.payment.token — pass directly to MONDO as-is (मत डिक्रिप्ट करें)
transaction_amountdecimalभुगतान राशि (उदा., 99.99)
transaction_currency_iso3stringमुद्रा कोड (EUR, USD, GBP)
cardholder_email_addressstringग्राहक का ईमेल

वैकल्पिक पैरामीटर्स

पैरामीटरविवरण
partner_return_url_completedभुगतान सफलता पुनर्निर्देशन के लिए URL
partner_return_url_rejectedअस्वीकृत भुगतान पुनर्निर्देशन के लिए URL
partner_webhook_urlवेबहुक सूचनाओं के लिए URL
live_or_sandboxlive या sandbox

📤 API प्रतिसाद

Apple Pay भुगतान तुरंत संसाधित किए जाते हैं। प्रतिक्रिया में अंतिम लेन-देन की स्थिति शामिल होती है:

{
    "status": "success",
    "transaction_status": "COMPLETED",
    "gateway_session_id": "73d68b79579eeaa4a1f35f667509ba19",
    "transaction_id": "37819a4707f3736b6fb42148d98f05ab",
    "gateway_message": "Transaction succeeded",
    "redirect_url": "https://yoursite.com/success?gateway_session_id=...&payment_status=COMPLETED"
}

प्रतिक्रिया क्षेत्र

फ़ील्डविवरण
statussuccess या error
transaction_statusCOMPLETED या REJECTED
gateway_session_idइस लेन-देन के लिए अद्वितीय सत्र पहचानकर्ता
transaction_idअद्वितीय लेन-देन पहचानकर्ता - इसका उपयोग कॉलबैक के साथ सहसंबंध के लिए करें
gateway_messageमानव-पठनीय स्थिति संदेश
redirect_urlभुगतान के बाद उपयोगकर्ता को पुनर्निर्देशित करने के लिए URL (वैकल्पिक - केवल UX के लिए)
तत्काल प्रोसेसिंग
कार्ड भुगतान के विपरीत जिन्हें 3D सिक्योर रीडायरेक्ट की आवश्यकता होती है, Apple Pay लेनदेन तुरंत संसाधित होते हैं। जब आप प्रतिक्रिया प्राप्त करते हैं, तब तक भुगतान पहले से ही पूरा हो चुका होता है।

🍎 Apple Pay JS एकीकरण

चरण 1: Apple Pay बटन जोड़ें

<apple-pay-button buttonstyle="black" type="plain" locale="en" onclick="startApplePayPayment()"></apple-pay-button>

चरण 2: उपलब्धता जांचें

if (window.ApplePaySession && ApplePaySession.canMakePayments()) {
    document.getElementById('apple-pay-button').style.display = 'block';
}

चरण 3: कार्यान्वयन पूरा करें

async function startApplePayPayment() {
    const paymentRequest = {
        countryCode: 'US',
        currencyCode: 'EUR',
        merchantCapabilities: ['supports3DS'],
        supportedNetworks: ['visa', 'masterCard'],
        total: { label: 'Your Company', amount: '99.99', type: 'final' }
    };
    
    const session = new ApplePaySession(3, paymentRequest);
    
    // Merchant Validation
    session.onvalidatemerchant = async (event) => {
        const resp = await fetch('https://server-to-server.getmondo.co/payment/apple_pay_validate_merchant.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                validationURL: event.validationURL,
                company_account_id: 'YOUR_ACCOUNT_ID',
                gateway_secret_key: 'YOUR_SECRET_KEY',
                domain_name: 'your-domain.com'  // Required for server-to-server; optional if browser calls directly
            })
        });
        session.completeMerchantValidation(await resp.json());
    };
    
    // Payment Authorization - Apple provides ENCRYPTED token in event.payment.token
    // IMPORTANT: Pass the token directly to MONDO - do NOT attempt to decrypt it
    session.onpaymentauthorized = async (event) => {
        const resp = await fetch('https://server-to-server.getmondo.co/payment/', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                company_account_id: 'YOUR_ACCOUNT_ID',
                gateway_secret_key: 'YOUR_SECRET_KEY',
                apple_pay_token: event.payment.token,  // Encrypted token - MONDO decrypts
                transaction_amount: '99.99',
                transaction_currency_iso3: 'EUR',
                cardholder_email_address: 'customer@example.com',
                partner_return_url_completed: 'https://yoursite.com/success',
                partner_return_url_rejected: 'https://yoursite.com/failed',
                live_or_sandbox: 'live'
            })
        });
        
        const result = await resp.json();
        if (result.transaction_status === 'COMPLETED') {
            session.completePayment(ApplePaySession.STATUS_SUCCESS);
            // Payment already processed - redirect is optional for user experience
            if (result.redirect_url) {
                window.location.href = result.redirect_url;
            }
        } else {
            session.completePayment(ApplePaySession.STATUS_FAILURE);
            if (result.redirect_url) {
                window.location.href = result.redirect_url;
            }
        }
    };
    
    session.begin();
}

परीक्षण मोड्स

MONDO दो परीक्षण मोड का समर्थन करता है। अंतर को समझना सफल एकीकरण के लिए महत्वपूर्ण है।

SANDBOX परीक्षण के लिए

क्या होता है

  • ✅ टोकन संरचना मान्य है
  • ✅ सभी आवश्यक फ़ील्ड जांचे गए हैं
  • ⏭️ डिक्रिप्शन छोड़ा गया (मॉक डेटा लौटाया गया)
  • ⏭️ CardCorp API कॉल छोड़ दी गई है
  • ✅ पूरा भुगतान प्रवाह संपन्न हुआ
💡
मुख्य बिंदु: आपको एक उचित ढंग से संरचित टोकन भेजना होगा - वही प्रारूप जो LIVE मोड के लिए आवश्यक है।
LIVE प्रोडक्शन के लिए

क्या होता है

  • ✅ टोकन संरचना मान्य है
  • ✅ सभी आवश्यक फ़ील्ड जांचे गए हैं
  • ✅ वास्तविक क्रिप्टोग्राफिक डिक्रिप्शन
  • ✅ रियल कार्डकॉर्प API प्रोसेसिंग
  • ✅ असली पैसे लगते हैं
🔒
मुख्य बिंदु: केवल वास्तविक उपकरणों से असली Apple Pay टोकन के साथ LIVE मोड का उपयोग करें।

🎯 क्यों सैंडबॉक्स को समान टोकन संरचना की आवश्यकता है

यह डिज़ाइन सुनिश्चित करता है कि जब आप SANDBOX से LIVE में स्विच करते हैं, तो आपका इंटीग्रेशन बिना कोड परिवर्तन के तुरंत काम करने लगता है।

🧪
SANDBOX
परीक्षण सही संरचना के साथ
सत्यापित
संरचना की पुष्टि हुई
🚀
LIVE
तुरंत काम करता है

⚙️ मोड सेट करना

शामिल करें live_or_sandbox API अनुरोध में पैरामीटर:

{
    "company_account_id": "your_account_id",
    "gateway_secret_key": "your_secret_key",
    "apple_pay_token": { ... },
    "transaction_amount": "99.99",
    "transaction_currency_iso3": "EUR",
    "live_or_sandbox": "sandbox"  // or "live" for production
}

🎭 Sandbox: लेन-देन परिणाम लागू करें

SANDBOX मोड में, आप परीक्षण के लिए एक विशिष्ट लेन-देन परिणाम को मजबूर कर सकते हैं:

पैरामीटरमूल्यपरिणाम
sandbox_force_transaction_status COMPLETED ✅ भुगतान स्वीकृत
sandbox_force_transaction_status REJECTED ❌ भुगतान अस्वीकृत

Apple Pay टोकन संरचना

Apple Pay टोकन की निम्नलिखित संरचना होनी चाहिए। यह SANDBOX और LIVE मोड दोनों के लिए समान है।

महत्वपूर्ण: अमान्य टोकन संरचना भेजना (जैसे कि बस "***") सैंडबॉक्स मोड में भी त्रुटि होगी।

आवश्यक टोकन संरचना

{
    "paymentData": {
        "version": "EC_v1",
        "data": "BASE64_ENCRYPTED_PAYMENT_DATA",
        "signature": "BASE64_SIGNATURE",
        "header": {
            "ephemeralPublicKey": "BASE64_EPHEMERAL_KEY",
            "publicKeyHash": "BASE64_PUBLIC_KEY_HASH",
            "transactionId": "UNIQUE_TRANSACTION_ID"
        }
    },
    "paymentMethod": {
        "displayName": "Visa 1234",
        "network": "Visa",
        "type": "debit"
    },
    "transactionIdentifier": "APPLE_TRANSACTION_ID"
}

फ़ील्ड विवरण

फ़ील्ड आवश्यक विवरण
paymentData.versionहमेशा EC_v1
paymentData.dataApple से Base64 एन्क्रिप्टेड भुगतान डेटा
paymentData.signatureBase64 हस्ताक्षर सत्यापन के लिए
paymentData.header.ephemeralPublicKeyBase64 अनित्य सार्वजनिक कुंजी
paymentData.header.publicKeyHashमर्चेंट की पब्लिक की का Base64 हैश
paymentData.header.transactionIdअद्वितीय लेनदेन पहचानकर्ता
paymentMethod.networkकार्ड नेटवर्क (वीज़ा, मास्टरकार्ड, एमेक्स)
paymentMethod.displayNameApple Wallet से प्रदर्शन नाम

= आवश्यक  |  = अनुशंसित

सैंडबॉक्स टेस्ट टोकन

इस टोकन को सैंडबॉक्स परीक्षण के लिए कॉपी करें। एन्क्रिप्टेड मान असली होने की आवश्यकता नहीं है - केवल संरचना का सत्यापन किया जाता है।

{
    "paymentData": {
        "version": "EC_v1",
        "data": "c2FuZGJveF9lbmNyeXB0ZWRfZGF0YV8xNzAyMjU2MDAwMDAw",
        "signature": "c2FuZGJveF9zaWduYXR1cmVfMTcwMjI1NjAwMDAwMA==",
        "header": {
            "ephemeralPublicKey": "c2FuZGJveF9lcGhlbWVyYWxfa2V5XzE3MDIyNTYwMDAwMDA=",
            "publicKeyHash": "c2FuZGJveF9wdWJsaWNfa2V5X2hhc2g=",
            "transactionId": "SANDBOX_TXN_1702256000000_a1b2c3d4e5f6"
        }
    },
    "paymentMethod": {
        "displayName": "Visa 4242",
        "network": "Visa",
        "type": "debit"
    },
    "transactionIdentifier": "SANDBOX_TXN_1702256000000_a1b2c3d4e5f6"
}

सामान्य टोकन त्रुटियाँ

त्रुटि कारण समाधान
Invalid token format टोकन JSON ऑब्जेक्ट नहीं है टोकन को ऑब्जेक्ट के रूप में भेजें, स्ट्रिंग के रूप में नहीं
Missing paymentData टोकन में paymentData गुण नहीं है Apple Pay JS से पूरा टोकन शामिल करें
Missing header fields अल्पकालिक सार्वजनिक कुंजी, सार्वजनिक कुंजी हैश, या लेन-देन आईडी गायब है सभी हेडर फ़ील्ड सुनिश्चित करें

टोकन कहाँ से आता है?

LIVE मोड में, टोकन Apple Pay JS से आता है जब उपयोगकर्ता भुगतान को अधिकृत करता है:

session.onpaymentauthorized = (event) => {
    // This is the token you send to MONDO
    const token = event.payment.token;
    
    // Send to MONDO API
    fetch('/payment/', {
        body: JSON.stringify({
            apple_pay_token: token,  // Pass the entire token object
            ...
        })
    });
};

लेन-देन की स्थिति

पूर्ण एकीकरण के लिए लेन-देन की स्थितियों को समझना और उन्हें कैसे पूछताछ करना है, यह जानना आवश्यक है।

अंतिम लेन-देन स्थितियाँ

ये संभावित अंतिम स्थितियाँ हैं जो आपको वेबहुक के माध्यम से या /details एंडपॉइंट की पूछताछ करते समय प्राप्त होंगी:

COMPLETED
भुगतान सफल
REJECTED
प्रोसेसर द्वारा भुगतान अस्वीकृत
CANCELED
उपयोगकर्ता ने भुगतान रद्द किया
FAILED
तकनीकी त्रुटि हुई

मध्यवर्ती स्थिति

INITIATED

लेन-देन बनाया गया है लेकिन अभी प्रक्रिया की जा रही है। यह तब हो सकता है जब:

  • उपयोगकर्ता 3D सिक्योर प्रमाणीकरण पूरा कर रहा है
  • कार्ड नेटवर्क द्वारा भुगतान संसाधित किया जा रहा है
  • उपयोगकर्ता ने भुगतान प्रवाह छोड़ दिया

लेन-देन की स्थिति कब पूछें?

सर्वोत्तम प्रथा: हमेशा अपनी प्राथमिक सूचना विधि के रूप में वेबहुक्स पर निर्भर रहें। केवल तब /details एंडपॉइंट की क्वेरी करें जब:
  • आपको अपेक्षित समय (उदाहरण के लिए, 5 मिनट) के भीतर वेबहुक प्राप्त नहीं हुआ
  • आपको लेन-देन की स्थिति मैन्युअल रूप से सत्यापित करनी होगी
  • आपका वेबहुक एंडपॉइंट अस्थायी रूप से अनुपलब्ध था

लेन-देन की स्थिति पूछताछ

लेन-देन की स्थिति जांचने के लिए, विवरण एंडपॉइंट पर एक POST अनुरोध करें:

POST https://server-to-server.getmondo.co/details/

अनुरोध पैरामीटर्स

पैरामीटर आवश्यक विवरण
company_account_id आपका MONDO पार्टनर खाता आईडी
gateway_secret_key आपकी MONDO साझेदार गुप्त कुंजी
gateway_session_id प्रारंभिक भुगतान अनुरोध से लौटाई गई सत्र आईडी

उदाहरण अनुरोध

curl -X POST https://server-to-server.getmondo.co/details/ \
  -H "Content-Type: application/json" \
  -d '{
    "company_account_id": "your_account_id",
    "gateway_secret_key": "your_secret_key",
    "gateway_session_id": "sess_abc123xyz"
  }'

उदाहरण प्रतिक्रिया

{
    "success": true,
    "transaction_status": "COMPLETED",
    "gateway_session_id": "sess_abc123xyz",
    "transaction_amount": "99.99",
    "transaction_currency_iso3": "EUR",
    "card_last_4_digits": "4242",
    "card_brand": "VISA",
    "gateway_result_code": "000.000.000",
    "gateway_result_description": "Transaction succeeded",
    "created_at": "2024-12-10T22:30:00Z",
    "completed_at": "2024-12-10T22:31:15Z"
}

स्थिति अपडेट प्राप्त करना

अंतिम लेन-देन की स्थिति प्राप्त करने के दो तरीके हैं:

विधि यह कैसे काम करता है कब उपयोग करें
Webhook अनुशंसित MONDO आपको POST अनुरोध भेजता है partner_webhook_url प्राथमिक विधि - स्वचालित, वास्तविक समय
Redirect URL उपयोगकर्ता को आपके पास पुनर्निर्देशित किया गया है partner_return_url_completed या partner_return_url_rejected उपयोगकर्ता की पुष्टि के लिए
Query /details आप स्थिति जांचने के लिए POST अनुरोध करते हैं वेबहुक प्राप्त नहीं होने पर विकल्प

यदि लेन-देन आरंभित रहता है

यदि कोई लेन-देन 15 मिनट से अधिक समय तक INITIATED स्थिति में रहता है, तो इसका संभवतः अर्थ है:

  • उपयोगकर्ता ने 3D सिक्योर चैलेंज छोड़ दिया
  • उपयोगकर्ता ने भुगतान के दौरान अपना ब्राउज़र बंद कर दिया
  • प्रोसेसिंग के दौरान नेटवर्क समस्या थी

कार्रवाई: /details एंडपॉइंट को क्वेरी करें ताकि वर्तमान स्थिति प्राप्त हो सके। ये लेन-देन अंततः समय समाप्त हो जाएंगे और FAILED या CANCELED स्थिति में चले जाएंगे।