अवलोकन
यह क्या है
Apple Pay भुगतान स्वीकार करें MONDO के माध्यम से
आपको क्या चाहिए
MONDO खाता ID + गुप्त कुंजी
आप क्या भेजते हैं
Apple Pay टोकन + राशि + मुद्रा
आपको क्या मिलेगा
संपन्न या अस्वीकृत स्थिति
यह कैसे काम करता है
विकल्प 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 Pay कार्डधारक डेटा की सुरक्षा के लिए एंड-टू-एंड एन्क्रिप्शन का उपयोग करता है। यहाँ जिम्मेदारियाँ कैसे बाँटी गई हैं:
| Apple (ग्राहक का डिवाइस) | एक एन्क्रिप्टेड पेमेंट टोकन उत्पन्न करता है जिसमें कार्ड डेटा, क्रिप्टोग्राम, और प्रमाणीकरण विवरण शामिल हैं |
| आप (व्यापारी) | एन्क्रिप्टेड टोकन को सीधे MONDO को apple_pay_token पैरामीटर के माध्यम से पास करें — डिक्रिप्ट करने का प्रयास न करें |
| मोंडो (PSP) | टोकन को डिक्रिप्ट करता है हमारे Apple Pay पेमेंट प्रोसेसिंग सर्टिफिकेट का उपयोग करके और CardCorp के साथ भुगतान संसाधित करता है |
अपनी एकीकरण विधि चुनें
📋 पूर्वापेक्षाएँ
- ✓ साझेदार खाता आईडी - आपकी अद्वितीय MONDO खाता पहचानकर्ता
- ✓ साझेदार गुप्त कुंजी - आपकी API प्रमाणीकरण कुंजी
- ✓ HTTPS - आपकी वेबसाइट को HTTPS का उपयोग करना चाहिए
⚠️ डोमेन सत्यापन आवश्यक
आपका डोमेन Apple के साथ MONDO के माध्यम से पंजीकृत होना चाहिए। यह एक बार की स्थापना है।
- जाओ GETMONDO.CO
- Login → Developer → Apple Pay → Add Apple Pay Domain
🔄 भुगतान प्रवाह
आपकी वेबसाइट पर
नेटिव ऐप्पल पे इंटरफेस
आपका JS मोंडो के वैलिडेशन एंडपॉइंट को कॉल करता है
Face ID / Touch ID
POST to /payment/ with apple_pay_token
उपयोगकर्ता सफलता/असफलता URL पर पुनर्निर्देशित
🔗 API एंडपॉइंट
व्यापारी मान्यता बिंदु
व्यापारी मान्यता पैरामीटर्स
| पैरामीटर | प्रकार | आवश्यक | विवरण |
|---|---|---|---|
| validationURL | string | ✓ हाँ | Apple द्वारा प्रदान किया गया URL onvalidatemerchant इवेंट |
| company_account_id | string | ✓ हाँ | आपका MONDO पार्टनर खाता आईडी |
| gateway_secret_key | string | ✓ हाँ | आपकी MONDO साझेदार गुप्त कुंजी |
| domain_name | string | ○ सशर्त | आपका Apple Pay डोमेन (उदा. paynow.yoursite.com). सर्वर-से-सर्वर कॉल के लिए आवश्यक जहां ब्राउज़र ओरिजिन हेडर उपलब्ध नहीं है। यदि सीधे ब्राउज़र से कॉल कर रहे हैं तो आवश्यक नहीं है। |
यदि आपका बैकएंड प्रॉक्सी मर्चेंट वैलिडेशन कॉल करता है (अर्थात आपका सर्वर सीधे कॉल करने के बजाय MONDO को कॉल करता है), तो आपको शामिल करना होगा
domain_name आपके Apple Pay बटन के प्रदर्शित होने वाले डोमेन पर सेट करें। यह सुनिश्चित करता है कि Apple Pay सत्र आपके भुगतान पृष्ठ डोमेन से मेल खाता है। 📝 आवश्यक पैरामीटर्स (भुगतान प्रक्रिया)
| पैरामीटर | प्रकार | विवरण |
|---|---|---|
| company_account_id | string | आपका MONDO पार्टनर खाता आईडी |
| gateway_secret_key | string | आपकी MONDO साझेदार गुप्त कुंजी |
| apple_pay_token | object | एन्क्रिप्टेड टोकन से event.payment.token — pass directly to MONDO as-is (मत डिक्रिप्ट करें) |
| transaction_amount | decimal | भुगतान राशि (उदा., 99.99) |
| transaction_currency_iso3 | string | मुद्रा कोड (EUR, USD, GBP) |
| cardholder_email_address | string | ग्राहक का ईमेल |
वैकल्पिक पैरामीटर्स
| पैरामीटर | विवरण |
|---|---|
| partner_return_url_completed | भुगतान सफलता पुनर्निर्देशन के लिए URL |
| partner_return_url_rejected | अस्वीकृत भुगतान पुनर्निर्देशन के लिए URL |
| partner_webhook_url | वेबहुक सूचनाओं के लिए URL |
| live_or_sandbox | live या 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"
}
प्रतिक्रिया क्षेत्र
| फ़ील्ड | विवरण |
|---|---|
| status | success या error |
| transaction_status | COMPLETED या 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 दो परीक्षण मोड का समर्थन करता है। अंतर को समझना सफल एकीकरण के लिए महत्वपूर्ण है।
क्या होता है
- ✅ टोकन संरचना मान्य है
- ✅ सभी आवश्यक फ़ील्ड जांचे गए हैं
- ⏭️ डिक्रिप्शन छोड़ा गया (मॉक डेटा लौटाया गया)
- ⏭️ CardCorp API कॉल छोड़ दी गई है
- ✅ पूरा भुगतान प्रवाह संपन्न हुआ
क्या होता है
- ✅ टोकन संरचना मान्य है
- ✅ सभी आवश्यक फ़ील्ड जांचे गए हैं
- ✅ वास्तविक क्रिप्टोग्राफिक डिक्रिप्शन
- ✅ रियल कार्डकॉर्प API प्रोसेसिंग
- ✅ असली पैसे लगते हैं
🎯 क्यों सैंडबॉक्स को समान टोकन संरचना की आवश्यकता है
यह डिज़ाइन सुनिश्चित करता है कि जब आप 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.data | ✓ | Apple से Base64 एन्क्रिप्टेड भुगतान डेटा |
| paymentData.signature | ✓ | Base64 हस्ताक्षर सत्यापन के लिए |
| paymentData.header.ephemeralPublicKey | ✓ | Base64 अनित्य सार्वजनिक कुंजी |
| paymentData.header.publicKeyHash | ✓ | मर्चेंट की पब्लिक की का Base64 हैश |
| paymentData.header.transactionId | ✓ | अद्वितीय लेनदेन पहचानकर्ता |
| paymentMethod.network | ○ | कार्ड नेटवर्क (वीज़ा, मास्टरकार्ड, एमेक्स) |
| paymentMethod.displayName | ○ | Apple 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 एंडपॉइंट की पूछताछ करते समय प्राप्त होंगी:
मध्यवर्ती स्थिति
लेन-देन बनाया गया है लेकिन अभी प्रक्रिया की जा रही है। यह तब हो सकता है जब:
- उपयोगकर्ता 3D सिक्योर प्रमाणीकरण पूरा कर रहा है
- कार्ड नेटवर्क द्वारा भुगतान संसाधित किया जा रहा है
- उपयोगकर्ता ने भुगतान प्रवाह छोड़ दिया
लेन-देन की स्थिति कब पूछें?
- आपको अपेक्षित समय (उदाहरण के लिए, 5 मिनट) के भीतर वेबहुक प्राप्त नहीं हुआ
- आपको लेन-देन की स्थिति मैन्युअल रूप से सत्यापित करनी होगी
- आपका वेबहुक एंडपॉइंट अस्थायी रूप से अनुपलब्ध था
लेन-देन की स्थिति पूछताछ
लेन-देन की स्थिति जांचने के लिए, विवरण एंडपॉइंट पर एक POST अनुरोध करें:
अनुरोध पैरामीटर्स
| पैरामीटर | आवश्यक | विवरण |
|---|---|---|
| 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 स्थिति में चले जाएंगे।