feat(pally): support customer-pays-fees scenario with BalanceAmount validation
This commit is contained in:
@@ -42,6 +42,11 @@ def main():
|
||||
choices=["SUCCESS", "FAIL", "UNDERPAID", "OVERPAID"],
|
||||
help="Статус платежа (по умолчанию SUCCESS)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--customer-pays-fees",
|
||||
action="store_true",
|
||||
help="Симулировать сценарий 'клиент платит комиссию'"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
pally_token = os.environ["PALLY_TOKEN"]
|
||||
@@ -52,24 +57,44 @@ def main():
|
||||
trs_id = f"LXZv3R{args.bill_id}" # TrsId - уникальный идентификатор счета в Pally
|
||||
currency = "RUB"
|
||||
custom = None # custom field не используется в production (остается None)
|
||||
commission = "0.00" # Комиссия
|
||||
|
||||
# Симуляция комиссии
|
||||
if args.customer_pays_fees:
|
||||
# Симулируем комиссию ~10% (как в вашем продакшене: 50 -> 55.4)
|
||||
commission_rate = 0.108 # ~10.8%
|
||||
gross_amount = args.amount * (1 + commission_rate)
|
||||
commission = gross_amount - args.amount
|
||||
|
||||
print(f"🔄 Симулируется сценарий 'клиент платит комиссию':")
|
||||
print(f" Сумма заказа: {args.amount} RUB")
|
||||
print(f" Комиссия: {commission:.2f} RUB")
|
||||
print(f" Итого к оплате: {gross_amount:.2f} RUB")
|
||||
print(f" К зачислению: {args.amount} RUB")
|
||||
else:
|
||||
gross_amount = args.amount
|
||||
commission = 0.00
|
||||
|
||||
# Сигнатура рассчитывается с использованием InvId (который содержит bill ID)
|
||||
signature = calculate_signature(
|
||||
str(args.amount), inv_id, pally_token
|
||||
f"{gross_amount:.2f}", inv_id, pally_token
|
||||
)
|
||||
|
||||
# Используем правильные имена полей согласно документации pally.info
|
||||
payload = {
|
||||
"InvId": inv_id, # Содержит ID счета из БД
|
||||
"OutSum": str(args.amount),
|
||||
"Commission": commission,
|
||||
"OutSum": f"{gross_amount:.2f}", # Сумма, которую заплатил клиент (с комиссией)
|
||||
"Commission": f"{commission:.2f}",
|
||||
"TrsId": trs_id,
|
||||
"Status": args.status,
|
||||
"CurrencyIn": currency,
|
||||
"custom": custom, # None в production
|
||||
"SignatureValue": signature,
|
||||
}
|
||||
|
||||
# Добавляем BalanceAmount только если клиент платит комиссию
|
||||
if args.customer_pays_fees:
|
||||
payload["BalanceAmount"] = str(args.amount) # Сумма к зачислению (без комиссии)
|
||||
payload["BalanceCurrency"] = currency
|
||||
|
||||
print(f"{args.host}{ENDPOINT}")
|
||||
print(f"Отправляю вебхук: {payload}\n")
|
||||
|
||||
Reference in New Issue
Block a user