|
@@ -729,12 +729,17 @@ class CloudStorageView(View):
|
|
|
data.pop('sign')
|
|
|
orderID = data['out_trade_no']
|
|
|
|
|
|
- order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
|
|
|
+ # redis加锁,防止订单重复
|
|
|
+ redisObj = RedisObject()
|
|
|
+ isLock = redisObj.CONN.setnx(orderID + 'do_notify', 1)
|
|
|
+ redisObj.CONN.expire(orderID + 'do_notify', 60)
|
|
|
+ if not isLock:
|
|
|
+ return response.json(5)
|
|
|
|
|
|
+ order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
|
|
|
aliPayObj = AliPayObject()
|
|
|
alipay = aliPayObj.conf()
|
|
|
success = alipay.verify(data, signature)
|
|
|
-
|
|
|
if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):
|
|
|
print("trade succeed")
|
|
|
|
|
@@ -815,11 +820,13 @@ class CloudStorageView(View):
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/success.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
if lang != 'cn':
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/en_success.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
+ redisObj.del_data(key=orderID + 'do_notify')
|
|
|
return HttpResponseRedirect(red_url)
|
|
|
return response.json(0, signature)
|
|
|
except Exception as e:
|
|
|
if order_qs:
|
|
|
order_qs.update(status=10, promotion_rule_id=promotion_rule_id)
|
|
|
+ redisObj.del_data(key=orderID + 'do_notify')
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
if lang != 'cn':
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/en_fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
@@ -830,6 +837,12 @@ class CloudStorageView(View):
|
|
|
PayerID = request_dict.get('PayerID', None)
|
|
|
orderID = request_dict.get('orderID', None)
|
|
|
lang = request_dict.get('lang', 'en')
|
|
|
+ # redis加锁,防止订单重复
|
|
|
+ redisObj = RedisObject()
|
|
|
+ isLock = redisObj.CONN.setnx(orderID + 'do_notify', 1)
|
|
|
+ redisObj.CONN.expire(orderID + 'do_notify', 60)
|
|
|
+ if not isLock:
|
|
|
+ return response.json(5)
|
|
|
try:
|
|
|
order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
|
|
|
|
|
@@ -850,6 +863,7 @@ class CloudStorageView(View):
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
if lang != 'cn':
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/en_fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
+ redisObj.del_data(key=orderID + 'do_notify')
|
|
|
return HttpResponseRedirect(red_url)
|
|
|
print("Payment execute successfully")
|
|
|
|
|
@@ -937,7 +951,7 @@ class CloudStorageView(View):
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/success.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
if lang != 'cn':
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/en_success.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
-
|
|
|
+ redisObj.del_data(key=orderID + 'do_notify')
|
|
|
return HttpResponseRedirect(red_url)
|
|
|
except Exception as e:
|
|
|
print(repr(e))
|
|
@@ -946,6 +960,7 @@ class CloudStorageView(View):
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
if lang != 'cn':
|
|
|
red_url = "{SERVER_DOMAIN_SSL}web/paid2/en_fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
|
|
|
+ redisObj.del_data(key=orderID + 'do_notify')
|
|
|
return HttpResponseRedirect(red_url)
|
|
|
|
|
|
def do_pay_by_wechat_callback(self, request, response): # 微信支付回调
|
|
@@ -965,6 +980,7 @@ class CloudStorageView(View):
|
|
|
if not check_sign:
|
|
|
return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': '签名失败'}))
|
|
|
orderID = out_trade_no
|
|
|
+
|
|
|
#redis加锁,防止订单重复
|
|
|
redisObj = RedisObject()
|
|
|
isLock = redisObj.CONN.setnx(orderID + 'do_notify', 1)
|
|
@@ -976,12 +992,6 @@ class CloudStorageView(View):
|
|
|
order_list = order_qs.values("UID", "channel", "commodity_code", "rank", "isSelectDiscounts",
|
|
|
"userID__userID", "userID__username","status")
|
|
|
|
|
|
- if order_list[0]['status'] == 1:
|
|
|
- return HttpResponse("<xml>\
|
|
|
- <return_code><![CDATA[SUCCESS]]></return_code>\
|
|
|
- <return_msg><![CDATA[OK]]></return_msg>\
|
|
|
- </xml>")
|
|
|
-
|
|
|
logger.info(order_list[0]['UID'])
|
|
|
logger.info(orderID)
|
|
|
|