通过Paypal Express Checkout客户端JS按钮实现使用负面测试

Amp*_*ign 7 javascript paypal paypal-sandbox paypal-rest-sdk

我目前正在使用客户端JS方法进行PayPal Express结账集成以进行付款.我希望利用他们的"负面测试"功能来尝试模拟潜在的错误并为客户提供适当的响应.

只需参考相关文档页面,以供参考

它似乎启用了否定测试,您需要传递额外的标题以及付款请求,指定您要为该付款触发的特定错误.

这是我目前用于设置事务的JS:

<script>

//We need to convert our generated json string into a bonified javascript object
var paypal_transaction = JSON.parse(JSON.stringify(<?php echo $paypal_json; ?>));

paypal.Button.render({

    env: 'sandbox', // 'production'/'sandbox',

    commit: true, // Show a 'Pay Now' button - Allows us to capture the payment right away

    client: {
        sandbox:   'Ab_hPp7h70DoFKChLMSynNxacQQbGcb_tP1cDbzW9jC6a0rYIZH0CkEYYfkw6csvmlyTmfLnagelqB85',
        production:''
    },

    //How we want the button to look
    style: {
        size: 'responsive',
        color: 'gold',
        shape: 'rect',
        label: 'pay'
    },

    headers: {
                '{"mock_application_codes":"INSTRUMENT_DECLINED"}'


    }



    payment: function(data,actions) {


        return actions.payment.create({

            //Pass our created transaction to paypal.
            payment:paypal_transaction,

            /**
             * We have to set the following fields to prevent the client from
             * changing their delivery address when they're at PayPal
             */
            experience: {
                input_fields: {
                    no_shipping: 0,
                    address_override:1
                },
            }


        });

    },

    onAuthorize: function(data, actions) {
        /**
         * [description]
         * @param payment   - The authorised transaction returned from paypal
         * @return redirect - We redirect the cutomer to our confirmation page as soon as we return from PayPal as we're confident we have the correct
         */
        return actions.payment.execute().then(function(payment) {

            actions.redirect();

        });



   },


    onError: function(err) {
        console.log(err);
        // Show an error page here, when an error occurs
    },


    onCancel: function(data, actions) {
        return actions.redirect();
        // Show a cancel page or return to cart
    }


}, '#paypal-button');
Run Code Online (Sandbox Code Playgroud)

基本上我的问题是在上面的实现中我在哪里指定这样的模拟应用程序代码.

在文档中,他们给出了一个示例cURL请求,下面是需要传递的额外标头:

"贝宝素 - 响应:{\" mock_application_codes\":\" INSTRUMENT_DECLINED\"}"

我只是不知道如何通过JS方法做到这一点.负面测试只能用于服务器端实现吗?

希望这一切都足够清楚!

see*_*mal 1

我自己也遇到了类似的问题,我得到的官方答复是它不可用:

“我知道这是一个令人沮丧的情况。不幸的是,我们没有任何方法为客户端集成提供负面测试。您可以使用 Postman 来执行此操作,但是,我们没有可提供的文档。”

但这确实令人遗憾,例如,其他支付提供商对于某些错误情况有固定的卡号,或者有基于特殊支付价值的代码。PayPal 仅具有用于 Payflow 集成的功能,并且仅当您直接调用其 REST API 时,基于请求标头的模拟内容才可能实现。

PayPal 在这些方面确实很蹩脚,因为即使您通过服务器集成来模拟行为(并不难,为此至少他们有适当的代码示例),这种模拟是明确的并且您可以控制错误。例如,如果它是隐式的,并且源自实际验证但无效的卡,那么它会更现实。