我已经按照贝宝开发者网站上的建议添加了代码。
<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>
In-Context Checkout Overview描述了这个步骤:
对于我的OnLoad事件,我用这个测试:要用PayPal结账,买方点击PayPal结账按钮。
作为对按钮单击的响应,发生以下操作:
In-Context JavaScript打开一个弹出窗口,等待你的表单提交以创建Express Checkout付款。一次成功的创作payment调用返回后续步骤中使用的HATEOAS链接。使用响应中的重定向URL将购买者重定向到贝宝的URL。如果你已经正确地集成了In-Context
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(链接)执行基本相同的调用。
我发布这个并设置为我的答案,以防人们正在寻找一个问题有一个实际的答案。
我的问题是更新与修复。