【问题标题】:Payment GateWay integration in nodejs and mongodbnodejs 和 mongodb 中的支付网关集成
【发布时间】:2016-07-04 11:27:52
【问题描述】:

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

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

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

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 作业,任何人都可以提供帮助,请为此建议库

【问题讨论】:

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


    【解决方案1】:

    您无需创建 cron 作业。

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

    在任何付款payment_request_idpayment_id 发送到提供的redirect_url 之后。

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

    如果用户在到达 redirect_url 之前不小心关闭了浏览器窗口/选项卡,您可以使用 webhook 作为后备。

    更多详情,请阅读documentation

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 2012-07-17
      • 2016-02-02
      • 2012-05-21
      • 2011-03-10
      • 2013-07-21
      • 2015-03-19
      • 2013-07-18
      • 2017-01-19
      相关资源
      最近更新 更多