.Net In-Context弹出窗口不显示Paypal屏幕

时间:2016-09-09 21:19:27

标签: .net paypal paypal-sandbox

我已经按照Paypal开发者网站上的建议添加了代码。

<form id="myPaymentContainer" method="post"></form>
<script type="text/javascript">
    window.paypalCheckoutReady = function () {
        paypal.checkout.setup('XUM4RANUNKG4U',
        {
            environment: 'sandbox',
            container: 'myPaymentContainer'
        });
    };
</script>
<script type="text/javascript" src="//www.paypalobjects.com/api/checkout.js" async></script>

上下文检查概述描述了步骤:

  

要使用PayPal结账,买家会点击PayPal Check out按钮。

     

响应按钮单击,会发生以下操作:

     

In-Context JavaScript打开一个弹出窗口,等待你的   表单提交以创建快速结账付款。一个成功的创造   付款电话会返回您在后续步骤中使用的HATEOAS链接。   使用响应中的重定向网址将买方重定向到   PayPal网址。 如果您已正确集成了In-Context   JavaScript,弹出窗口管理重定向。

对于我的OnLoad事件,我正在测试:

    var config = ConfigManager.Instance.GetProperties();
    if (Page.IsPostBack)
    {
        var accessToken = new OAuthTokenCredential(config).GetAccessToken();
        var apiContext = new APIContext(accessToken);



        var transaction = new Transaction()
        {
            amount = new Amount()
            {
                currency = "USD",
                total = "20"
            },
            description = "My product description",
            item_list = new ItemList()
            {
                items = new List<Item>()
                {
                    new Item()
                    {
                        name="The Product",
                        currency="USD",
                        price="20",
                        quantity = "1"
                    }
                }
            },
            invoice_number = "123"
        };

        var payer = new Payer()
        {
            payment_method = "paypal"
        };

        var payment = new Payment()
        {
            intent = "sale",
            transactions = new List<Transaction>() { transaction },
            payer = payer,
            redirect_urls = new RedirectUrls
            {
                cancel_url = "/Home.aspx",
                return_url = "/Checkout.aspx",
            }
        };

        var createdPayment = payment.Create(apiContext);
        var paypalLinks = createdPayment.links;

        if (paypalLinks != null)
        {
            var redirectLink = paypalLinks.FirstOrDefault(lnk => lnk.method == "REDIRECT");
            if (redirectLink != null)
            {
                Response.Redirect(redirectLink.href);
            }
        }
    }

如果我将action属性添加到<form>,弹出窗口将填充该操作。我期待弹出窗口填充Paypal HTML,以便用户可以登录。如果我删除表单上的操作,则在弹出窗口中呈现托管该按钮的同一页面。

更新

我确实让这个工作正常。我没有使用表单标签,而是使用div:

<div id="myPaymentContainer" />
<script type="text/javascript">
    window.paypalCheckoutReady = function () {
        paypal.checkout.setup('XUM4RANUNKG4U',
        {
            environment: 'sandbox',
            container: 'myPaymentContainer'
        });
    };
</script>
<script type="text/javascript" src="//www.paypalobjects.com/api/checkout.js" async></script>

我稍微重构了逻辑,但它对Response.Redirect( link )的调用基本相同。希望这会有所帮助。

1 个答案:

答案 0 :(得分:0)

我发布这个并设置为我的答案,以防人们看到问题有实际答案。

我的问题已通过修复程序更新。