reduce balance

Brightcells преди 8 години
родител
ревизия
6102143d8e
променени са 1 файла, в които са добавени 9 реда и са изтрити 3 реда
  1. 9 3
      pay/views.py

+ 9 - 3
pay/views.py

@@ -331,12 +331,14 @@ def wx_notify_url_api(request):
331 331
     return HttpResponse(settings.WXPAY_NOTIFY_SUCCESS)
332 332
 
333 333
 
334
+@logit
335
+@transaction.atomic
334 336
 def wx_balance_withdraw_api(request):
335 337
     user_id = request.POST.get('user_id', '')
336 338
 
337 339
     # 用户校验
338 340
     try:
339
-        user = UserInfo.objects.get(user_id=user_id)
341
+        user = UserInfo.objects.select_for_update().get(user_id=user_id)
340 342
     except UserInfo.DoesNotExist:
341 343
         return response(UserStatusCode.USER_NOT_FOUND)
342 344
 
@@ -358,9 +360,9 @@ def wx_balance_withdraw_api(request):
358 360
     wxpay = WeChatPay(wechat.get('appID'), wechat.get('apiKey'), wechat.get('mchID'), mch_cert=wechat.get('mch_cert'), mch_key=wechat.get('mch_key'))
359 361
 
360 362
     if withdraw_type == 'TRANSFER':
361
-        wxpay.transfer.transfer(user.wx_uid, amount, u'摄影师余额提现,企业付款', check_name='NO_CHECK')
363
+        ret_data = wxpay.transfer.transfer(user.wx_uid, amount, u'摄影师余额提现,企业付款', check_name='NO_CHECK')
362 364
     elif withdraw_type == 'PACKET':
363
-        wxpay.redpack.send(
365
+        ret_data = wxpay.redpack.send(
364 366
             user.wx_uid,
365 367
             amount,
366 368
             send_name=wechat.get('redpacket', {}).get('SEND_NAME'),
@@ -370,4 +372,8 @@ def wx_balance_withdraw_api(request):
370 372
             remark=wechat.get('redpacket', {}).get('REMARK'),
371 373
         )
372 374
 
375
+    # 根据 ret_data 判断是否提现成功, 成功则减余额, 失败则提示
376
+    user.balance -= amount
377
+    user.save()
378
+
373 379
     return response(200, 'Withdraw Success', u'提现成功', {})