返回

javascript-NMI网关更新订阅

发布时间:2022-04-20 10:34:11 438
# 前端

所以我正在用NMI网关api实现一个支付系统。除了我的更新订阅功能,我的一切都正常工作。为了详细说明NMIAPI的工作原理,您需要为您想要完成的过程输入所需的变量,在我的例子中,它是更新计划的订阅。所以我把变量放进去,并直接用POST发送到NMI,用传入的变量更新订阅。我得到的回复是ok,说它已经通过并更新了订阅,但是当我去我的商户门户网站确保它工作时,什么都没有改变。要进行定期付款,您首先要设置一个计划,然后用户订阅这些计划。我有三个不同的计划,用户应该能够升级或降级到。

下面是我的实用程序函数,它将更新计划中的订阅

export const updateSubNmi = async ({
  subscription_id,
  plan_amount,
  plan_payments,
  day_frequency,
}) => {
  const data = {
    recurring: 'update_subscription',
    subscription_id: subscription_id,
    plan_amount: plan_amount,
    plan_payments: plan_payments,
    day_frequency: day_frequency,

    //These are the required variables to read and react with NMI gateway
    merchant_id: process.env.NMI_MERCHANT_ID,
    merchant_password: process.env.NMI_MERCHANT_PASSWORD,
    tokenization_key: process.env.NMI_TOKENIZATION_KEY,
    security_key: process.env.NMI_API_KEY,
  }
  console.log('data to pass in: ', data)

  const options = {
    method: 'POST',
    url: 'https://secure.nmi.com/api/transact.php',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    form: data,
  }
  return new Promise((resolve, reject) => {
    request(options, (err, response, body) => {
      if (err) {
        reject(err)
      } else {
        resolve(body, response)

        console.log(body)

        // console.log(response.body)
      }
    })
  })
}

export default updateSubNmi

然后我设置了一个控制器,等待上面的函数运行。

import expressAsyncHandler from 'express-async-handler'
import updateSubNmi from '../../Utils/nmiGatewayFunctions/nmiSubUpdate.js'
import Subscription from '../../models/Subscription.js'

export const updateNmiSub = expressAsyncHandler(async (req, res) => {
  try {
    const { subscription } = req.body
    const sub = await Subscription.findById(subscription._id)
    if (!sub) {
      return res.status(400).json({
        message: 'Subscription not found',
      })
    }
    try {
      if (sub.plan_id === '') {
        console.log(`Free Subscription: ${sub.plan_id}`)
      }
    } catch (error) {
      console.log(error)

      return res.status(500).json({
        success: false,
        message: err.message,
      })
    }
    await updateSubNmi(req.body)
    res.status(200).json({ message: `process finished` })
  } catch (error) {
    console.error(error)
    res.status(500).json({ message: `Server Error: ${error.message}` })
  }
})

export default updateNmiSub

回复200 OK,并给出我的自定义消息,我已设置为“OK”;“流程已完成”;

{
    "subscription": {
        "_id": "6256f0ab7417d91f8e080aec"
    },
    "subscription_id": "7146266977",
    "plan_amount": "49.99",
    "plan_payments": "0",
    "day_frequency": "30"
    
}

一旦我的路线到达,它会给我一个来自订阅网关的响应,如下所示,但是当我进入我的商户门户以确保订阅更新到不同的计划时,它不会显示更改。

response=1&responsetext=Subscription Updated&authcode=&transactionid=7146266977&avsresponse=&cvvresponse=&orderid=&type=&response_code=100&subscription_id=7146266977

很明显,我错过了一些东西,我已经在这件事上坚持了几天。任何帮助都将不胜感激。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像