当前位置: 首页 > 知识库问答 >
问题:

PayPal快速结帐:点击按钮即可进行付款检查

许安邦
2023-03-14

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

我已经设置了高级服务器集成,然后从paypal的支付部分调用创建支付控制器。按钮render,但这需要返回一个带有PaymentID元素的json对象。如果paypal无法继续,我什么时候才能在服务器端执行这些检查并从paypal进程中中止?如果检查失败,服务器端还需要返回相应的错误页面或消息以显示。

这是paypal按钮代码:

<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<script>
    paypal.Button.render({
        env: 'sandbox',
        payment: function (resolve, reject) {
            var CREATE_PAYMENT_URL = '@Url.Action("PayTransactions","Pending")';

        paypal.request.post(CREATE_PAYMENT_URL)
            .then(function (data) { resolve(data.paymentID); })
            .catch(function (err) { reject(err); });
        },
        onAuthorize: function(data) {
            var EXECUTE_PAYMENT_URL = 'https://my-store.com/paypal/execute-payment';

            paypal.request.post(EXECUTE_PAYMENT_URL,
            {
                paymentID: data.paymentID,
                payerID: data.payerID
            })
                .then(function(data) { /* Go to a success page */ })
                .catch(function (err) { /* Go to an error page  */ });
        },
        onCancel: function (data, actions) {
            return actions.redirect();
        },
        onError: function (err) {
            // Show an error page here, when an error occurs
        }
    }, '#paypal-button');
</script>

付款部分称之为:

public async Task<string> PayTransactions()
{
    // check if payment is still necessary or end of month is running
    var condition = await CheckDatabaseIsUsable();

    switch (condition)
    {
        case 1:
            ModelState.AddModelError("error", "some error message");
            return RedirectToAction("Index", "Pending");

        case 2:
            ModelState.AddModelError("error", "some other error");
            return RedirectToAction("Index", "Pending");
    }

    var paypalPayment = FormPayPalPaymentObject();

    return JsonConvert.SerializeObject(new { paymentID = paypalPayment.PaymentId });
}

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

共有2个答案

寇靖
2023-03-14

您可以调用拒绝(错误)来取消付款。

广楚
2023-03-14

如果是重定向或ok响应,还可以为重定向响应返回json,并使用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对象作为PayTransaction的返回值

public async Task<IActionResult> PayTransactions()
{

    ...

    return Json(new { paymentID = paypalPayment.PaymentId });
}

还要考虑到,由于重定向,您正在添加的modelstate错误是无用的。

 类似资料:
  • 我正在开发一个WordPress插件,在那里我可以接受PayPal Express的付款。我能够成功获得PaymentID和PayerID。但我不知道如何验证付款。另外,我可以从payerID或PaymentID获取付款人详细信息吗? 下面是我用来创建支付按钮的脚本。 非常感谢。

  • 我的paypal按钮有一个小问题默认情况下,我会尝试隐藏它以显示我自己的按钮:/ 这是我的密码。js }); 问题是,我总是有黄色的贝宝按钮,出现在我的按钮底部,我不能得到面具。

  • 我使用paypal按钮管理器(我保存的按钮页面)创建了一些paypal按钮。到目前为止一切正常。 然而,我希望贝宝支付页面默认打开信用卡标签。(标签上写着“没有贝宝账户?”)。 从其他stackoverflow答案中,我可以看到我需要使用快速签出,在API调用中,我需要设置SOLUTIONTYPE=Sole和LANDINGPAGE=Billing。 但是,我如何在我的普通Paypal支付按钮(我使

  • 是否可以使用新的paypal结账(请参阅:https://developer.paypal.com/docs/checkout/)使用自定义付款按钮(不带智能付款按钮),如以下实现屏幕截图所示? 有人可以告诉我一些指南或代码,如何做新的贝宝结账没有智能支付按钮? 原因:我们不想用paypal按钮破坏我们的设计,但我们想为用户提供相同的按钮,用于他选择的任何付款方式。

  • 我正在实施贝宝结账。 我有以下javascript代码paypal.button.render({ 弹出(上图)出现时,我点击贝宝按钮,我可以填写信用卡细节等,如图像。它在沙箱所以我使用测试卡号。当我单击“立即付款”按钮时,它会显示“正在处理”,并一遍又一遍地返回到相同的表单。我现在可以在控制台或回调中看到信息 I.W希望看到我的警报 onauthorize:函数(数据,操作){