首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nodejs与mongodb的Payment GateWay集成

nodejs与mongodb的Payment GateWay集成
EN

Stack Overflow用户
提问于 2016-07-04 19:27:53
回答 1查看 1.1K关注 0票数 0

嗨,我是集成支付GateWay到我的应用程序,但我被卡住了。对于cod(货到付款)支付模式,它是工作的fine.but,而在集成在线支付网关中,它给人一点痛苦,就像我使用instamojo创建支付链接一样,当链接创建成功时;我将该支付链接返回给客户端,并将用户重定向到该链接

1如果用户成功地填写了卡的详细信息,并且instamojo使用付款详细信息点击了我提供的webhook(post url) 2如果用户取消标签或不付款怎么办

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

代码语言:javascript
运行
复制
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,有没有人可以帮我,请给我推荐的库

EN

Stack Overflow用户

发布于 2016-07-05 15:18:29

您不需要创建cron作业。

您可以先在数据库中创建订单,然后通过create a request传递purpose中的orderID参数来唯一标识支付请求。在创建请求时提供redirect_urlwebhook

在任何付款后,payment_request_idpayment_id被发送到提供的redirect_url

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

如果用户在浏览器窗口/选项卡到达redirect_url之前意外地将其关闭,则可以使用webhook作为备用。

有关更多详细信息,请阅读documentation

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38183624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档