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

时间:2017-08-24 16:04:13

标签: javascript paypal paypal-sandbox paypal-rest-sdk

我目前正在使用客户端JS方法进行PayPal Express结帐集成以进行付款。我正在寻求利用他们的"负面测试"该功能旨在模拟潜在错误并为客户提供适当的响应。

仅提及相关文档页面here以供参考

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

这是我目前用于设置交易的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');

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

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

&#34;贝宝素 - 响应:{\&#34; mock_application_codes \&#34;:\&#34; INSTRUMENT_DECLINED \&#34;}&#34;

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

希望这一切都足够清楚!

1 个答案:

答案 0 :(得分:0)

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

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

这确实让人很难过,但是其他支付服务提供商在某些错误情况下具有固定的卡号,或者具有特殊的基于支付值的代码。 PayPal仅具有用于Payflow集成的功能,并且仅当您直接调用其REST API时,基于请求标头的模拟内容也是可能的。

PayPal在这些方面确实很la脚,即使您通过服务器集成来模拟行为(并不难,因为至少它们具有正确的代码示例),这种模拟还是很明显的,并且您可以控制错误。如果它是隐式的,并且源于例如经过实际验证但无效的卡,则将更为现实。