ინტეგრაცია
ინტეგრაციები callback-ებზე ტყდება
არა იმიტომ, რომ რთულია, არამედ იმიტომ, რომ სამ რამეს გამოტოვებენ. აი ისინი, იმ თანმიმდევრობით, რომლითაც თავს იჩენენ.
- 01შეამოწმე ხელმოწერა
ყოველი callback ატარებს ხელმოწერას, გამოთვლილს მოთხოვნის ნედლ სხეულზე შენი საიდუმლო გასაღებით. გამოთვალე თავად და შეადარე მუდმივ დროში. თუ არ ემთხვევა, უპასუხე 400 და არაფერი შეცვალო: საჯარო მისამართზე ნებისმიერს შეუძლია მიწერა.
// ვითვლით ნედლ სხეულზე, JSON-ის დამუშავებამდე. const expected = crypto .createHmac('sha256', process.env.MP_SECRET) .update(rawBody) .digest('hex'); if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received))) { return res.status(400).end(); } - 02იყავი იდემპოტენტური
ერთი და იგივე შეტყობინება შეიძლება ორჯერ მოვიდეს, და ადრე თუ გვიან მოვა. დაეყრდენი გადახდის იდენტიფიკატორს და არა შემომავალი მოთხოვნის ფაქტს. ორმაგმა დამუშავებამ ორჯერ არ უნდა გასცეს შეკვეთა და ორჯერ არ უნდა დააბრუნოს თანხა.
const already = await orders.findPayment(body.id); if (already?.status === body.status) return res.status(200).end();
- 03უპასუხე სწრაფად, იმუშავე მერე
უპასუხე 200, როგორც კი ფაქტი შეინახე. ნელი სამუშაო გააკეთე შემდეგ. თუ გვიან ან შეცდომით უპასუხებ, ჩვენ მიწოდებას გავიმეორებთ მზარდი ინტერვალებით, და ნელი დამმუშავებელი ერთ გადახდას დუბლების რიგად აქცევს.
დაადასტურე გაცემამდე
Callback გეუბნება, რომ რაღაც შეიცვალა. საქონლის გაცემამდე წაიკითხე გადახდა API-დან და იმოქმედე ამ პასუხით. ეს ერთი მოთხოვნაა, რომელიც თაღლითობის მთელ კლასს აშორებს.
ჰედერის ზუსტი სახელი, ალგორითმი და გამეორებების განრიგი აღწერილია სპეციფიკაციაში, რომელიც გასაღებებთან ერთად გაიცემა, რომ ეს გვერდი არასდროს დაშორდეს იმას, რასაც შლუზი რეალურად აგზავნის.