|
@@ -819,6 +819,7 @@ class CloudStorageView(View):
|
|
|
paypalrestsdk.configure(PAYPAL_CRD)
|
|
|
# ID of the payment. This ID is provided when creating payment.
|
|
|
payment = paypalrestsdk.Payment.find(paymentId)
|
|
|
+ print(payment)
|
|
|
payres = payment.execute({"payer_id": PayerID})
|
|
|
print(payres)
|
|
|
if not payres:
|
|
@@ -1066,7 +1067,6 @@ class CloudStorageView(View):
|
|
|
|
|
|
orderID = CommonService.createOrderID()
|
|
|
if pay_type == 1:
|
|
|
-
|
|
|
cal_url = "{SERVER_DOMAIN_SSL}web/paid2/fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
if lang != 'cn':
|
|
|
cal_url = "{SERVER_DOMAIN_SSL}web/paid2/en_fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
@@ -1091,6 +1091,7 @@ class CloudStorageView(View):
|
|
|
print(payment.error)
|
|
|
return response.json(10, payment.error)
|
|
|
print(payment)
|
|
|
+ paymentID = payment['id'] # 获取paymentID
|
|
|
for link in payment.links:
|
|
|
if link.rel == "approval_url":
|
|
|
approval_url = str(link.href)
|
|
@@ -1100,7 +1101,7 @@ class CloudStorageView(View):
|
|
|
price=price, currency=currency, addTime=nowTime, updTime=nowTime,
|
|
|
pay_url=approval_url, isSelectDiscounts=is_select_discount,
|
|
|
commodity_code=commodity_code, commodity_type=commodity_type,
|
|
|
- rank_id=rank)
|
|
|
+ rank_id=rank, paymentID=paymentID)
|
|
|
return response.json(0, {"redirectUrl": approval_url, "orderID": orderID})
|
|
|
return response.json(10, 'generate_order_false')
|
|
|
elif pay_type == 2:
|
|
@@ -1678,7 +1679,8 @@ class CloudStorageView(View):
|
|
|
if not orderID:
|
|
|
return response.json(444)
|
|
|
try:
|
|
|
- order_qs = Order_Model.objects.filter(orderID=orderID).values('status', 'payType', 'price')
|
|
|
+ order_qs = Order_Model.objects.filter(orderID=orderID).\
|
|
|
+ values('status', 'payType', 'price', 'currency', 'paymentID')
|
|
|
if not order_qs.exists():
|
|
|
return response.json(173)
|
|
|
|
|
@@ -1690,10 +1692,29 @@ class CloudStorageView(View):
|
|
|
now_time = int(time.time())
|
|
|
payType = order_qs[0]['payType']
|
|
|
refund_amount = order_qs[0]['price'] # 退款金额
|
|
|
+ currency = order_qs[0]['currency'] # 货币
|
|
|
+ paymentID = order_qs[0]['paymentID'] # 退款id
|
|
|
out_request_no = str(time.strftime('%Y%m%d%H%M%S', time.localtime(now_time))) # 退款请求号
|
|
|
# 根据支付类型处理退款
|
|
|
if payType == 1: # PayPal
|
|
|
- pass
|
|
|
+ paypalrestsdk.configure(PAYPAL_CRD)
|
|
|
+ payment = paypalrestsdk.Payment.find(paymentID)
|
|
|
+ print(payment)
|
|
|
+ related_resources = payment['transactions'][0]['related_resources']
|
|
|
+ if not related_resources:
|
|
|
+ return response.json(805)
|
|
|
+ sale = related_resources[0]['sale']
|
|
|
+ if sale['state'] != 'completed':
|
|
|
+ return response.json(805)
|
|
|
+ sale_id = sale['id']
|
|
|
+ paypalSale = paypalrestsdk.Sale.find(sale_id)
|
|
|
+ refund = paypalSale.refund({
|
|
|
+ 'amount': {
|
|
|
+ 'total': refund_amount,
|
|
|
+ 'currency': currency
|
|
|
+ }
|
|
|
+ })
|
|
|
+ status = 5 if refund.success() else 4
|
|
|
elif payType == 2: # 支付宝
|
|
|
aliPayObj = AliPayObject()
|
|
|
alipay = aliPayObj.conf()
|
|
@@ -1701,16 +1722,15 @@ class CloudStorageView(View):
|
|
|
out_request_no=out_request_no)
|
|
|
# 退款成功,修改订单支付状态为'退款成功',否则改为'退款失败'
|
|
|
status = 5 if refund_response['code'] == '10000' else 4
|
|
|
- order_qs.update(status=status, updTime=now_time)
|
|
|
elif payType == 3: # 微信
|
|
|
wechatPayObj = WechatPayObject()
|
|
|
refund_amount = int(float(refund_amount) * 100) # 退款金额,单位为分,只能为整数
|
|
|
refund_success = wechatPayObj.refund(out_trade_no=orderID, out_refund_no=out_request_no,
|
|
|
total_fee=refund_amount, refund_fee=refund_amount)
|
|
|
status = 5 if refund_success else 4
|
|
|
- order_qs.update(status=status, updTime=now_time)
|
|
|
else: # 不支持退款的支付类型
|
|
|
return response.json(805)
|
|
|
+ order_qs.update(status=status, updTime=now_time) # 更新订单状态
|
|
|
return response.json(0)
|
|
|
except Exception as e:
|
|
|
print(e)
|