이것은 PayPal과 쉽게 통합하여 지불을 수락 할 수있는 Django 지불 응용 프로그램입니다. 이 앱은 유연하게 설계되어 모든 유형의 서비스 또는 제품에 대한 결제를 수집 할 수 있습니다.
base.html 템플릿의 <head> 태그 안에 다음 코드를 추가하십시오. < head >
<!-- other tags -->
< title > My title </ title >
{% block scriptHead %}{% endblock %} <!-- this line must be added -->
</ head >애플리케이션을 사용하려면 최소한 다음 필드로 모델을 만들어야합니다.
from django . db import models
from payment . utils import get_timestamp , generate_random_id
class InfoToPassToPaymentApplication ( models . Model ):
id_request = models . CharField ( max_length = 255 , null = True , blank = True )
amount = models . DecimalField ( max_digits = 10 , decimal_places = 2 , null = True , blank = True )
currency = models . CharField ( max_length = 3 , null = True , blank = True )
# Add any other fields you want
def save ( self , * args , ** kwargs ):
if self . id_request is None :
self . id_request = f" { get_timestamp () } { generate_random_id () } " # You must create this function or use another method to generate a unique id
return super (). save ( * args , ** kwargs )
def get_id_request ( self ):
return self . id_request
def get_amount_to_pay ( self ):
return self . amount
def get_currency ( self ):
return self . currency
def set_paid_status ( self , status : bool ):
self . is_paid = status
def get_name ( self ):
# return the name of the service or product
pass
def get_img_url ( self ):
# return the url of the image of the service or product
pass
def get_user_name ( self ):
# return the name of the user who is going to pay
pass
def get_user_email ( self ):
# return the email of the user who is going to pay
pass이 모델은 지불 응용 프로그램으로 전달할 정보를 나타냅니다. 여기에는 판매하는 서비스 또는 제품에 대한 세부 정보와 다른 필요한 정보가 포함될 수 있습니다.
모델이 생성되면 이제 지불 앱을 기존 응용 프로그램과 통합 할 수 있습니다. django project의 settings.py 파일에 다음 설정을 추가하여 필요에 따라 값을 조정하십시오.
# settings.py
INSTALLED_APPS = [
# other apps
'payment' ,
] 필요한 경우 응용 프로그램의 진입 점으로 사용되는 URL은 payment:payment_linked .
# settings.py
# payment settings
PAYMENT_PAYPAL_ENVIRONMENT = 'sandbox' # or 'production'
PAYMENT_PAYPAL_CLIENT_ID = 'your_paypal_client_id'
PAYMENT_PAYPAL_CLIENT_SECRET = 'your_paypal_client_secret'
# fees
# if you want to apply the default PayPal fee, set the following to True or add the fee to your model
PAYMENT_APPLY_PAYPAL_FEES = False # (2.90% + 0.35$ per transaction, if card 2.10% + 0.35$ as of 2023-05-06) default is False
PAYMENT_SPLIT_PAYPAL_FEES = False # split the fees between you and the user (if PAYMENT_APPLY_PAYPAL_FEES = True) default is False
# if you want to apply your own percentage fees (can't have both)
PAYMENT_FEES = 0.03 if not PAYMENT_APPLY_PAYPAL_FEES else 0.00 # default is 0.00
# basic
PAYMENT_BASE_TEMPLATE = 'base_templates/base.html' # or your own base template path
PAYMENT_WEBSITE_NAME = 'My Website' # or your website name
PAYMENT_MODEL = 'your_app_name.InfoToPassToPaymentApplication' # Replace with your app and model name
PAYMENT_REDIRECT_SUCCESS_URL = 'your_app_name:success_view_name' # Replace with your app and success view name
# Additional to the default email settings
# if the following are not defined, the default templates are applied
DEFAULT_FROM_EMAIL = "webmaster@localhost" # the default from email that you're using
DEFAULT_EMAIL_MESSAGE = None # leave as None if you want to use the default message in the template
DEFAULT_EMAIL_PAYMENT_SUCCESS_TEMPLATE = 'template/emails/payment_success.html' # an example of namedefault_email_message는 사용자에게 보내려는 기본 메시지입니다. 템플릿에 직접 추가하려고하거나 템플릿에서 기본값을 사용하려는 경우 비워 두십시오.
link = request . build_absolute_uri ( payment_info . get_absolute_url ())
message = DEFAULT_EMAIL_MESSAGE or f"Thank you for your payment, it's been received and your booking is now confirmed"
f"You can view it by clicking <a href=' { link } '>here</a> "
f"We're excited to have you on board! Your order # is { order_id } ."다음 객체는 이메일 템플릿으로 전달됩니다.
context = {
'first_name' : first_name ,
'company' : PAYMENT_WEBSITE_NAME ,
"order_id" : order_id ,
"payment_info" : payment_info ,
'message' : message ,
'current_year' : datetime . datetime . now (). year ,
}payment_info는 다음 속성을 포함하는 객체입니다.
from django . contrib . contenttypes . fields import GenericForeignKey
from django . contrib . contenttypes . models import ContentType
from django . db import models
class PaymentInfo :
order_id = models . CharField ( max_length = 255 , unique = True )
reference_id = models . CharField ( max_length = 255 )
amount = models . DecimalField ( max_digits = 10 , decimal_places = 2 )
fee = models . DecimalField ( max_digits = 10 , decimal_places = 2 , null = True , blank = True )
currency = models . CharField ( max_length = 3 )
status = models . CharField ( max_length = 20 )
linked_object_type = models . ForeignKey ( ContentType , on_delete = models . CASCADE , null = True , blank = True )
linked_object_id = models . PositiveIntegerField ( null = True , blank = True )
linked_object = GenericForeignKey ( 'linked_object_type' , 'linked_object_id' )
# meta data
created_at = models . DateTimeField ( auto_now_add = True )
updated_at = models . DateTimeField ( auto_now = True )
def get_order_id ( self ):
return self . order_id
def get_reference_id ( self ):
return self . reference_id
def get_amount ( self ):
return self . amount
def get_currency ( self ):
return self . currency
def get_status ( self ):
return self . status
def get_linked_object ( self ):
return self . linked_object
def get_created_at ( self ):
return self . created_at
def get_updated_at ( self ):
return self . updated_at
def get_total_amount ( self ):
return self . amount + self . fee
def get_fee ( self ):
return self . fee
def get_absolute_url ( self ):
# implemented in the payment app
pass
오브젝트 메시지를 사용하지 않고 이메일에서 메시지를 사용자 정의하고 템플릿에 메시지를 직접 넣거나 설정에서 메시지의 기본값을 변경하여 메시지를 사용자 정의 할 수 있습니다.
Payment_Info 객체의 속성을 사용하여 템플릿에 정보를 표시 할 수 있습니다.
앱 문서의 지침에 따라 필요한 뷰를 설정하십시오.
모든 것이 설정되면 PayPal을 통해 지불 수락을 시작할 수 있습니다.