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
很明显,我错过了一些东西,我已经在这件事上坚持了几天。任何帮助都将不胜感激。
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报