我使用angular / node.js堆栈进行payumoney集成。
在角度方面,使用$ http.post将订单放置到服务器端的路由端点(node.js),如下所示:
$http.post('/placeOrder',order).success(function(data, status, headers, config){
//handle responses on client side
console.log("Successfully POSTED to payment gateway");
window.location = "https://test.payu.in/_payment";
}).error(function(data, status, headers, config) {
console.log("Error in posting");
});
实际的繁重工作是在node.js(服务器端)上完成的:
router.post('/placeOrder', function(req, res, next){
hash_data = MERCHANT_KEY+'|'+txnid+'|'+amount+'|'+productinfo+'|'+firstname+'|'+email+'|'+udf1+'|'+udf2+'|'+udf3+'|'+udf4+'|'+udf5+'||||||'+SALT;
var data = querystring.stringify({
'key': MERCHANT_KEY,
'txnid': txnid,
'amount': amount,
'productinfo': productinfo,
'firstname': firstname,
'email': email,
'phone': phone,
'surl': SUCCESS_URL,
'furl': FAILURE_URL,
'curl': FAILURE_URL,
'hash': hash,
'service_provider': SERVICE_PROVIDER
//'salt': SALT
});
//POST options
var POST_OPTIONS = {
hostname: PAYU_BASE_URL,
port: 443,
path: '/_payment',
method: 'POST',
//json: true,
agent: false,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
//'Content-Length': Buffer.byteLength(data)
'Content-Length': data.length
}
};
var resp_status = "";
var req = https.request(POST_OPTIONS, function(response) {
console.log('STATUS: ' + response.statusCode);
console.log('HEADERS: ' + JSON.stringify(response.headers));
response.setEncoding('utf8');
response.on('data', function (chunk) {
console.log("body: " + chunk);
resp_status = 200;
res.json(chunk);
});
response.on('error', function (err) {
console.log("Got error: " + err.message);
resp_status = 500;
return res.send(err);
});
});
req.end(data);
但是,这似乎不起作用,因为POST似乎无法使用此方法。通过网络选项卡在浏览器上进行调试时,我总是看到:
请求网址:https://test.payu.in/_payment 请求方法:GET 状态代码:200 OK
此外,测试付款页面(https://test.payu.in/_payment)显示: "错误原因 交易请求中缺少一个或多个强制参数。"
任何帮助都将不胜感激!!
答案 0 :(得分:0)
按照您提到的“浏览器网络”标签
Request URL:https://test.payu.in/_payment Request Method:GET Status Code:200 OK
这意味着PayU正在通过GET请求而不是POST请求被调用。 PayU仅接受数据作为POST请求。
Also, the test payment page (https://test.payu.in/_payment) shows: "Error Reason One or more mandatory parameters are missing in the transaction request."
这是由于GET请求。我在基于JSF的应用程序中遇到了类似的情况,其中我正确地发送了所有参数,但作为GET请求。稍后,当我切换到POST时,错误会自动得到解决。
有关从angular发送POST请求的信息,请查看下面的链接。
https://www.devglan.com/angular/payumoney-integration-angular
答案 1 :(得分:-1)
我是如何实现这个......
var hashString = this.merchantKey+'|'+ options.uid +'|'+ options.totalPrice + '|'+'options.uid + '|' +
options.recipient_name + '|'+ options.email +'|||||||||||'+ this.merchantSalt ;
var hash = sha512(hashString);
var key1 = $('<input></input>').attr('type', 'hidden').attr('name', "key").val("merchantKey");
var key2 = $('<input></input>').attr('type', 'hidden').attr('name', "txnid").val(options.uid);
var key3 = $('<input></input>').attr('type', 'hidden').attr('name', "amount").val(options.totalPrice);
var key4 = $('<input></input>').attr('type', 'hidden').attr('name', "productinfo").val(options.uid);
var key5 = $('<input></input>').attr('type', 'hidden').attr('name', "firstname").val(options.recipient_name);
var key6 = $('<input></input>').attr('type', 'hidden').attr('name', "email").val(options.email);
var key7 = $('<input></input>').attr('type', 'hidden').attr('name', "phone").val(options.phone);
var key8 = $('<input></input>').attr('type', 'hidden').attr('name', "surl").val("http://192.168.43.121/payment/success");
var key9 = $('<input></input>').attr('type', 'hidden').attr('name', "furl").val("http://192.168.43.121/payment/error");
var key10 = $('<input></input>').attr('type', 'hidden').attr('name', "hash").val(hash);
var key11 = $('<input></input>').attr('type', 'hidden').attr('name', "service_provider").val("payu_paisa");
var form = $('<form/></form>');
form.attr("id", "payuform");
form.attr("action", this.payumoneyLink );
form.attr("method", "POST");
form.attr("style", "display:none;");
form.append(key1, key2, key3, key4, key5, key6, key7, key8, key9,key10, key11);
$("body").append(form);
// submit form
form.submit();
这是我在StacksOverflow上的第一个答案。希望能帮助到你!
答案 2 :(得分:-1)
注意:如果输入类型被隐藏,则angularjs在连接模型和视图时会遇到一些问题。所以请注意这一点。 txnid和hash我从AJAX获取调用,所以我不得不将它绑定在范围内的单独变量中。
角度代码是明星向前,只是填充变量。 还有一件事需要记住,如果您的帐户不活跃,那么您需要使用客户支持提供的测试盐/密钥:
MID : 4934580
Key : rjQUPktU
Salt : e5iIg1jwi8
Authorization : y8tNAC1Ar0Sd8xAHGjZ817UGto5jt37zLJSX/NHK3ok=
Test Card : 5123456789012346
Expiry : 05/20
CVV : 123