ინტეგრაცია

ინტეგრაციები callback-ებზე ტყდება

არა იმიტომ, რომ რთულია, არამედ იმიტომ, რომ სამ რამეს გამოტოვებენ. აი ისინი, იმ თანმიმდევრობით, რომლითაც თავს იჩენენ.

  1. 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();
    }
  2. 02
    იყავი იდემპოტენტური

    ერთი და იგივე შეტყობინება შეიძლება ორჯერ მოვიდეს, და ადრე თუ გვიან მოვა. დაეყრდენი გადახდის იდენტიფიკატორს და არა შემომავალი მოთხოვნის ფაქტს. ორმაგმა დამუშავებამ ორჯერ არ უნდა გასცეს შეკვეთა და ორჯერ არ უნდა დააბრუნოს თანხა.

    const already = await orders.findPayment(body.id);
    if (already?.status === body.status) return res.status(200).end();
  3. 03
    უპასუხე სწრაფად, იმუშავე მერე

    უპასუხე 200, როგორც კი ფაქტი შეინახე. ნელი სამუშაო გააკეთე შემდეგ. თუ გვიან ან შეცდომით უპასუხებ, ჩვენ მიწოდებას გავიმეორებთ მზარდი ინტერვალებით, და ნელი დამმუშავებელი ერთ გადახდას დუბლების რიგად აქცევს.

დაადასტურე გაცემამდე

Callback გეუბნება, რომ რაღაც შეიცვალა. საქონლის გაცემამდე წაიკითხე გადახდა API-დან და იმოქმედე ამ პასუხით. ეს ერთი მოთხოვნაა, რომელიც თაღლითობის მთელ კლასს აშორებს.

ჰედერის ზუსტი სახელი, ალგორითმი და გამეორებების განრიგი აღწერილია სპეციფიკაციაში, რომელიც გასაღებებთან ერთად გაიცემა, რომ ეს გვერდი არასდროს დაშორდეს იმას, რასაც შლუზი რეალურად აგზავნის.