0

嗨,我是我的应用程序的集成支付网关,但我被卡住了。对于 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 工作,任何人都可以帮忙,请为此建议库

4

1 回答 1

0

您无需创建 cron 作业。

您可以先在数据库中创建订单,然后创建一个请求,并在参数中传递 orderIDpurpose以唯一标识付款请求。在创建请求时redirect_url提供。webhook

任何付款后payment_request_id并发payment_id送到redirect_url提供的。

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

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

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

于 2016-07-05T07:18:29.470 回答