【发布时间】:2020-01-04 01:58:32
【问题描述】:
我目前正在处理一个 C# Windows 窗体项目,该项目要求用户在进行任何处理之前付款。我正在使用 Square .Net SDK 进行支付处理,并成功地使用 Checkout API 生成的 Checkout URL 成功地通过沙盒环境获得了付款。我的问题是是否有一种简单的方法来获取付款过程是否已完成。现在,我只是用相同的顺序(具有相同的幂等键)轮询 API 并等待它返回一个错误,即该顺序不再有效。这是我当前代码的主干:
var bodyOrderLineItems = new List<CreateOrderRequestLineItem>();
long totalCost = 100;
var charge0 = new Money.Builder().Amount(totalCost).Currency("USD").Build();
bodyOrderLineItems.Add(new CreateOrderRequestLineItem.Builder("1").Name("Incredibly Valuable Product").BasePriceMoney(charge0).Build());
var order = new CreateOrderRequest.Builder()
.ReferenceId("reference_id")
.LineItems(bodyOrderLineItems)
.Build();
var body = new CreateCheckoutRequest.Builder("Test_iKey4", order)
.AskForShippingAddress(false)
.Build();
var checkoutApi = client.CheckoutApi;
try
{
CreateCheckoutResponse result = checkoutApi.CreateCheckout(locationsString, body);
System.Diagnostics.Process.Start(result.Checkout.CheckoutPageUrl);
while (true)
{
System.Threading.Thread.Sleep(5000);
//while payment hasn't gone through
try
{
result = checkoutApi.CreateCheckout(locationsString, body);
}
catch (ApiException e)
{
MessageBox.Show(e.Errors[0].Detail);
break;
}
}
MessageBox.Show("Payment Must Have Gone Through");
}
catch (ApiException e) { MessageBox.Show(e.Errors[0].Detail); };
这是一种有效的方法吗?虽然这似乎确实有效,但我觉得我正在用请求淹没 api。我对 Square API 非常缺乏经验,因此我们将不胜感激。
【问题讨论】: