付款获批后如何从PayPal获取信息?

时间:2012-12-04 23:51:24

标签: c# asp.net asp.net-mvc paypal

我有一个asp.net MVC4动作,它有一个订阅paypal按钮:

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" id="payPalForm">
                <input type="hidden" name="item_number" value="@item.Id">
                <input type="hidden" name="item_name" value="@item.Name">
                <input type="hidden" name="src" value="1">@*Recurring until user cancels*@
                <input type="hidden" name="cmd" value="_xclick">
                <input type="hidden" name="p3" value="1"> @*Billing cycle amount*@
                <input type="hidden" name="t3" value="M"> @*billing cycle period - Month*@
                <input type="hidden" name="no_note" value="1">
                <input type="hidden" name="business" value="dude@dude.com">@*Hiva's paypal account*@
                <input type="hidden" name="currency_code" value="USD">
                <input type="hidden" name="return" value="@returnUrl">
                <input type="hidden" name="amount" id="amount" value="@item.Price">
                <input type="submit" name="Submit" value="Subscribe">
            </form>

在返回网址中,它会点击一个操作,我希望能够看到表单详细信息以及付款是否完成,以及所有好处。这就是我所拥有的:

        public ActionResult PaymentConfirm(FormCollection form)
    {
        //if successful, blah blah
        var user = User.Identity.Name;
        //Merchant merch = ctx.Merchants.Single(x => x.User.UserName == user);
        //merch.Plan = plan;

        return RedirectToAction("Index", "Merchant");
    }

我如何获得这些数据!

2 个答案:

答案 0 :(得分:2)

正如评论所述,解决方案是IPN。基本上,IPN是您在销售工具下在商家帐户上设置的网址。

  1. 您需要创建指向您的操作的网址。 (要在本地执行此操作,您需要执行端口转发以使您的站点公开可用)

  2. IPN包含您需要的所有信息。只要付款完成,它就会收到电话,无论是成功还是失败,它都会带来付款状态。

  3. 以下是您可以参考的代码示例的链接。

    https://www.x.com/developers/PayPal/documentation-tools/code-sample/216623

    更新:有关IPN如何在幕后工作的详细信息,请参阅以下链接

    https://www.paypal.com/cgi-bin/webscr?cmd=p/acc/ipn-info-outside

答案 1 :(得分:0)

如果您使用PayPal REST API,那么您可以这样做:

        // You create the ProcessPayment() method
        string jsonResponse = ProcessPayment(model);

        var jss = new JavaScriptSerializer();
        Payment payment = jss.Deserialize<Payment>(jsonResponse); 

        APIContext apiContext = Configuration.GetAPIContext();
        Payment originalPayment = Payment.Get(apiContext, payment.id);