在paypal-express-checkout-simple中添加运费

时间:2017-06-05 06:33:29

标签: angularjs node.js paypal paypal-sandbox

我使用了 paypal-express-checkout-simple 。我需要为每个产品添加运费并显示到paypal结帐页面。我是否需要更改paypal中的任何帐户设置?

我已关注https://www.npmjs.com/package/paypal-express-checkout-simple

对此有任何帮助表示高度赞赏。

1 个答案:

答案 0 :(得分:0)

我在本地节点模块文件中对lib / paypal-express-checkout.js文件进行了更改。

我添加了 params.PAYMENTREQUEST_0_SHIPPINGAMT ,这在运费方面的功能中缺失。

Paypal.prototype.setExpressCheckoutPayment = function(email, invoiceNumber, amount, totalShipCost, description, currency, returnUrl, cancelUrl, onlyPayPalUsers, callback) {
    var self = this;
    var params = self.params();
    if (email) {
        params.EMAIL = email;
    }

    params.SOLUTIONTYPE = onlyPayPalUsers === true ? 'Mark' : 'Sole';
    params.PAYMENTREQUEST_0_AMT = prepareNumber(amount + totalShipCost); // ***add ship cost here
    params.PAYMENTREQUEST_0_DESC = description;
    params.PAYMENTREQUEST_0_CURRENCYCODE = currency;
    params.PAYMENTREQUEST_0_INVNUM = invoiceNumber;
    params.PAYMENTREQUEST_0_CUSTOM = invoiceNumber + '|' + params.PAYMENTREQUEST_0_AMT + '|' + currency;
    params.PAYMENTREQUEST_0_PAYMENTACTION = 'Sale';
    params.PAYMENTREQUEST_0_ITEMAMT = prepareNumber(amount);
    params.PAYMENTREQUEST_0_SHIPPINGAMT = prepareNumber(totalShipCost); // ***add variable for ship cost
    params = _.extend(params, this.getItemsParams());

    params.RETURNURL = returnUrl;
    params.CANCELURL = cancelUrl;

    params.NOSHIPPING = 0;
    params.ALLOWNOTE = 1;
    params.REQCONFIRMSHIPPING = 1;
    params.METHOD = 'SetExpressCheckout';

    params = _.extend(params, this.payOptions);

    self.request(self.url, 'POST', params, function(err, data) {
        if (err) {
            callback(err);
            return;
        }

        if (data.ACK === 'Success') {
            callback(null, { 
                redirectUrl: self.redirect + '?cmd=_express-checkout&useraction=commit&token=' + data.TOKEN, 
                token: data.TOKEN 
            });
            return;
        }

        callback(new Error('ACK ' + data.ACK + ': ' + data.L_LONGMESSAGE0));
    });

    return self;
};

我从api调用 setExpressCheckoutPayment 功能时已通过运费,这解决了我的问题,以显示paypal结帐页面上的运费。

请参阅https://github.com/totaljs/node-paypal-express-checkout/issues/24 还有更多细节。 快乐的编码。