PayPal REST SDK:删除送货地址和付款授权,使其进入待处理状态[关闭]

Posted

技术标签:

【中文标题】PayPal REST SDK:删除送货地址和付款授权,使其进入待处理状态[关闭]【英文标题】:PayPal REST SDK: Remove shipping address and payment authorization so it does go to pending state [closed] 【发布时间】:2019-02-17 05:24:47 【问题描述】:

我想向我的客户出售一项或多项功能,并且付款应该是即时的,以便在交易完成时立即解锁一项功能。

我设法执行了交易,沙盒个人账户显示该交易,但沙盒商家账户没有显示任何批准它的信息。沙盒个人账户显示“这是一个临时授权,以确保您的付款方式将涵盖付款。当jawad商家的测试商店完成您的订单时,您的付款方式将被收取。”

这是代码:

var express = require('express');
const router = express.Router();
var paypal = require('paypal-rest-sdk');

paypal.configure(
    'mode': 'sandbox', //sandbox or live 
    'client_id': 'client id', 
    'client_secret': 'client secret'  
);

// payment process 
router.use('/buy', (req, res) => 


    // payment object 
    var payment = 
        "intent": "authorize",
        "payer": 
            "payment_method": "paypal"
        ,
        "redirect_urls": 
            "return_url": "http://localhost:4040/xyz/paypal/success",
            "cancel_url": "http://localhost:4040/xyz/paypal/err"
        ,
        "transactions": [
            "item_list": 
                "items": [
                    "name": 'item1',
                    "sku": "item",
                    "price": '39',
                    "currency": "USD",
                    "quantity": 1
                ]
            ,
            "amount": 
                "total": 39.00,
                "currency": "USD"
            ,
            "description": "A feature "
        ]
    


    // calling the create Pay method 
    createPay(payment)
        .then((transaction) => 
            var id = transaction.id;
            var links = transaction.links;
            var counter = links.length;
            while (counter--) 
                if (links[counter].method == 'REDIRECT') 
                    // redirecting to paypal where user approves the transaction 
                    return res.redirect(links[counter].href)
                
            
        )
        .catch((err) => 
            console.log(err);
            res.redirect('/err');
        );
);
// success page 
router.use('/success', (req, res) => 


    var paymentId = req.query.paymentId;
    var payerId =  'payer_id': req.query.PayerID ;

    paypal.payment.execute(paymentId, payerId, function(error, payment)
        if(error)
            console.error(error);
         else 
            if (payment.state === 'approved') 
                res.send('payment completed successfully');
                console.log(payment);
             else 
                res.send('payment not successful');
            
        
    );
)

// error page 
router.use('/err', (req, res) => 
    console.log(req.query);
    res.redirect('https://soundcloud.com/');
)

// helper functions 
var createPay = (payment) => 
    return new Promise((resolve, reject) => 
        paypal.payment.create(payment, function (err, payment) 
            if (err) 
                reject(err);
            
            else 
                resolve(payment);
                console.log(payment)
            
        );
    );


module.exports = router;

帮我解决以下问题:

    我的交易不应与送货地址相关联,

    交易应该是即时和paypal个人沙盒账户 不应该这样说:

    用户可以购买一项或多项功能,

    解释最后的辅助函数在做什么

提前谢谢你。我希望这段代码也可以帮助其他人

【问题讨论】:

【参考方案1】:

    在 Classic API 中,您可以在请求中包含一个 NOSHIPPING 标志,该标志将在结帐期间禁用送货地址要求。我知道它在某个地方的 REST 中,但我现在正在努力在参考中找到它。

    您应该使用“sale”作为意图参数,而不是“授权”。

    不知道你在这里问什么..??只需构建您的购物车,以便您的用户可以将任意数量的商品添加到他们的购物车中,然后将这些购物车详细信息传递到您的 PayPal 付款请求中。

    它似乎正在处理对 PayPal 的实际支付电话(即 paypal.payment.create)

【讨论】:

我正在使用“paypal-rest-sdk”npm 包,找不到任何可以完全停止发货的东西。找到这个链接:github.com/paypal/PayPal-node-SDK/blob/master/samples/…我无法在上面的代码中实现这个,你能帮忙吗?【参考方案2】:

本文档展示了按钮代码中 no_shipping 字段的使用:

https://developer.paypal.com/docs/checkout/how-to/customize-flow/#pass-experience-profile-options

要直接调用 API,您必须创建一个包含此字段 (input_fields.no_shipping) 的网络体验配置文件对象:

https://developer.paypal.com/docs/api/payment-experience/v1/#web-profiles_create

然后在您的 /payment 调用中引用它(experience_profile_id 字段) https://developer.paypal.com/docs/api/payments/v1/#payment

【讨论】:

你能告诉我我应该如何将这个网络配置文件集成到我的代码中吗?

以上是关于PayPal REST SDK:删除送货地址和付款授权,使其进入待处理状态[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PayPal REST API 送货地址不适用于 cURL 请求

Paypal javascript sdk - 送货地址

如何使用 PayPal PHP REST API 设置帐单或送货地址?

Paypal Rest API - 提交帐单地址

paypal api:无需送货地址即可立即付款

PayPal REST API 未返回 payment_info