在nodejs和mongodb中支付GateWay集成

时间:2016-07-04 11:27:53

标签: javascript node.js mongodb mean-stack instamojo

您好我是我的应用程序集成支付GateWay但我被卡住了。对于鳕鱼(货到付款)支付方式,它工作正常。但在集成在线支付网关时,有点痛苦,就像我在创建链接时使用instamojo创建支付链接;我将该付款链接返回给客户并将用户重定向到该链接

1如果用户成功填写卡片详细信息并且instamojo点击我提供的webhook(post url)并显示付款详细信息 2如果用户取消标签或不支付

,该怎么办?

这里的问题是在数据库中创建顺序的位置。如果要在我的应用程序的placeorder url上创建,那么我需要设置订单状态不完整并运行第二个条件的cron作业(因为订单已经创建并且webhook没有被intamojo命中)。这是正确的做法还是有其他更好的方法来处理所有这些

Promise.all([getUpdatedCart(userId), findUser(userId), getDiscount(userId,couponCode)])
                .then(function(resultArray) {
                    var cart = resultArray[0];
                    var user = resultArray[1];
                    var discountAmount = resultArray[2];
                    var offerId=null;
                    if (!cart)
                        return sendResponse(response,400,"error","Cart Not Found");
                    if (discountAmount>0) 
                        var offerId=getOfferId(couponCode);
                    var order = {
                        user: user._id,
                        cart: cart._id,
                        shippingAddress:shippingAddressId,
                        billingAddress:billingAddressId,
                        paymenMethod: paymentMethod,
                        offer:offerId,
                        deliveryNote:deliveryNote,
                        amount:cart.amount
                    };

                    var newOrder = Order(order);
                    if (paymentMethod==='cod') 
                        newOrder.save(function(error,order){
                            if (!error)
                                if (order){
                                    Cart.expireCart(cart._id);
                                    return sendResponse(response,201,"success",order);
                                }

                        });
                    else if(paymentMethod==='intamojo'){
                        var purpose='Order Number-'+ newOrder.id;
                        Instamojo.setHeaders(InstaConfig.test.API_KEY, InstaConfig.test.API_AUTH_TOKEN);
                        var amountPayable = cart.amount - discountAmount;
                        var data = generatePayload(user, purpose, amountPayable);
                        Instamojo.createPaymentLink(data, function(error, resultResponse, body) {
                            if (resultResponse && body && resultResponse.statusCode===201)
                                return sendResponse(response,200,"success",body.longUrl+"?embed=form");
                        });
                    }
                    else if(paymentMethod==='payumoney'){

                    }
                    else
                        return sendResponse(response,400,"error","Invalid Mode of Payment");

                })      
                .catch(function(error) {
                    return sendResponse(response,400,"error",error);
                });

任何人都可以请帮助,如果我需要写cron job,请为此建议库

1 个答案:

答案 0 :(得分:0)

您无需创建cron作业。

您可以先在数据库中创建订单,然后create a requestpurpose参数中传递orderID以唯一标识付款请求。 在创建请求时提供redirect_urlwebhook

任何付款payment_request_idpayment_id发送至所提供的redirect_url后。

使用payment_request_idpayment_id获取payment的状态,响应将payment: { ... ,status, ... }用于更新数据库中的状态。

如果用户在到达redirect_url之前意外关闭浏览器窗口/标签,则可以使用webhook作为后备。

有关详情,请参阅documentation