nodejs环境中Paytm支付网关集成(自定义结账)问题



我正在使用nodejs环境将PayTm支付网关与链接中提到的自定义结账方法集成在一起,在此过程中,我需要使用Initiate Transaction API。现在的问题是,每当我从nodejs调用Initiate Transaction API时,paytm服务器的响应如下-

{"head":{"requestId":null,"responseTimestamp":"1607066431489","version":"v1"},"body":{"extraParamsMap":null,"resultInfo":{"resultStatus":"U","resultCode":"00000900","resultMsg":"System error"}}}

因此,很难判断我是在代码中遗漏了什么,还是文档中提到的集成过程也遗漏了什么。请提出建议。我的代码库已经在下面提到了-

`

const https = require('https');
/* import checksum generation utility */
var PaytmChecksum = require("paytmchecksum");
//FOR TEST/STAGING OF APPLICATION
const MERCHANT_ID = 'XXXXXXXXXXXXXXXXXXX';
const MERCHANT_KEY = 'XXXXXXXXXXXXXXX';
function initPayProcess(orderId, payVal, custId, custMobile, custEmail) {
var paytmParams = {};
paytmParams.body = {
"requestType": "Payment",
"mid": MERCHANT_ID,
"websiteName": "WEBSTAGING",
"orderId": orderId,
"callbackUrl": "",
"txnAmount": {
"value": payVal,
"currency": "INR",
},
"userInfo": {
"custId": custId,
"mobile": custMobile,
"email": custEmail,
},
"enablePaymentMode": {
"mode": "BALANCE",
}
};
/*
* Generate checksum by parameters we have in body
* Find your Merchant Key in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys 
*/
return PaytmChecksum.generateSignature(JSON.stringify(paytmParams.body), MERCHANT_KEY)
.then(function (checksum) {
paytmParams.head = {
"signature": checksum
};
var post_data = JSON.stringify(paytmParams);
var options = {
/* for Staging */
hostname: 'securegw-stage.paytm.in',

port: 443,
path: '/theia/api/v1/initiateTransaction?mid=' + MERCHANT_ID + '&orderId=' + orderId,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': post_data.length
}
};
var response = "";
var post_req = https.request(options, function (post_res) {
post_res.on('data', function (chunk) {
response += chunk;
});
post_res.on('end', function () {
console.log('Response: ', response);
//return response;
});
});
post_req.write(post_data);
post_req.end();
return post_data;
});
}
module.exports = { getCheckSum, initPayProcess };

`

几个月前我也偶然发现了这个问题,幸运的是paytm开发者回复了我的电子邮件,进行了几次电子邮件讨论,发现下面的代码对我有效。

请记住从其node js库导入Paytm,如下代码所示。

const Paytm = require("paytmchecksum");
var paytmParams = {};
paytmParams = {
body: {
requestType: "Payment",
mid: config.PaytmConfig.stag.mid,
orderId: "ORDS" + new Date().getTime(),
websiteName: config.PaytmConfig.stag.website,
txnAmount: {
value: paymentDetails.amount.toString(),
currency: "INR",
},
userInfo: {
custId: paymentDetails.customerId,
},
disablePaymentMode: [
{
mode: "CREDIT_CARD",
},
],
callbackUrl: process.env.HOST_URL + "/callbackfun",
},
};
/*
* Generate checksum by parameters we have in body
* Find your Merchant Key in your Paytm Dashboard at https://dashboard.paytm.com/next/apikeys
*/
const checksum = await Paytm.generateSignature(
JSON.stringify(paytmParams.body),
config.PaytmConfig.stag.key
);
// .then(function (checksum) {
paytmParams.head = {
channelId: "WAP",
signature: checksum,
};
var post_data = JSON.stringify(paytmParams);
var options = {
/* for Staging */
hostname: "securegw-stage.paytm.in",
/* for Production */ // hostname: 'securegw.paytm.in',
port: 443,
path: `/theia/api/v1/initiateTransaction?mid=${config.PaytmConfig.stag.mid}&orderId=${paytmParams.body.orderId}`,
method: "POST",
headers: {
"Content-Type": "application/json",
"Content-Length": post_data.length,
},
};
const responsePaytm = await doRequest(options, post_data);




const https = require("https");
/**
* Do a request with options provided.
*
* @param {Object} options
* @param {Object} data
* @return {Promise} a promise of request
*/
function doRequest(options, data) {
return new Promise((resolve, reject) => {
const req = https.request(options, (res) => {
res.setEncoding("utf8");
let responseBody = "";
res.on("data", (chunk) => {
responseBody += chunk;
});
res.on("end", () => {
resolve(JSON.parse(responseBody));
});
});
req.on("error", (err) => {
reject(err);
});
req.write(data);
req.end();
});
}

最新更新