首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >paypal-rest-sdk执行时的"MALFORMED_REQUEST_JSON“

paypal-rest-sdk执行时的"MALFORMED_REQUEST_JSON“
EN

Stack Overflow用户
提问于 2020-06-18 22:31:49
回答 2查看 883关注 0票数 0

我正在尝试在我的网站上实现PayPal payments,我可以在用户请求后创建付款,并向他发送重定向审批URL,在客户付款后,我使用付款ID和买家ID调用后端的执行,但收到以下错误

代码语言:javascript
复制
{"response":{"name":"VALIDATION_ERROR","message":"Invalid request - see details","debug_id":"4f3a6da7e0c7d","details":[{"location":"body","issue":"MALFORMED_REQUEST_JSON"}],"links":[],"httpStatusCode":400},"httpStatusCode":400}

我已经尝试了几个小时了,我试图从任何地方复制create payment JSON,包括PayPal应用编程接口示例,但仍然没有效果。

另外,我想将客户重定向到成功页面后,交易被批准(执行),它必须由前台处理?

代码

代码语言:javascript
复制
const paypal = require('paypal-rest-sdk');
const dbService = require('../../services/mongodb-service');
const { ObjectId } = require('mongodb');

const getProducts = async () => {
    const products = await dbService.getCollection('products');
    return await products.find({}).toArray();
}

paypal.configure({
    'mode': 'sandbox',
    'client_id': 'id',
    'client_secret': 'secret'
});

const createPayment = async (productId) => {
    const products = await dbService.getCollection('products');
    const product = await products.findOne({ '_id': ObjectId(productId) })
    if (!product) return Promise.reject('Product not found');
    const payment = {
        "intent": "sale",
        "payer": {
            "payment_method": "paypal"
        },
        "transactions": [{
            "amount": {
                "currency": "USD",
                "total": product.price,
            },
            "description": product.description,
            "payment_options": {
                "allowed_payment_method": "IMMEDIATE_PAY"
            },
            "item_list": {
                "items": [{
                    "name": product.name,
                    "description": product.description,
                    "quantity": 1,
                    "price": product.price,
                    "tax": 0,
                    "sku": product._id,
                    "currency": "USD"
                }]
            }
        }],
        "redirect_urls": {
            "return_url": "http://localhost:3000/purchase-success",
            "cancel_url": "http://localhost:3000/purchase-error"
        }
    }
    const transaction = await _createPay(payment);
    const redirect = transaction.links.find(link => link.method === 'REDIRECT');
    return redirect;
}

const _createPay = (payment) => {
    return new Promise((resolve, reject) => {
        paypal.payment.create(payment, (err, payment) => err ? reject(err) : resolve(payment));
    });
}

const executePayment = async (paymentId, payerId) => {
    try {
        const execute = await _executePay(paymentId, payerId);
        console.log(execute);
        return execute;
    } catch (err) { console.log(JSON.stringify(err)) }
}


const _executePay = (paymentId, payerId) => {
    return new Promise((resolve, reject) => {
        console.log(paymentId, payerId);
        paypal.payment.execute(paymentId, payerId, (error, payment) => {
            return error ? reject(error) : resolve(JSON.stringify(payment));
        })
    })
}


module.exports = {
    createPayment,
    executePayment,
    getProducts
}
EN

回答 2

Stack Overflow用户

发布于 2020-11-09 14:40:43

应该是

代码语言:javascript
复制
const _executePay = (paymentId, payerId) => {
    return new Promise((resolve, reject) => {
        console.log(paymentId, payerId);

        var payerIdObj = { payer_id: payerId };

        paypal.payment.execute(paymentId, payerIdObj, (error, payment) => {
            return error ? reject(error) : resolve(JSON.stringify(payment));
        })
    })
}

the doc

票数 2
EN

Stack Overflow用户

发布于 2020-06-18 23:14:02

我可以通过执行post请求来解决这个问题,代码如下:

代码语言:javascript
复制
const _executePay = async (paymentId, payerId) => {
    const response = await axios.post(`https://api.sandbox.paypal.com/v1/payments/payment/${paymentId}/execute`, { 'payer_id': payerId }, {
        auth: {
            username: CLIENT_ID,
            password: CLIENT_SECRET
        }
    })
    return response;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62452412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档