1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # coding=utf-8
- import traceback
- from django.db import transaction
- from django.http import HttpResponse
- from django.conf import settings
- from rest_framework.views import APIView
- from util.exceptions import CustomError
- from util.wechatpay import WechatPayNotify
- from util.wx.wechat import WeChat
- from apps.activity.models import Pay
- from apps.WechatApplet.models import WechatApplet
- from apps.foundation.models import BizLog
- class WechatNotifyView(APIView):
- def dispatch(self, request, *args, **kwargs):
- param = request.body
- appid = kwargs['appid']
- app = WechatApplet.getByAppid(appid)
- # param = request.body.decode('utf-8')
- notify = WechatPayNotify(param, app.agent_key)
- try:
- data = notify.handle()
- if not data:
- raise CustomError(u'错误的请求!')
- result_code = data['result_code']
- if result_code != 'SUCCESS':
- raise CustomError(u'错误的请求!')
- no = data['out_trade_no']
- amount = float(data['total_fee']) / 100.0
- transaction_id = data['transaction_id']
- with transaction.atomic():
- pay = Pay.getByNo(no)
- pay.payConfirm(amount, transaction_id)
- BizLog.objects.addnew(pay.customer.user, BizLog.INSERT, u'微信支付成功,no=%s' % no)
- # 微信支付成功之后分账 分账不要影响支付结果
- try:
- pay.split_account(app)
- except:
- traceback.print_exc()
- except Exception as e:
- traceback.print_exc()
- return HttpResponse(WechatPayNotify.response_fail())
- return HttpResponse(WechatPayNotify.response_ok())
|