问题描述
我正在开发一个网站,用户可以购买高级订阅。我使用 React 作为 Front,Flask 作为 Back。我已经使用 react-paypal-button-v2 成功创建了订阅按钮。 https://www.npmjs.com/package/react-paypal-button-v2
<PayPalButton
options={{
vault: true,clientId: "ID OF SELLOR",currency: "EUR"
}}
createSubscription={(data,actions) => {
return actions.subscription.create({
plan_id: 'ID OF MY PLAN'
});
}}
onApprove={(data,actions) => {
return actions.subscription.get().then(function(details) {
return axios.post('/api/payment',{
user_id: localStorage.getItem('id');,order_id: data.orderID,subscription_id: data.subscriptionID
})
.then(function (){
document.location.href="/";
console.log(data);
})
});
}}
/>
被调用的 api 将我的数据库中的 premium 列更改为 true。现在我想检测订阅是否被取消或过期,将用户的付费列转回 false。
注意:我使用 postgresql
@payment.route('',methods=['POST'])
def paypal_payement():
if request.method == 'POST':
req = request.get_json(force=True)
today = datetime.Now()
id_user = req.get('user_id')
id_order = req.get('order_id')
id_subscription = req.get('subscription_id')
user = models.Utilisateur.query.filter_by(id=id_user).first()
order = models.Commandes(id_order,id_user,id_subscription,today)
db.session.add(order)
user.premium = True
db.session.commit()
return 'SUCCESS'
你有解决方案吗?谢谢?
解决方法
创建一个 webhook listener 并注册 BILLING.SUBSCRIPTION.CANCELLED
事件。