PayPal 订阅是根据 PayPal 网站标准创建的,订阅者 ID 以“I”开头。当我将getrecurringpaymentsprofiledetails
其显示在错误下方时subscription profiles not supported
。让我知道在不使用 IPN 的情况下获取使用 PayPal 标准创建的订阅详细信息的任何其他方式。
2 回答
不幸的是,不依赖 IPN 然后对您自己的数据库运行查询是不可能的。这些 API 主要用于定期付款(通过CreateRecurringPayments
API 调用通过 Express Checkout Recurring Payments 创建的那些),而不是您设置的网站付款标准订阅。您可以针对订阅使用循环 API 执行一些操作,但订阅并不支持所有功能。这将是其中之一。
我通过这种方式得到它:
let options = {
method: 'post', headers: {'content-type':'application/json','Access-Control-Allow-Credentials':true},
auth:{'username':process.env.PAYPALID,'password':process.env.PAYPALPASSWORD},
url: 'https://api.paypal.com/v1/oauth2/token',
data: 'grant_type=client_credentials',
}
axios(options).then((response)=>{let paypaltoken=response.data.access_token
axios.get('https://api.paypal.com/v1/payments/billing-agreements/'+agreementid+'/transactions?start_date=2018-01-01&end_date=2019-07-07', { headers: { 'Authorization':'Bearer '+paypaltoken, 'Content-Type':'application/json', } })
.then((transaction)=>{console.log(transaction.data)})
.catch(err => {console.error(err);console.log('err: '+JSON.stringify(err)); res.send (err) })
})
.catch(err => {console.error(err);console.log('err: '+JSON.stringify(err)); res.send (err) })
那么如果你只得到transaction.data,你会得到一系列的事务对象,只有当事务正常时才status
== Completed
,也就是说,它没有被取消,所以为了计划控制目的,只检查最后一个。什么时候status
==Canceled
您知道该协议不再有效。
如果您收到每月付款,另一种方法是将第一个日期设置为从“now()”开始的 2 个月,将第二个日期设置为“now()”。如果您没有交易,则状态可能不活跃,但请仔细检查:随机可能存在信用卡问题。在那种情况下,我想status
可能是 == todelayed
或其他东西,但我无法测试它,所以我不知道。这个想法来自这个问题和值得我感谢的相对第二个答案。
请注意,根据您的情况,您可能需要在请求中添加'Access-Control-Allow-Credentials':true
标题而不是其他withCredentials: true
或类似的。