为用户创建订阅的第二步是根据现有的激活计费计划创建并执行计费协议。本示例假定您已经在上一个示例中浏览并激活了一个计费计划,并且在该示例中具有要引用的计费计划的ID。
在设置结算协议以为用户创建订阅时,您将遵循3个步骤,这可能会让人想起PayPal付款:
您创建了一个计费协议,并通过ID引用了基础计费计划。
创建完成后,您可以将用户重定向到PayPal(如果通过PayPal付款)以确认订阅。确认后,贝宝将使用基础计费计划中提供的重定向将用户重定向回您的站点。
然后,您使用通过PayPal重定向提供的令牌执行签单协议。
这个例子是建立一个基于Express的HTTP服务器来展示计费协议过程。
要开始示例,我们首先需要设置我们的配置。我们添加了四个要求,即PayPal SDK,body-parser用于处理JSON编码的主体,http用于我们的简单服务器集成以及expressExpresshtml" target="_blank">框架。然后,我们从创建应用程序定义客户端ID和密码,为沙箱配置SDK,然后配置bodyParser以处理JSON主体。
var paypal = require('paypal-rest-sdk'), bodyParser = require('body-parser'), http = require('http'), app = require('express')(); var clientId = 'YOUR APPLICATION CLIENT ID'; var secret = 'YOUR APPLICATION SECRET'; paypal.configure({ 'mode': 'sandbox', //沙盒或直播 'client_id': clientId, 'client_secret': secret }); app.use(bodyParser.json());
计费协议的第一步是创建一条处理计费协议创建的路由,并将用户重定向到PayPal以确认该订阅。我们假设将帐单方案ID作为查询字符串参数传递,例如通过将以下URL与上一个示例中的方案ID一起加载:
http://localhost:3000/createagreement?plan=P-3N543779E9831025ECYGDNVQ
现在,我们需要使用该信息来创建结算协议。
app.get('/createagreement', function(req, res){ var billingPlan = req.query.plan; var isoDate = new Date(); isoDate.setSeconds(isoDate.getSeconds() + 4); isoDate.toISOString().slice(0, 19) + 'Z'; var billingAgreementAttributes = { "name": "Standard Membership", "description": "Food of the World Club Standard Membership", "start_date": isoDate, "plan": { "id": billingPlan }, "payer": { "payment_method": "paypal" }, "shipping_address": { "line1": "W 34th St", "city": "New York", "state": "NY", "postal_code": "10001", "country_code": "US" } }; // 使用已激活的计费方案创建协议 paypal.billingAgreement.create(billingAgreementAttributes, function (error, billingAgreement){ if (error) { console.error(error); throw error; } else { //捕获HATEOAS链接 var links = {}; billingAgreement.links.forEach(function(linkObj){ links[linkObj.rel] = { 'href': linkObj.href, 'method': linkObj.method }; }) //如果存在重定向网址,则重定向用户 if (links.hasOwnProperty('approval_url')){ res.redirect(links['approval_url'].href); } else { console.error('no redirect URI present'); } } }); });
我们首先从查询字符串中提取计费计划ID,然后创建计划开始的日期。
下一个对象定义billingAgreementAttributes包含预订信息。它包含有关计划的可读信息,对计费计划ID的引用,付款方式和运输详细信息(如果需要订阅)。
接下来,调用billingAgreement.create(...),传入billingAgreementAttributes我们刚刚创建的对象。如果一切成功,我们应该将一个计费协议对象传递回给我们,其中包含有关新创建的订阅的详细信息。该对象还包含许多HATEOAS链接,为我们提供了可在此新创建的协议上采取的下一步操作。我们在这里关心的一个标记为approval_url。
我们遍历所有提供的链接,以将它们放入易于引用的对象中。如果approval_url是这些链接之一,我们会将用户重定向到该链接,即PayPal。
此时,用户确认在PayPal上的订阅,并被重定向回基础计费计划中提供的URL。除该URL外,PayPal还将在查询字符串中传递令牌。该令牌是我们将用来执行(或启动)订阅的令牌。
让我们按照以下路线设置该功能。
app.get('/processagreement', function(req, res){ var token = req.query.token; paypal.billingAgreement.execute(token, {}, function (error, billingAgreement) { if (error) { console.error(error); throw error; } else { console.log(JSON.stringify(billingAgreement)); res.send('Billing Agreement Created Successfully'); } }); });
我们从查询字符串中提取令牌,然后调用billingAgreement.execute,并传递该令牌。如果一切成功,我们现在为用户提供有效的订阅。返回对象包含有关有效计费协议的信息。
最后,我们设置了HTTP服务器来侦听路由的流量。
//创建服务器 http.createServer(app).listen(3000, function () { console.log('Server started: Listening on port 3000'); });
我正在尝试使用PayPal REST API和PayPalREST API sdk在PayPalSandbox上为Java设置计费协议。到目前为止,我已经能够创建一个计费计划,并通过它的id来创建计费协议。但是,我在创建计费协议后得到的响应没有approval_url和redirect_url。我的要求如下: 对于我的创建计费协议请求,我仅收到以下回复: 当我使用协议id上的GET请求获取创建的计
我正在使用PayPal-PHP-SDK创建计费协议 使用PayPal帐户付款是可行的,但我希望买家在没有帐户的情况下付款(只是一张卡) 有3个订阅计划: 如果我选择订阅并单击我的PayPal按钮,这将调用计费协议创建以生成批准链接,并重定向页面 但是我没有选择用卡支付。 我的问题是: 我如何生成一个按钮,直接用卡支付这个账单协议,而不使用PayPal账户?
因此,我正在将Paypal Rest API与我的django站点集成,以便引入基于订阅的计费,到目前为止,一切都很顺利。 我有一个用于计费计划,计费协议,交易历史记录以及创建和激活计费协议等的所有内容的界面。 但是,如果计费协议被取消或为计费协议付款,我需要一种方式来通知我,所以我认为webhooks是解决这个问题的方法,但是我不能100%确定webhooks适用于计费协议? 任何人都可以建议一
我已经从这里下载了Paypal的SDK:https://github.com/paypal/rest-api-sdk-php 我正在使用Paypal Payments Pro,并希望添加计费计划和计费协议。 浏览 SDK,尽管我没有找到允许我创建计费计划或计费协议的示例或对象。当我寻找如何创建计费计划或协议的示例时,他们似乎解释了如何在没有SDK的情况下从头开始执行此操作。如果计费计划/协议尚不存
我正在尝试使用REST API创建一个PayPal的定期订阅(信用卡): 创建计费计划-https://developer . paypal . com/docs/API/quick start/create-Billing-plan/ 创建计费协议 - https://developer.paypal.com/docs/api/quickstart/create-billing-agreemen
我在laravel中创建计费协议时遇到错误。错误在这里。 访问https://API . sandbox . paypal . com/v1/payments/billing-agreements/时得到Http响应代码500。 {“name”:“INTERNAL_SERVICE_ERROR”,“message”:“发生了内部服务错误”,“information_link”:https://dev