Paypal ipn捕获付款取消事件

Paypal ipn捕获付款取消事件,paypal,paypal-ipn,paypal-buttons,Paypal,Paypal Ipn,Paypal Buttons,我正在尝试做以下工作:当用户选择一些项目并单击我们网站上的“立即付款”按钮时,我将所选项目的状态标记为“保留”,以便其他人无法选择这些项目。如果我从ipn收到“完成”,我会将项目标记为“已购买”,并进行其他数据库更改。如果我从ipn收到“已取消”,我会将“保留”项目标记回“可用” 当用户付款(完成)时,它工作正常。但是,如果用户退出支付流程(例如,只需关闭浏览器选项卡),我将不会收到任何消息。我不知道为什么会这样。或者,如果交易未完成,ipn就不会给出消息 以下是paypal按钮的代码:

我正在尝试做以下工作:当用户选择一些项目并单击我们网站上的“立即付款”按钮时,我将所选项目的状态标记为“保留”,以便其他人无法选择这些项目。如果我从ipn收到“完成”,我会将项目标记为“已购买”,并进行其他数据库更改。如果我从ipn收到“已取消”,我会将“保留”项目标记回“可用”

当用户付款(完成)时,它工作正常。但是,如果用户退出支付流程(例如,只需关闭浏览器选项卡),我将不会收到任何消息。我不知道为什么会这样。或者,如果交易未完成,ipn就不会给出消息

以下是paypal按钮的代码:

                            <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
                                <input type="hidden" name="cmd" value="_cart">
                                <input type="hidden" name="upload" value="1">
                                <input type="hidden" name="business" value="********-facilitator@gmail.com">
                                <input type="hidden" name="env" value="www.sandbox">
                                <input type="hidden" name="address_override" value="1">
                                <c:set var="index" value="${1}"/>
                                <c:forEach items="${items}" var="item">
                                   <input type="hidden" name="item_name_${index}" value="${item.title}">
                                   <input type="hidden" name="amount_${index}" value="${item.askPrice}">
                                   <input type="hidden" name="tax_${index}" value="$<fmt:formatNumber type="number" maxFractionDigits="2" value="${item.askPrice * taxRate}" />">
                                   <c:if test="${index == 1}">
                                       <input type="hidden" name="shipping_${index}" value="$<fmt:formatNumber type="number" maxFractionDigits="2" value="${shipmentFee}" />">
                                   </c:if>
                                   <c:set var="index" value="${index + 1}"/>
                                </c:forEach>
                                <c:remove var="index"/>
                                <!-- Fill full name in the first_name field -->
                                <input type="hidden" name="first_name" value="${info.recipient}">
                                <input type="hidden" name="notify_url" value="<c:url value="https://********.localtunnel.me/payment/paypal/ipn"></c:url>">
                                <input type="hidden" name="address1" value="${info.addressLine1}">
                                <input type="hidden" name="address2" value="${info.addressLine2}">
                                <input type="hidden" name="city" value="${info.city}">
                                <input type="hidden" name="state" value="${info.state}">
                                <input type="hidden" name="zip" value="${info.zip}">
                                <input type="hidden" name="country" value="US">
                                <input type="hidden" name="email" value="${info.email}">
                                <input type="hidden" name="custom" value="${flowId}">
                                <input type="image" name="submit" border="0"
                                    src="https://www.paypalobjects.com/webstatic/en_US/i/buttons/checkout-logo-large.png" alt="Check out with PayPal">
                            </form>


除非他做了会让Paypal发送消息的事情,否则你无法收到消息。我建议您在项目保留上设置一个超时。@EJP但是您知道是否有办法在paypal按钮上设置过期时间吗?如果一个用户输入付款流,但三天内未提交付款,则我无法将项目保留三天。另一方面,如果我只是在20分钟后将这些项目标记为可用,可能会导致两个用户为同一项目付款。PayPal登录会话将过期,但上面显示的网站付款标准按钮不会过期。我建议你扭转这个问题:不要标记你的库存,然后再付款;从PayPal获得授权(而非销售!);然后在用户授权付款后标记您的库存,然后捕获资金。是的,这是一个有用的建议