首页 > 解决方案 > 万事达卡付款集成完成付款后如何重定向到链接

问题描述

付款完成后我需要重定向到一个 URL

我使用了文档中提供的代码

<script src="https://ap-gateway.mastercard.com/checkout/version/52/checkout.js"
                 data-error="errorCallback"
                data-cancel="cancelCallback" 
                 data-complete="completeCallback"
                 data-afterRedirect="restorePageState"
                 return_url="{{url('confirm_is_paid/'.$Recipt->id.'/'.$Recipt->security_code)}}"
              >
</script>

<script type="text/javascript">
function errorCallback(error) {
            console.log(JSON.stringify(error));
}
function cancelCallback() {
            console.log('Payment cancelled');
}

Checkout.configure({
        merchant: 'my_merchant_id',
        order: {
                amount: function() {
                        //Dynamic calculation of amount
                          return {{$Recipt->final_price}};
                },
                currency: 'EGP',
                description: 'Ordered goods',
             id: Math.random()
        },
        interaction: {
                operation: 'PURCHASE', // set this field to 'PURCHASE' for Hosted Checkout to perform a Pay Operation. , AUTHORIZE
                merchant: {
                        name: 'AAIB TEST',
                        address: {
                                line1: '200 Sample St',
                                line2: '1234 Example Town'
                        }
                } }
});

function restorePageState(data)
{
    window.location.replace("{{url('confirm_is_paid/'.$Recipt->id.'/'.$Recipt->security_code)}}");
}

function completeCallback(resultIndicator, sessionVersion) {
              window.location.replace("{{url('confirm_is_paid/'.$Recipt->id.'/'.$Recipt->security_code)}}");
           }

Checkout.showPaymentPage();

</script>

一切正常,但付款完成后我无法重定向,所以我可以做些什么来让它在付款完成后重定向到一个 url?

标签: javascriptmastercard

解决方案


以下是有效的,并且已经针对 MPGS 版本 56 到 58 进行了测试

我希望我的回答能找到你。

不幸的是,您提到的问题今天仍然存在,而且很奇怪,MPGS 团队仍然没有解决它。

首先,我想从 MPGS 的文档中指出以下几点:

Requesting a Hosted Checkout interaction is a simple process:

Request a checkout session using the Create Checkout Session operation. The request should include payment and interaction data, as well as completion instructions. A sample curl snippet for the Create Checkout Session operation is shown below.

curl https://ap-gateway.mastercard.com/api/nvp/version/57 \
-d "apiOperation=CREATE_CHECKOUT_SESSION" \
-d "apiPassword=$PWD" \
-d "apiUsername=merchant.<your_merchant_id>" \
-d "merchant=<your_merchant_id>" \
-d "interaction.operation=AUTHORIZE" \
-d "order.id=<unique_order_id>" \
-d "order.amount=100.00" \
-d "order.currency=USD"

这将返回一个session.id您应该包含在您的Checkout.configurejavascript 函数中的内容,您当前的示例代码中缺少该内容。

您的标签缺少参数Checkout.configure()

 session: { 
                id: '<your_create_checkout_session_ID>'
                },

现在深入挖掘并找到答案。在 MPGS 文档的每个部分中,他们建议使用data-complete="completeCallback"or data-complete="http://[your domain]/receiptPage",因为我们正在使用-> 这completeCallback对于我们的实现来说不够好,MPGS 也没有很好地记录,并且or url 不起作用,因为我们会到达付款页面,并且永远不会从 MPGS 的收据页面重定向到我们的服务器。Checkout.showPaymentPage();data-completereturn-url

在深入研究文档后,我们注意到了请求参数interaction.cancelUrl,更重要interaction.returnUrl 的是在Create Checkout Session文档中。

来自 MPGS Create Checkout Sessionapi 文档。

interaction.returnUrl  URI
The URL to which you want to return the payer after completing the payment attempt.
interaction.cancelUrl  URI
The URL to which you want to redirect the payer's browser if they cancel their payment.

并且您会注意到上面的功能与data-completedata-cancel

终于解决了

对于Checkout.showPaymentPage();您必须在初始时传递这些参数request session request

curl https://ap-gateway.mastercard.com/api/nvp/version/57 \
-d "apiOperation=CREATE_CHECKOUT_SESSION" \
-d "apiPassword=$PWD" \
-d "apiUsername=merchant.<your_merchant_id>" \
-d "merchant=<your_merchant_id>" \
-d "interaction.operation=AUTHORIZE" \
-d "order.id=<unique_order_id>" \
-d "order.amount=100.00" \
-d "order.currency=USD"

-d "interaction.returnUrl=<your_returnUrl or data-complete url>"
-d "interaction.cancelUrl<your_cancel_url> or data-cancel url>"

当您想要重定向回您的网站时,添加额外的参数将解决重定向问题。您将在下面找到以下内容Obtain the Payment Result

To return the payer to your shop site, you must either:

provide interaction.returnUrl in the Create Checkout Session operation, OR
define the complete callback in the Hosted Checkout request. See Basic Callbacks.

这应该被重构为interaction.returnUrl应该被使用Checkout.showPaymentPage() 并且complete callback应该被使用在Checkout.showLightbox()

我希望这有助于并为新访问者节省大量时间和电子邮件。

参考:

MPGS-实施托管结帐集成

MPGS-创建结帐会话

MPGS-结帐配置


推荐阅读