Добавьте настраиваемое поле в соглашение о выставлении счета, используя узел PayPal SDK - PullRequest
2 голосов
/ 09 апреля 2020

Я пытаюсь добавить настраиваемое поле в соглашение о выставлении счетов, чтобы я знал, какой пользователь запускает или останавливает свою подписку, когда я получаю вызов IPN POST.

const billingAgreementAttributes = {
    "name": "TEST Web App",
    "description": "TEST WEB APP.",
    "start_date": null,
    "plan": {
        "id": ""
    },
    "custom": "string"
    "payer": {
        "payment_method": "paypal",
    },

};
    api.post('/create', authCheck, (req, res) => {
    const body = req.body
    const type = body.type // default basic
    const user = body.user



    let isoDate = new Date();
    isoDate.setSeconds(isoDate.getSeconds() + 120);
    isoDate.toISOString().slice(0, 19) + 'Z';


    let agreement = billingAgreementAttributes

    agreement.plan.id = type ? basic : unlimited 
    agreement.start_date = isoDate


    // Use activated billing plan to create agreement
    paypal.billingAgreement.create(agreement, function (error, billingAgreement) {
        if (error) {
            console.error(JSON.stringify(error));
            res.json(error)
        } else {
            console.log("Create Billing Agreement Response");
            //console.log(billingAgreement);
            for (var index = 0; index < billingAgreement.links.length; index++) {
                if (billingAgreement.links[index].rel === 'approval_url') {
                    var approval_url = billingAgreement.links[index].href;
                    console.log("For approving subscription via Paypal, first redirect user to");
                    console.log(approval_url);
                    res.json({ approval_url })

                    // See billing_agreements/execute.js to see example for executing agreement 
                    // after you have payment token
                }
            }
        }
    });
})

Когда я добавляю в соглашение о выставлении счета, у меня возникает ошибка json.

api.post('/execute', authCheck, (req, res) => {
    const token = req.body
    console.log(token)
    paypal.billingAgreement.execute(token.token, {"custom": "foobar"}, function (error, billingAgreement) {
        if (error) {
            console.error(JSON.stringify(error));
            res.json(error)
        } else {
            res.json(billingAgreement)
            console.log(JSON.stringify(billingAgreement));
            console.log('Billing Agreement Created Successfully');
        }
    });
})

Если я пытаюсь добавить его в параметр данных при выполнении соглашения, это никогда не происходит вернулся куда угодно. Поэтому в настоящее время, если пользователь должен был запустить или остановить подписку, я не знаю, какой пользователь это сделал.

1 Ответ

1 голос
/ 09 апреля 2020

Я не уверен, какую версию API подписок и биллинговых соглашений вы используете, но SDK не поддерживают последнюю версию, а параметр custom не поддерживается.

Необходимо связать подписку / ID биллингового соглашения с пользователем во время создания, когда пользователь создает его через ваш сайт / приложение. Этот связанный с пользователем идентификатор подписного / биллингового соглашения должен быть сохранен в вашей собственной базе данных. Затем любые последующие события с этим идентификатором можно найти и сопоставить с пользователем (хотя в действительности вы хотите думать о пользователях как об активных идентификаторах подписки / идентификатора BA в файле как об объекте)

...