瀏覽代碼

Merge branch 'dev' of http://192.168.136.99:3000/servers/ASJServer into dev

lang 3 年之前
父節點
當前提交
312a5d914f
共有 5 個文件被更改,包括 103 次插入10 次删除
  1. 1 0
      Ansjer/urls.py
  2. 5 1
      Controller/CloudStorage.py
  3. 51 4
      Controller/DeviceConfirmRegion.py
  4. 31 5
      Controller/PaymentCycle.py
  5. 15 0
      Model/models.py

+ 1 - 0
Ansjer/urls.py

@@ -346,6 +346,7 @@ urlpatterns = [
 
     #设备确定分配地区
     url(r'^device/confirmRegion$', DeviceConfirmRegion.ConfirmRegion.as_view()),
+    url(r'^device/ConfirmRegionV2$', DeviceConfirmRegion.ConfirmRegionV2.as_view()),
 
     # pc端软件信息
     url(r'^pcInfo/(?P<operation>.*)$', PcInfo.PcInfo.as_view()),

+ 5 - 1
Controller/CloudStorage.py

@@ -928,7 +928,7 @@ class CloudStorageView(View):
 
     def do_pay_by_paypal_callback(self, request_dict, response):  # paypal支付回调
         logger = logging.getLogger('info')
-        logger.info('---------进入paypay异步回调')
+        logger.info('---------进入paypal异步回调')
         paymentId = request_dict.get('paymentId', None)
         PayerID = request_dict.get('PayerID', None)
         orderID = request_dict.get('orderID', None)
@@ -961,6 +961,7 @@ class CloudStorageView(View):
             logger.info(payment)
 
             payres = payment.execute({"payer_id": PayerID})
+            logger.info(payres)
             print(payres)
             if not payres:
                 red_url = "{SERVER_DOMAIN_SSL}web/paid2/fail.html".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
@@ -1193,6 +1194,7 @@ class CloudStorageView(View):
             return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL', 'return_msg': repr(e)}))
 
     def do_create_pay_order(self, request_dict, userID, ip, response):  # 创建支付订单
+        logger = logging.getLogger('info')
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         pay_type = int(request_dict.get('pay_type', None))
@@ -1315,6 +1317,8 @@ class CloudStorageView(View):
                 print(payment.error)
                 return response.json(10, payment.error)
             print(payment)
+            logger.info('paypal创建订单返回----------')
+            logger.info(payment)
             paymentID = payment['id']   # 获取paymentID
             for link in payment.links:
                 if link.rel == "approval_url":

+ 51 - 4
Controller/DeviceConfirmRegion.py

@@ -26,7 +26,7 @@ from ratelimit.decorators import ratelimit
 from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
 from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
-    UserAppFrequencyModel, CountryIPModel, CountryModel, RegionModel, P2PIpModel
+    UserAppFrequencyModel, CountryIPModel, CountryModel, RegionModel, P2PIpModel, DeviceDomainModel
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AliSmsObject import AliSmsObject
 from Object.RedisObject import RedisObject
@@ -62,15 +62,62 @@ class ConfirmRegion(TemplateView):
         # serial_number = request.POST.get('serial_number', None)
         ip = CommonService.get_ip_address(request)
         # ip = '14.102.176.0'
-        ipInfo = CommonService.getIpIpInfo(ip,"CN")
+        ipInfo = CommonService.getIpIpInfo(ip, "CN")
         if ipInfo['country_code']:
             device_request_url = CountryModel.objects.filter(country_code=ipInfo['country_code']).values("region__api")
             if device_request_url.exists():
-                return response.json(0,{"request_api_url":device_request_url[0]['region__api']})
+                return response.json(0, {"request_api_url":device_request_url[0]['region__api']})
 
         # 不存在默认返回美洲地区api。
         api = RegionModel.objects.filter(continent_code='NA').values("api")
-        return response.json(0,{"request_api_url":api[0]['api']})
+        return response.json(0,{"request_api_url": api[0]['api']})
+
+
+# 根据设备的ip返回域名
+class ConfirmRegionV2(TemplateView):
+    @method_decorator(csrf_exempt)
+    def dispatch(self, *args, **kwargs):
+        return super(ConfirmRegionV2, self).dispatch(*args, **kwargs)
+
+    def get(self, request, *args, **kwargs):
+        try:
+            response = ResponseObject()
+            uid = request.GET.get('uid', None)
+            serial_number = request.GET.get('serial_number', None)
+            if not uid and not serial_number:
+                return response.json(444)
+            if uid:
+                data_dict = {'uid': uid}
+                device_domain_qs = DeviceDomainModel.objects.filter(uid=uid)
+            else:
+                data_dict = {'serial_number': serial_number}
+                device_domain_qs = DeviceDomainModel.objects.filter(serial_number=serial_number)
+            request.encoding = 'utf-8'
+            ip = CommonService.get_ip_address(request)
+            data_dict['ip'] = ip
+            ipInfo = CommonService.getIpIpInfo(ip, 'CN')
+            country_code = ipInfo['country_code']
+            if country_code:
+                data_dict['country_name'] = ipInfo['country_name']
+                device_request_url = CountryModel.objects.filter(country_code=country_code).values('region__api')
+                if device_request_url.exists():
+                    api = device_request_url[0]['region__api']
+                else:   # 默认返回美洲地区api
+                    api = RegionModel.objects.filter(continent_code='NA').values('api')[0]['api']
+            else:
+                # 默认返回美洲地区api
+                api = RegionModel.objects.filter(continent_code='NA').values('api')[0]['api']
+
+            # 更新或创建设备域名数据
+            if device_domain_qs.exists():
+                device_domain_qs.update(**data_dict)
+            else:
+                device_domain_qs.create(**data_dict)
+            return response.json(0, {"request_api_url": api})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
 
 #确认设备所在地区
 class Device_Region(object):

+ 31 - 5
Controller/PaymentCycle.py

@@ -164,6 +164,10 @@ class PaypalCycleNotify(View):
             return HttpResponseRedirect(red_url)
 
         orderID = billing_agreement_response.description
+
+        logger.info('------------billing_agreement_response------')
+        logger.info(billing_agreement_response)
+
         agreement_id = billing_agreement_response.id
         promotion_rule_id = ''
         order_qs = Order_Model.objects.filter(orderID=orderID, status=0)
@@ -279,14 +283,29 @@ class PaypalCycleNotify(View):
 
     def do_paypal_webhook_notify(self, request_dict, request, response):
         logger = logging.getLogger('info')
+        logger.info('---into---webhook_notify-------')
+        logger.info('---request_dict-------')
+        logger.info(request_dict)
         json_agreement_str = request.body.decode("utf-8")
         json_obj = json.loads(json_agreement_str)
         header = request.META
         paypal_body = json_obj.get('resource')
+        logger.info('-----paypal_body------')
+        logger.info(paypal_body)
+        logger.info('-----paypal_header------')
+        logger.info(header)
 
         billing_agreement_id = paypal_body.get('billing_agreement_id')
+        paypal_transaction_id = paypal_body.get('id')
         amount = paypal_body.get('amount')
         if not billing_agreement_id:
+            #普通支付,更新paypal交易id
+            paymentID = paypal_body.get('parent_payment')
+            if paymentID and paypal_transaction_id:
+                Order_Model.objects.filter(paymentID=paymentID).update(
+                    updTime=int(time.time()),
+                    trade_no=paypal_transaction_id
+                )
             return HttpResponse('success')
 
         transmission_id = header.get('HTTP_PAYPAL_TRANSMISSION_ID',None)
@@ -308,9 +327,16 @@ class PaypalCycleNotify(View):
                     agreement_id = paypal_body.get('billing_agreement_id')
                     billing_agreement = paypalrestsdk.BillingAgreement.find(agreement_id)
 
-                    # 订阅续费订单(如果完成周期数`不是0, 则说明是续费订单,)
+                    # 订阅续费订单(如果完成周期数`==0,则是自动续费第一次扣款。否则说明是续费订单)
                     if billing_agreement.agreement_details.cycles_completed == '0':
+                        logger.info('----billing_agreement----')
+                        logger.info(billing_agreement)
                         logger.info('订阅续费订单完成周期数==0,结束')
+                        #更新order表,paypal的商家交易号
+                        Order_Model.objects.filter(orderID=billing_agreement.description).update(
+                            updTime=int(time.time()),
+                            trade_no=paypal_transaction_id
+                        )
                         return HttpResponse('success')
                     oldOrderID = billing_agreement.description
                     order_qs = Order_Model.objects.filter(orderID=oldOrderID, status=1)
@@ -397,10 +423,10 @@ class PaypalCycleNotify(View):
                         Order_Model.objects.create(orderID=orderID, UID=UID, channel=channel, userID_id=userid,
                                                    desc=order_list[0]['desc'], payType=order_list[0]['payType'], payTime=nowTime,
                                                    price=amount.get('total'), currency=order_list[0]['currency'], addTime=nowTime, updTime=nowTime,
-                                                   pay_url='', isSelectDiscounts=0,
-                                                   commodity_code=order_list[0]['commodity_code'], commodity_type=order_list[0]['commodity_type'],
-                                                   rank_id=rank, paymentID='', coupon_id='',uid_bucket_id=uid_bucket_id,status=1,
-                                                   agreement_id=agreement_id,plan_id=order_list[0]['plan_id'], ai_rank_id=1)
+                                                   pay_url='', isSelectDiscounts=0,commodity_code=order_list[0]['commodity_code'],
+                                                   commodity_type=order_list[0]['commodity_type'],rank_id=rank, paymentID='',
+                                                   coupon_id='',uid_bucket_id=uid_bucket_id,status=1,agreement_id=agreement_id,
+                                                   plan_id=order_list[0]['plan_id'], ai_rank_id=1, trade_no=paypal_transaction_id)
                         datetime = time.strftime("%Y-%m-%d", time.localtime())
                         sys_msg_text_list = ['温馨提示:尊敬的客户,您的' + UID + '设备在' + datetime + '已成功续订云存套餐',
                                              'Dear customer,you already subscribed the cloud storage package successfully for device ' + UID + ' on ' + time.strftime(

+ 15 - 0
Model/models.py

@@ -1897,6 +1897,21 @@ class P2PIpModel(models.Model):
         verbose_name_plural = verbose_name
 
 
+class DeviceDomainModel(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
+    uid = models.CharField(max_length=20, default='', unique=True, db_index=True, verbose_name='uid')
+    serial_number = models.CharField(max_length=9, default='', unique=True, db_index=True, verbose_name='序列号')
+    ip = models.CharField(default='', max_length=32, verbose_name='ip')
+    country_name = models.CharField(max_length=20, default='', verbose_name='国家名')
+    add_time = models.DateTimeField(blank=True, auto_now_add=True, verbose_name=u'添加时间')
+    update_time = models.DateTimeField(blank=True, auto_now=True, verbose_name=u'更新时间')
+
+    class Meta:
+        db_table = 'device_domain'
+        verbose_name = u'设备域名表'
+        verbose_name_plural = verbose_name
+
+
 class RequestRecordModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增ID')
     method = models.CharField(max_length=10, default='', verbose_name='请求类型')