[ad_1]
أنا أستخدم NMI لتكامل الدفع. لقد قمت بإنشاء NMI API لإضافة اشتراك مخصص باستخدام هذا الوثائق
أنا أستخدم نقطة نهاية webhooks API للحصول على تلك المعلومات وحالة الدفع والاشتراكات. حيث أحصل على معلومات الإضافة والحذف الخاصة بالاشتراك ولكن لا أحصل على معلومات الدفعات التلقائية المتكررة. لقد اشتركت في قواعد يومية، وبالتالي فإن الرسوم المتكررة ستكون عبارة عن دفعات تلقائية من بطاقات الائتمان، وسأحصل على المعلومات باستخدام NMI webhook API. ولا أحصل على تفاصيل الدفعات التلقائية المتكررة. أقوم بتخزين هذه المعلومات في MongoDb الخاص بي. لا أعرف كيفية الحصول على تفاصيل الدفعات التلقائية المتكررة مثل نجاح الدفعات أو رفضها أو أي حالة أخرى.
ملحوظة: لقد قمت بالفعل بإضافة رسوم يومية متكررة حتى أتمكن من الحصول على ردود على هذه الدفعات ولكنني لا أتلقى أي دفعات تلقائية. أنا أستخدم اختبار NMI حساب
ما حاولت:
واجهة برمجة تطبيقات Webhook الخاصة بي:
router.post("/nmi", async (req, res) => { try { const signingKey = "MY SIGNING KEY"; const webhookBody = JSON.stringify(req.body); // Assuming body is JSON const sigHeader = req.headers["webhook-signature"]; if (!sigHeader || sigHeader.length < 1) { throw new Error("Invalid webhook - signature header missing"); } const sigMatches = sigHeader.match(/t=(.*),s=(.*)/); if (!sigMatches || sigMatches.length !== 3) { throw new Error("Unrecognized webhook signature format"); } const nonce = sigMatches[1]; const signature = sigMatches[2]; if (!webhookIsVerified(webhookBody, signingKey, nonce, signature)) { throw new Error( "Invalid webhook - invalid signature, cannot verify sender" ); } // Webhook is now verified to have been sent by you, continue processing console.log("Webhook is verified"); const webhook = req.body; // Assuming JSON payload if (webhook.event_type === "recurring.subscription.add") { parsedWebhook.event_body.subscription_id}) const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging added", amount: webhook.event_body.plan.amount, }); console.log("req.body is here : ", req.body); await payment.save(); } else if (webhook.event_type === "recurring.subscription.update") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging subscription update", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "recurring.subscription.delete") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging subscription delete", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.auth.failure") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction auth failure", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.auth.success") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction auth success", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.auth.unknown") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction auth unknown", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.capture.success") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction capture success", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.capture.failure") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction capture failure", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.capture.unknown") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction capture unknown", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.credit.success") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction credit success", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.sale.success") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction sale success", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.void.success") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction void success", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.validate.success") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction validate success", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } else if (webhook.event_type === "transaction.validate.failure") { const payment = await AutoRecPayments.create({ nmisubscriptionId: webhook.event_body.subscription_id, email: webhook.event_body.billing_address.email, description: "Recurring charging transaction validate failure", amount: webhook.event_body.plan.amount, }); //Save payment details of the user in payment collection await payment.save(); } res.status(200).send("Webhook processed successfully"); } catch (error) { console.error("Error handling webhook:", error); res.status(500).send("Error processing webhook"); } });
هنا واجهة برمجة تطبيقات الاشتراك المخصصة:
router.post("/custom-add-subscription", async (req, res) => { try { const { security_key, recurring, plan_payments, plan_amount, dayFrequency, ccnumber, ccexp, first_name, last_name, address, email, } = req.body; let postData = { security_key: "MY SIGNING KEY", recurring: "add_subscription", plan_payments, plan_amount, day_frequency: dayFrequency ? dayFrequency : 30, ccnumber, ccexp, first_name: first_name, last_name: last_name, address1: address, email, }; postData = querystring.stringify(postData); var config = { method: "post", url: "https://secure.nmi.com/api/transact.php", headers: { "Content-Type": "application/x-www-form-urlencoded", }, data: postData, }; axios(config) .then(async (response) => { const parsedResponse = querystring.parse(response.data); console.log("ek ek krne", parsedResponse); if (parsedResponse.response_code == 100) { // Handle successful subscription creation sendResponse(res, "Custom subscription added successfully."); } else { // Handle subscription creation failure sendResponse(res, parsedResponse.responsetext, 403); } }) .catch(function (error) { sendResponse(res, error, 500); }); } catch (error) { sendResponse(res, "Something went wrong!", 500); } });
الحل 1
نظرًا لأن مشكلتك خاصة بنظام NMI، فيجب عليك استخدام منتدى المساعدة الخاص بهم.
[ad_2]
コメント