C# PayPal express结账:点击按钮即可进行付款检查

C# PayPal express结账:点击按钮即可进行付款检查,c#,asp.net,paypal,express-checkout,C#,Asp.net,Paypal,Express Checkout,我将PayPal express checkout(checkout.js V4.0.0)与asp.net mvc结合使用,允许用户为数据交易付费。单击express checkout按钮时,我需要做的是对数据库执行一些检查,并确认PayPal可以继续(这也是与时间相关的,因为数据库可能处于锁定处理状态) 我已经设置了,然后从paypal.Button.render中的payment部分调用create payment controller,但这需要返回带有PaymentID元素的json对象。

我将PayPal express checkout(checkout.js V4.0.0)与asp.net mvc结合使用,允许用户为数据交易付费。单击express checkout按钮时,我需要做的是对数据库执行一些检查,并确认PayPal可以继续(这也是与时间相关的,因为数据库可能处于锁定处理状态)

我已经设置了,然后从
paypal.Button.render
中的payment部分调用create payment controller,但这需要返回带有
PaymentID
元素的
json
对象。如果paypal无法继续,我什么时候才能在服务器端执行这些检查并从paypal进程中中止?如果检查失败,服务器端还需要返回相应的错误页面或消息以显示

这是paypal按钮代码:


paypal.Button.render({
环境:“沙盒”,
付款:功能(解决、拒绝){
var CREATE_PAYMENT_URL='@URL.Action(“PayTransactions”,“Pending”);
paypal.request.post(创建支付URL)
.then(函数(数据){resolve(data.paymentID);})
.catch(函数(err){reject(err);});
},
onAuthorize:函数(数据){
var EXECUTE\u PAYMENT\u URL='1https://my-store.com/paypal/execute-payment';
paypal.request.post(执行支付URL,
{
paymentID:data.paymentID,
payerID:data.payerID
})
.then(函数(数据){/*转到成功页面*/})
.catch(函数(err){/*转到错误页*/});
},
onCancel:函数(数据、操作){
returnactions.redirect();
},
onError:函数(err){
//发生错误时,在此处显示错误页
}
}“#贝宝按钮”);
付款部分称之为:

public异步任务支付事务()
{
//检查是否仍然需要付款或月末是否正在运行
var condition=wait checkdatabaseisavailable();
开关(条件)
{
案例1:
AddModelError(“错误”,“一些错误消息”);
返回重定向操作(“索引”、“待定”);
案例2:
AddModelError(“错误”,“其他错误”);
返回重定向操作(“索引”、“待定”);
}
var paypalPayment=FormPayPalPaymentObject();
返回JsonConvert.SerializeObject(新的{paymentID=paypalPayment.paymentID});
}

问题是,我现在混合了
ActionResult
和json
string
返回类型。

您可以调用
reject(error)
取消支付。

您也可以返回json用于重定向响应,并在重定向或ok响应时使用javascript进行控制

服务器端:

  return JsonConvert.SerializeObject(new { redirect= Url.Action("Index", "Pending") });
Javascript:

     paypal.request.post(CREATE_PAYMENT_URL)
            .then(function (data) {
                if(data.redirect)
                {
                    //cancel the flow and redirect if needed
                    window.location.href = data.redirect;
                }else{
                    resolve(data.paymentID); 
                }
            })
            .catch(function (err) { reject(err); });
        },
最好使用
IActionResult
对象作为PayTransactions的返回值

public async Task<IActionResult> PayTransactions()
{

    ...

    return Json(new { paymentID = paypalPayment.PaymentId });
}
public异步任务支付事务()
{
...
返回Json(新的{paymentID=paypalPayment.paymentID});
}

还认为,由于重定向,添加的模型状态错误是无用的。

我现在有机会添加我正在使用的代码,但我不知道如何从MVC控制器调用<代码>拒绝(错误)< /代码>,以便显示适当的错误消息。