↓↓クリックして頂けると励みになります。
【51 | PayPalアカウント】 << 【ホーム】 >> 【53 | Firebaseメッセージ】
「core/admin.py」ファイルを編集します。
記述編集 【Desktop/crowdsource/core/admin.py】
from django.contrib import admin from django.conf import settings from paypalrestsdk import configure, Payout from .models import * configure({ "mode": settings.PAYPAL_MODE, "client_id": settings.PAYPAL_CLIENT_ID, "client_secret": settings.PAYPAL_CLIENT_SECRET, }) class CourierAdmin(admin.ModelAdmin): list_display = ['user_full_name', 'paypal_email', 'balance'] def user_full_name(self, obj): return obj.user.get_full_name() def balance(self, obj): return round(sum(t.amount for t in Transaction.objects.filter(job__courier=obj, status=Transaction.IN_STATUS)) * 0.8) class TransactionAdmin(admin.ModelAdmin): list_display = ['stripe_payment_intent_id', 'courier_paypal_email', 'customer', 'courier', 'job', 'amount', 'status', 'created_at'] list_filter = ['status',] def customer(self, obj): return obj.job.customer def courier(self, obj): return obj.job.courier def courier_paypal_email(sefl, obj): return obj.job.courier.paypal_email if obj.job.courier else None # Register your models here. admin.site.register(Customer) admin.site.register(Courier, CourierAdmin) admin.site.register(Category) admin.site.register(Job) admin.site.register(Transaction, TransactionAdmin)
一度ブラウザを確認します。
http://127.0.0.1:8000/admin/core/courier/

引き続き「core/admin.py」ファイルを編集します。
記述編集 【Desktop/crowdsource/core/admin.py】
import random import string from django.contrib import admin, messages from django.conf import settings from paypalrestsdk import configure, Payout from .models import * configure({ "mode": settings.PAYPAL_MODE, "client_id": settings.PAYPAL_CLIENT_ID, "client_secret": settings.PAYPAL_CLIENT_SECRET, }) def payout_to_courier(modeladmin, request, queryset): payout_items = [] transaction_querysets = [] # Step 1 - すべての有効な配送者を取得します for courier in queryset: if courier.paypal_email: courier_in_transactions = Transaction.objects.filter( job__courier=courier, status=Transaction.IN_STATUS ) if courier_in_transactions: transaction_querysets.append(courier_in_transactions) balance = sum(i.amount for i in courier_in_transactions) payout_items.append({ "recipient_type": "EMAIL", "amount": { "value": int(balance * 0.8), "currency": "JPY" }, "receiver": courier.paypal_email, "note": "配達ご苦労様でした。", "sender_item_id": str(courier.id) }) # Step 2 - 支払額をEメールで配送者に送信する sender_batch_id = ''.join(random.choice(string.ascii_uppercase) for i in range(12)) payout = Payout({ "sender_batch_header": { "sender_batch_id": sender_batch_id, "email_subject": "報酬をお支払いしました。" }, "items": payout_items }) # Step 3 - 支払いプロセスを実行し、トランザクションのステータスを「OUT」に更新 try: if payout.create(): for t in transaction_querysets: t.update(status=Transaction.OUT_STATUS) messages.success(request, "支払い[%s] が成功しました。" % (payout.batch_header.payout_batch_id)) else: messages.error(request, payout.error) except Exception as e: messages.error(request, str(e)) payout_to_courier.short_description = "配送者に支払い" class CourierAdmin(admin.ModelAdmin): list_display = ['user_full_name', 'paypal_email', 'balance'] actions = [payout_to_courier] def user_full_name(self, obj): return obj.user.get_full_name() def balance(self, obj): return round(sum(t.amount for t in Transaction.objects.filter(job__courier=obj, status=Transaction.IN_STATUS)) * 0.8) class TransactionAdmin(admin.ModelAdmin): list_display = ['stripe_payment_intent_id', 'courier_paypal_email', 'customer', 'courier', 'job', 'amount', 'status', 'created_at'] list_filter = ['status',] def customer(self, obj): return obj.job.customer def courier(self, obj): return obj.job.courier def courier_paypal_email(sefl, obj): return obj.job.courier.paypal_email if obj.job.courier else None # Register your models here. admin.site.register(Customer) admin.site.register(Courier, CourierAdmin) admin.site.register(Category) admin.site.register(Job) admin.site.register(Transaction, TransactionAdmin)
配送者のPayPal EメールをPayPal Developerで作成したpersonalアカウントに変更します。


管理サイトで支払いを実行します。


PayPalのpersonalアカウントの「Login Info」でIDとパスワードをコピーし、そのアカウントでPayPalテストサイト(https://sandbox.paypal.com)にログインします。

支払いの詳細を見ることができます。

管理サイトで「Transactions」を確認すると、ステータスが「Out」になっていることが確認できます。
http://127.0.0.1:8000/admin/core/transaction/

↓↓クリックして頂けると励みになります。
【51 | PayPalアカウント】 << 【ホーム】 >> 【53 | Firebaseメッセージ】