|
@@ -1877,8 +1877,9 @@ class CloudStorageView(View):
|
|
|
if not all([order_id, refund_amount]):
|
|
|
return response.json(444)
|
|
|
try:
|
|
|
- order_qs = Order_Model.objects.filter(orderID=order_id).values('status', 'payType', 'price',
|
|
|
- 'refunded_amount', 'currency', 'paymentID')
|
|
|
+ order_qs = Order_Model.objects.filter(orderID=order_id)\
|
|
|
+ .values('status', 'payType', 'price','refunded_amount',
|
|
|
+ 'currency', 'paymentID','trade_no')
|
|
|
if not order_qs.exists():
|
|
|
return response.json(173)
|
|
|
|
|
@@ -1906,20 +1907,24 @@ class CloudStorageView(View):
|
|
|
# 根据支付类型处理退款
|
|
|
if pay_type == 1: # PayPal
|
|
|
payment_id = order_qs[0]['paymentID'] # PayPal PAYMENT_ID
|
|
|
- if not payment_id:
|
|
|
- return response.json(805)
|
|
|
+ trade_no = order_qs[0]['trade_no']
|
|
|
+ sale_id = ''
|
|
|
paypalrestsdk.configure(PAYPAL_CRD)
|
|
|
- payment = paypalrestsdk.Payment.find(payment_id)
|
|
|
- related_resources = payment['transactions'][0]['related_resources']
|
|
|
- if not related_resources:
|
|
|
- return response.json(805)
|
|
|
- sale = related_resources[0]['sale']
|
|
|
- # 没退款过 'state' 不为 'completed' 或 已退款过但 'state' 不为 'partially_refunded'
|
|
|
- if (refunded_amount == 0 and sale['state'] != 'completed') or (
|
|
|
- refunded_amount != 0 and sale['state'] != 'partially_refunded'):
|
|
|
- return response.json(805)
|
|
|
- sale_id = sale['id']
|
|
|
+ if payment_id:
|
|
|
+ payment = paypalrestsdk.Payment.find(payment_id)
|
|
|
+ related_resources = payment['transactions'][0]['related_resources']
|
|
|
+ if not related_resources:
|
|
|
+ return response.json(805)
|
|
|
+ sale = related_resources[0]['sale']
|
|
|
+ # 没退款过 'state' 不为 'completed' 或 已退款过但 'state' 不为 'partially_refunded'
|
|
|
+ if (refunded_amount == 0 and sale['state'] != 'completed') or (
|
|
|
+ refunded_amount != 0 and sale['state'] != 'partially_refunded'):
|
|
|
+ return response.json(805)
|
|
|
+ sale_id = sale['id']
|
|
|
+ sale_id = sale_id if sale_id else trade_no
|
|
|
paypal_sale = paypalrestsdk.Sale.find(sale_id)
|
|
|
+ if not paypal_sale or paypal_sale['state'] != 'completed':
|
|
|
+ return response.json(805)
|
|
|
refund = paypal_sale.refund({
|
|
|
'amount': {
|
|
|
'total': refund_amount,
|