django - 在 Django 中批准付款后从 Paypal 脚本提交表单
问题描述
我有一个用户注册表单,我希望用户付费才能注册我的应用程序。我已经为付款设置了前端贝宝,并使用提交按钮进行了用户注册,但我不知道如何将两者结合起来。
<div id="paypal-button-container"></div>
<script src="https://www.paypal.com/sdk/js?client-id=sb¤cy=USD"></script>
<script>
// Render the PayPal button into #paypal-button-container
paypal.Buttons({
// Set up the transaction
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '00.01'
}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
// Show a success message to the buyer
alert('Transaction completed by ' + details.payer.name.given_name + '!');
});
}
}).render('#paypal-button-container');
</script>
<button class="w3-button w3-blue w3-padding-large" type="submit">
Buy Now
</button>
</form>
我希望在脚本的“onapprove”部分中使用提交按钮,但我不确定如何。或者,我正在考虑从视图中调用我的“购买”功能
def buy(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
data = form.cleaned_data
email = f"{data['email']}"
username = f"{data['username']}"
form.instance.username = username
form.save()
return redirect('login')
else:
form = UserRegisterForm()
return render(request, 'users/buy.html', {'form': form})
另一件事是系统必须在付款前检查表单输入是否唯一且有效。付款成功后将用户重定向到注册页面是否最好?
表格.py
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
username = forms.CharField(max_length=20)
class Meta:
model = User
fields = ['email', 'username', 'password1', 'password2']
解决方案
您可以onClick
在继续付款之前检查这些值是否有效:https ://developer.paypal.com/docs/checkout/integration-features/validation/
将其与适当的服务器集成相结合,该集成在创建或捕获订单时在获取正文中传输值,以便您的服务器可以存储它们。
对于该服务器集成,您需要创建两条路由,一条用于“创建订单”,一条用于“捕获订单”,记录在此处。这些路由应该返回 JSON 数据。
将这些路由与以下按钮批准流程配对:https ://developer.paypal.com/demo/checkout/#/pattern/server以及您的onClick
功能
推荐阅读
- php - Hack / HHVM中的自动加载
- javascript - 在 3 个循环内使用 3 个请求进行 Nodejs Web 抓取
- c++ - 为自定义 std::map 迭代器实现 erase()
- mysql - 移动小数sql或除法
- python - 从python中的列表中删除所有'#'
- jsp - 在 JSP 页面表单提交上访问 servlet 时获取 404
- c - 练习指针,我该如何摆脱这个警告?
- angular - 在角度 5 中使用 ng-select 时如何添加工具提示?
- javascript - Javascript Node js函数的返回类型未定义?
- python - Kivy:用户触摸和拖动裁剪功能