Django: как преобразовать скрипт PayPal для оплаты по прибытии?
На данный момент мне не нужны онлайн-платежи. Я настраиваю свой сайт электронной коммерции так, чтобы курьер отправлял посылки и собирал плату. Как я могу настроить скрипт PayPal, чтобы он пропускал проверки и пока регистрировал платежи только как по прибытии (добавив другую новую кнопку для выполнения этой задачи)?
Вот мой код: Шаблоны:
<script>
//generare CSRFToken
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
const csrftoken = getCookie('csrftoken');
var amount = "{{ grand_total }}"
var url = "{% url 'payments' %}"
var orderID = "{{ order.order_number }}"
var payment_method = 'ramburs'
var redirect_url = "{% url 'order_complete' %}"
// 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: amount,
}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return actions.order.capture().then(function(orderData) {
console.log('Capture result', orderData, JSON.stringify(orderData, null, 2));
var transaction = orderData.purchase_units[0].payments.captures[0];
sendData();
function sendData(){
fetch(url, {
method: "POST",
headers: {
"Content-type": "application/json",
"X-CSRFToken": csrftoken,
},
body: JSON.stringify({
orderID: orderID,
transID: orderData.id,
payment_method: payment_method,
status: orderData.status,
}),
})
.then((response) => response.json())
.then((data) => {
window.location.href = redirect_url + '?order_number='+data.order_number+'&payment_id='+data.transID;
});
}
});
}
}).render('#paypal-button-container');
</script>
<script src="https://www.paypal.com/sdk/js?client-id=xxx¤cy=USD"></script>
Просмотров:
def payments(request):
body = json.loads(request.body)
order = Order.objects.get(user=request.user, is_ordered=False, order_number=body['orderID'])
payment = Payment(
user = request.user,
payment_id = body['transID'],
payment_method = body['payment_method'],
amount_paid = order.order_total,
status = body['status'],
)
payment.save()
order.payment = payment
order.is_ordered = True
order.save()
JSONResponse
data = {
'order_number': order.order_number,
'transID': payment.payment_id,
}
return JsonResponse(data)
Поскольку нам больше не нужна дополнительная информация, необходимая для платежей paypal, нам больше не нужно использовать javascript. Таким образом, код должен быть изменен следующим образом:
В шаблонах нам нужна только кнопка:
<a href="{% url 'payments' %}" id="payment" class="btn btn-primary btn-block">Order </a>
А в видах:
def payments(request):
order = Order.objects.get(user=request.user, is_ordered=False)
#generate payment id
yr = int(datetime.date.today().strftime('%Y'))
dt = int(datetime.date.today().strftime('%d'))
mt = int(datetime.date.today().strftime('%m'))
d = datetime.date(yr,mt,dt)
current_date = d.strftime("%Y%m%d")
payment_number = current_date + str(order.id)
payment = Payment(
user = request.user,
payment_id = payment_number,
payment_method = 'pay on arrival',
amount_paid = order.order_total,
status = 'completed',
)
payment.save()
order.payment = payment
order.is_ordered = True
order.save()
return redirect('store')