ये ऑर्डर एपीआई (बनाएं, क्वेरी करें और पुनः भेजें) HMAC-SHA256 हस्ताक्षर का उपयोग करते हैं। GET /api/v1/ping को केवल API कुंजी की आवश्यकता है। भुगतान कॉलबैक में एक हस्ताक्षर भी शामिल है। HMAC आपके व्यापारी Webhook रहस्य का उपयोग करता है, आपकी API कुंजी का नहीं।
01. हेडर विशिष्टताएँ
01. ऑर्डर API अनुरोध भेजा जा रहा है
Client to Serverअनुरोध बनाने, क्वेरी करने और पुनः भेजने के लिए भी X-Bolt-Key की आवश्यकता होती है। timestamp सर्वर क्लॉक के 5 मिनट के भीतर होना चाहिए। पुनः प्रयास करते समय एक नया timestamp और हस्ताक्षर उत्पन्न करें।
02. भुगतान कॉलबैक प्राप्त हो रहा है
Server to MerchantBoltUtil कॉलबैक टाइमस्टैम्प और हस्ताक्षर उत्पन्न करता है। रिसीवर्स को रॉ बॉडी को सत्यापित करना चाहिए, timestamp विंडो की जांच करनी चाहिए और घटनाओं और व्यावसायिक ऑर्डरों को निष्क्रियता से संभालना चाहिए।
02. हस्ताक्षर गणना
हस्ताक्षरित सामग्री का निर्माण करें
हेडर का टाइमस्टैम्प, एक बिंदु और अनुरोध का सटीक मूल बॉडी जोड़ें: timestamp + "." + raw_body। UTF-8 प्रयोग करें; बॉडी खाली होने पर भी बिंदु रखें।
// 1. Construct payload: timestamp + "." + body
String payload = timestamp + "." + body;HMAC-SHA256 की गणना करें
अपने व्यापारी Webhook कॉन्फ़िगरेशन से प्राप्त रहस्य का उपयोग करें। हस्ताक्षर करने के लिए उपयोग किया जाने वाला मुख्य भाग आपके API अनुरोध में भेजे गए मुख्य भाग से बिल्कुल मेल खाना चाहिए।
// JDK standard library: javax.crypto.Mac and SecretKeySpec
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] hash = mac.doFinal(payload.getBytes(StandardCharsets.UTF_8));लोअरकेस हेक्साडेसिमल के रूप में एन्कोड करें
32 बाइट के डाइजेस्ट को 64 छोटे अक्षरों वाले हेक्साडेसिमल वर्णों में बदलें। API अनुरोध में इसे X-Bolt-Signature में भेजें। सूचना को X-Bolt-Webhook-Signature से स्थिर समय तुलना द्वारा सत्यापित करें।
// JDK 17+: java.util.HexFormat
String signature = HexFormat.of().formatHex(hash);03. सत्यापन नोट्स
- सत्यापन से पहले JSON को पार्स और पुनः क्रमांकित न करें। व्हाइटस्पेस, लाइन ब्रेक, कुंजी क्रम और एन्कोडिंग सभी हस्ताक्षर को प्रभावित करते हैं।
- HMAC सामग्री की अखंडता की पुष्टि करता है, लेकिन स्वयं पुनः प्रसारण को नहीं रोकता है। timestamp ताजगी की जांच करें और ईवेंट को डीडुप्लिकेट करें।
- एक वैध हस्ताक्षर का मतलब यह नहीं है कि पूर्ति पूरी हो गई है। ऑर्डर एसोसिएशन, भुगतान स्थिति, राशि, मुद्रा और निपटान प्रकार की जांच करें।