[ad_1]
支払い統合に NMI を使用しています。 これを使用してカスタムサブスクリプションを追加するためのNMI APIを作成しました ドキュメント
Webhook API エンドポイントを使用して、これらの情報と支払いとサブスクリプションのステータスを取得しています。 サブスクリプションの追加および削除情報は取得できますが、定期的な自動支払い情報は取得できません。 私は毎日のベースを購読しているため、定期的な料金はクレジット カードからの自動支払いになり、NMI Webhook API を使用して情報を取得します。これらの定期的な自動支払いの詳細は取得できません。 私はそれらの情報を MongoDb に保存しています。 支払いの成功、拒否、その他のステータスなど、定期的な自動支払いの詳細を取得する方法がわかりません。
注記: 支払い応答を取得できるように、毎日の定期的な請求をすでに追加していますが、それでも自動支払いを取得できません。 NMIテストを使用しています アカウント
私が試したこと:
私のWebhook API:
JavaScript
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"); } });
カスタムサブスクリプションAPIは次のとおりです。
JavaScript
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]
コメント