lyh 1 年間 前
コミット
1b1669dd0d

+ 2 - 2
apps/customer/models.py

@@ -19,7 +19,7 @@ class Customer(models.Model):
     tel = models.CharField(max_length=50, verbose_name=u'电话')
     gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u'性别', null=True)
     create_time = models.DateTimeField(verbose_name=u"添加时间", default=timezone.now, editable=False)
-    face = models.ForeignKey(Images, verbose_name=u'头像', on_delete=models.PROTECT, null=True)
+    face = models.TextField(verbose_name=u'头像', null=True, blank=True)
 
     class Meta:
         db_table = "customer"
@@ -118,7 +118,7 @@ class CustomerWechat(models.Model):
         return customer
 
 class CustomerVehicle(models.Model):
-    customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT)
+    customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT, editable=False)
     name = models.CharField(max_length=100, verbose_name=u"姓名")
     tel = models.CharField(max_length=50, verbose_name=u'电话')
     vin = models.CharField(max_length=20)

+ 0 - 6
apps/customer/serializers.py

@@ -7,14 +7,8 @@ from apps.customer.models import Customer, CustomerVehicle
 
 class CustomerSerializer(serializers.ModelSerializer):
     gender_text = serializers.CharField(source='get_gender_display', read_only=True)
-    img_url = serializers.SerializerMethodField()
     create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
 
-    def get_img_url(self, obj):
-        if obj.face:
-            return '%s%s' % (settings.MEDIA_URL, obj.face.picture)
-        return ''
-
     class Meta:
         model = Customer
         fields = '__all__'

+ 4 - 4
apps/pay/models.py

@@ -99,18 +99,18 @@ class Pay(models.Model):
 
 
 class PayProduct(models.Model):
-    main = models.OneToOneField(Pay, verbose_name=u'支付单', on_delete=models.PROTECT, related_name='pay_package_pay')
-    order = models.OneToOneField(ProductOrder, verbose_name=u'商品订单', on_delete=models.PROTECT, related_name='pay_package_order')
+    main = models.OneToOneField(Pay, verbose_name=u'支付单', on_delete=models.PROTECT, related_name='pay_product_pay')
+    order = models.OneToOneField(ProductOrder, verbose_name=u'商品订单', on_delete=models.PROTECT, related_name='pay_product_order')
 
     class Meta:
-        db_table = "pay_package"
+        db_table = "pay_product"
         verbose_name = u"支付商品"
         ordering = ('-id',)
         default_permissions = ()
 
     @staticmethod
     def addnew(order, openid):
-        pay, query_string = Pay.wechatPay(order.customer, order.actual_amount, openid)
+        pay, query_string = Pay.wechatPay(order.customer, order.amount, openid)
         instance = PayProduct.objects.create(main=pay, order=order)
         return instance, query_string
 

+ 1 - 1
apps/product_order/models.py

@@ -22,7 +22,7 @@ class ProductOrder(models.Model):
     no = models.CharField(max_length=64, verbose_name=u"单号", null=True, editable=False, blank=True)
     status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态', default=WAIT_PAY)
     customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT, editable=False)
-    customer_address = models.ForeignKey(CustomerAddress, verbose_name=u'收货信息', on_delete=models.PROTECT, editable=False)
+    customer_address = models.ForeignKey(CustomerAddress, verbose_name=u'收货信息', on_delete=models.PROTECT)
     count = models.IntegerField(verbose_name=u'购买数量')
     price = models.BigIntegerField(verbose_name=u'单价', editable=False)
     amount = models.BigIntegerField(verbose_name=u'合计金额', editable=False)

+ 1 - 1
apps/wechat/activity/views.py

@@ -11,7 +11,7 @@ from apps.activity.filters import ActivityFilter
 
 
 class ActivityListViewSet(generics.ListAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Activity.objects.filter(delete=False)
     serializer_class = ActivitySerializer
 

+ 1 - 13
apps/wechat/customer/serializers.py

@@ -67,7 +67,7 @@ class ProductOrderSerializer(serializers.ModelSerializer):
 
     def create(self, validated_data):
         validated_data['customer'] = self.context['request'].customer
-        validated_data['price'] = Formater.formatPrice(validated_data['price'])
+        validated_data['price'] = Formater.formatPrice(self.initial_data.get('price'))
         validated_data['amount'] = validated_data['price'] * validated_data['count']
         instance = super(ProductOrderSerializer, self).create(validated_data)
         no = instance.generateNo()
@@ -85,18 +85,6 @@ class VehicleDriveReserveSerializer(serializers.ModelSerializer):
     status_text = serializers.CharField(source='get_status_display', read_only=True)
     create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
     date = serializers.DateField(format='%Y-%m-%d')
-    img1_url = serializers.SerializerMethodField()
-    img2_url = serializers.SerializerMethodField()
-
-    def get_img1_url(self, obj):
-        if obj.img1:
-            return '%s%s' % (settings.MEDIA_URL, obj.img1.picture)
-        return ''
-
-    def get_img2_url(self, obj):
-        if obj.img2:
-            return '%s%s' % (settings.MEDIA_URL, obj.img2.picture)
-        return ''
 
     class Meta:
         model = VehicleDriveReserve

+ 2 - 1
apps/wechat/customer/urls.py

@@ -16,9 +16,10 @@ urlpatterns = [
     url(r'^maint_reserve/options/$', MaintReserveOptionsView.as_view()),
     url(r'^usedvehicle/brands/$', UsedVehicleBrandsView.as_view()),
     url(r'^plan_product_order/$', PlanProductOrderView.as_view()),
-    url(r'^vehicle/$', CustomerVehicleViewSet.as_view()),
+    # url(r'^vehicle/$', CustomerVehicleViewSet.as_view()),
 ]
 
 router = SimpleRouter()
 router.register(r'address', CustomerAddressViewSet)
+router.register(r'vehicle', CustomerVehicleViewSet)
 urlpatterns += router.urls

+ 14 - 6
apps/wechat/customer/views.py

@@ -205,8 +205,14 @@ class ProductOrderViewSet(generics.ListAPIView):
 
 
 class ProductOrderSaveViewSet(generics.CreateAPIView):
+    permission_classes = [IsCustomerUser, ]
+    serializer_class = ProductOrderSerializer
+
     def create(self, request, *args, **kwargs):
         with transaction.atomic():
+            wechat_customer = CustomerWechat.objects.filter(customer=request.customer).first()
+            if not wechat_customer or not wechat_customer.openid:
+                raise CustomError(u'获取到用户!')
             serializer = self.get_serializer(data=request.data)
             serializer.is_valid(raise_exception=True)
             serializer.save()
@@ -217,17 +223,14 @@ class ProductOrderSaveViewSet(generics.CreateAPIView):
                 instance.save()
                 tenant_log(instance.customer.user, BizLog.INSERT, u'添加商品订单,no=%s' % instance.no, validated_data)
             else:
-                openid = request.POST.get('openid', None)
-                if not openid:
-                    raise CustomError(u'未获取openid!')
-                pay_package, query_string = PayProduct.addnew(instance, openid)
+                pay_package, query_string = PayProduct.addnew(instance, wechat_customer.openid)
                 tenant_log(instance.customer.user, BizLog.INSERT, u'添加商品订单,no=%s' % instance.no, validated_data)
                 if query_string:
                     return response_ok(query_string)
         return response_ok()
 
 
-class CustomerVehicleViewSet(generics.ListCreateAPIView):
+class CustomerVehicleViewSet(CustomModelViewSet):
     permission_classes = [IsCustomerUser, ]
     queryset = CustomerVehicle.objects.filter()
     serializer_class = CustomerVehicleSerializer
@@ -371,17 +374,22 @@ class PlanProductOrderView(APIView):
 
         product_item = {}
         if product_order:
+            cover = {}
+            if product_order.cover_id:
+                cover = {'width': product_order.cover.width, 'height': product_order.cover.height, 'url': product_order.cover.get_path()}
             product_item = {
+                'id':product_order.id,
                 'name': product_order.name,
                 'describe': product_order.describe,
                 'notes': product_order.notes,
-                'cover': product_order.cover_id and '{}{}'.format(settings.MEDIA_URL, product_order.cover.picture) or '',
+                'cover':cover,
                 'price': Formater.formatPriceShow(product_order.price),
             }
 
         address_item = {}
         if address_order:
             address_item = {
+                'id': address_order.id,
                 'name': address_order.name,
                 'tel': address_order.tel,
                 'area': address_order.area,

+ 2 - 2
apps/wechat/customer/xgj.py

@@ -95,7 +95,7 @@ class XGJ():
         xgj_ip = Config.getConfigValue(Config.KEY_XGJ_IP)
         xgj_session_key = Config.getConfigValue(Config.KEY_XGJ_SESSION_KEY)
 
-        if xgj_ip and xgj_session_key:
+        if xgj_ip and xgj_session_key and instance.shop.is_xgj:
             ts, sign = gender_sign(xgj_session_key)
             url = xgj_ip + 'api/wechat_applet/vehicle_exchange_add/?ts=' + ts + '&sign=' + sign
 
@@ -119,7 +119,7 @@ class XGJ():
             else:
                 tenant_log(instance.customer.user, BizLog.INSERT, u'置换咨询同步销管佳成功,id=%d' % (instance.id))
         else:
-            tenant_log(instance.customer.user, BizLog.INSERT, u'置换咨询同步销管佳失败,没有设置销管佳地址或密钥,id=%d' % (instance.id))
+            tenant_log(instance.customer.user, BizLog.INSERT, u'置换咨询同步销管佳失败,没有设置销管佳地址或密钥,或所选门店在销管佳中不存在,id=%d' % (instance.id))
 
     @staticmethod
     def maint_reserve(instance):  # 售后预约

+ 3 - 3
apps/wechat/product/views.py

@@ -16,7 +16,7 @@ from .serializers import ProductSerializer, ProductDetailSerializer, ProductType
 
 
 class ProductListView(generics.ListAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Product.objects.filter(delete=False, enabled=True)
     serializer_class = ProductSerializer
 
@@ -33,7 +33,7 @@ class ProductListView(generics.ListAPIView):
 
 
 class ProductTypeListView(generics.ListAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Option.objects.filter(enable=True, delete=False, type=Option.PRODUCT_CATEGORY)
     serializer_class = ProductTypeSerializer
 
@@ -50,7 +50,7 @@ class ProductTypeListView(generics.ListAPIView):
 
 
 class ProductDetailView(generics.RetrieveAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Product.objects.filter(enabled=True, delete=False)
     serializer_class = ProductDetailSerializer
 

+ 3 - 9
apps/wechat/serializers.py

@@ -47,7 +47,7 @@ class CustomerMobileSignSerializer(serializers.Serializer):
                 'username': user.username,
                 'name': customer.name or '',
                 'tel': customer.tel or '',
-                'face': customer.face and customer.face.get_path() or '',
+                'face': customer.face or '',
                 'gender': customer.gender or 0,
             }
         else:
@@ -81,7 +81,7 @@ class WechatLoginSerializer(serializers.Serializer):
                 'customer': customer_wechat.customer_id,
                 'name': customer_wechat.customer.name or '',
                 'tel': customer_wechat.customer.tel or '',
-                'face': customer_wechat.customer.face and customer_wechat.customer.face.get_path() or '',
+                'face': customer_wechat.customer.face or '',
                 'gender': customer_wechat.customer.gender or 0,
             }
             return result
@@ -108,7 +108,7 @@ class WechatBindSerializer(serializers.Serializer):
                 'customer': customer.id or '',
                 'name': customer.name or '',
                 'tel': customer.tel or '',
-                'face': customer.face and customer.face.get_path() or '',
+                'face': customer.face or '',
                 'gender': customer.gender or 0,
             }
 
@@ -118,12 +118,6 @@ class WechatBindSerializer(serializers.Serializer):
 
 
 class CustomerSerializer(serializers.ModelSerializer):
-    face = serializers.SerializerMethodField()
-
-    def get_face(self, obj):
-        if obj.face:
-            return {'width': obj.face.width, 'height': obj.face.height, 'url': obj.face.get_path()}
-        return ''
 
     class Meta:
         model = Customer

+ 2 - 2
apps/wechat/store/views.py

@@ -11,7 +11,7 @@ from .serializers import *
 
 
 class ShopViewSet(generics.ListAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Shop.objects.filter(delete=False)
     serializer_class = ShopSerializer
 
@@ -26,7 +26,7 @@ class ShopViewSet(generics.ListAPIView):
 
 
 class ShopMapListView(generics.ListAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Shop.objects.filter(delete=False)
     serializer_class = ShopDetailSerializer
 

+ 1 - 0
apps/wechat/urls.py

@@ -13,6 +13,7 @@ urlpatterns = [
     url(r'^code2Session/$', WxLoginView.as_view()),
     url(r'^wxbind/$', WxBindView.as_view()),
 
+    url(r'^info/$', CustomerInfoView.as_view()),
     url(r'^setUserInfo/$', SetUserInfoView.as_view()),
 
     url(r'^activity/', include('apps.wechat.activity.urls')),

+ 2 - 2
apps/wechat/usedvehicle/views.py

@@ -16,7 +16,7 @@ from .serializers import UsedVehicleSerializer, UsedVehicleDetailSerializer
 
 
 class UsedVehicleListView(generics.ListAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = UsedVehicle.objects.filter(delete=False,status=UsedVehicle.STOCK)
     serializer_class = UsedVehicleSerializer
 
@@ -47,7 +47,7 @@ class OptionTypesView(APIView):
         return response_ok(data)
 
 class UsedVehicleDetailView(generics.RetrieveAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = UsedVehicle.objects.filter(delete=False,status=UsedVehicle.STOCK)
     serializer_class = UsedVehicleDetailSerializer
 

+ 3 - 3
apps/wechat/vehicle/views.py

@@ -11,7 +11,7 @@ from utils.permission import IsCustomerUser
 
 
 class SeriesListViewSet(generics.ListAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Series.objects.filter(enabled=True, delete=False)
     serializer_class = SeriesSerializer
 
@@ -26,7 +26,7 @@ class SeriesListViewSet(generics.ListAPIView):
 
 
 class ModelListViewSet(generics.ListAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Model.objects.filter(enabled=True, delete=False)
     serializer_class = ModelSerializer
 
@@ -41,7 +41,7 @@ class ModelListViewSet(generics.ListAPIView):
 
 
 class ModelDetailViewSet(generics.RetrieveAPIView):
-    permission_classes = [IsCustomerUser, ]
+    # permission_classes = [IsCustomerUser, ]
     queryset = Model.objects.filter(enabled=True, delete=False)
     serializer_class = ModelDetailSerializer
 

+ 8 - 20
apps/wechat/views.py

@@ -71,36 +71,24 @@ class SetUserInfoView(APIView):
     permission_classes = [IsCustomerUser, ]
 
     def post(self, request, *args, **kwargs):
-        openid = request.POST.get('openid')
-        encryptedData = request.POST.get('encryptedData')
-        iv = request.POST.get('iv')
-
-        customer_wechat = CustomerWechat.objects.filter(openid=openid).first()
-        if not customer_wechat:
-            raise CustomError(u'未找到相应的微信客户!')
-        customer = request.customer
-        if customer_wechat.customer and customer_wechat.customer.id != customer.id:
-            raise CustomError(u'该微信已同步其他客户!')
-        if not customer_wechat.customer:
-            customer_wechat.customer = customer
-            customer_wechat.save()
-        pc = WXBizDataCrypt(customer_wechat.session_key)
-        result = pc.decrypt(encryptedData, iv)
+        name = request.data['name']
+        face = request.data['face']
+
         with transaction.atomic():
-            customer.setInfo(result['nickName'], result['gender'], result['avatarUrl'])
-            tenant_log(customer.user, BizLog.INSERT, u'客户设置信息,id=%d' % customer.id, result)
+            customer = request.customer
+            customer.name = name
+            customer.face = face
+            customer.save()
+            tenant_log(customer.user, BizLog.INSERT, u'客户设置信息,id=%d' % customer.id)
         return response_ok()
 
 
 
 class CustomerInfoView(generics.RetrieveAPIView):
     permission_classes = [IsCustomerUser, ]
-    # queryset = Customer.objects.filter()
     serializer_class = CustomerSerializer
 
     def get_object(self):
-        # queryset = self.filter_queryset(self.get_queryset())
-        # obj = queryset.filter(id=self.request.customer.id).first()
         obj = self.request.customer
         return obj
 

+ 4 - 4
uis/views/miant_order/reserve.html

@@ -101,11 +101,11 @@
       elem: '#datagrid'
       ,url: '/maint_order/reserve/'
       ,cols: [[
-        {field:'shop_name', title:'门店',width: 100}
+        {field:'shop_name', title:'门店',width: 200}
        ,{field:'status_text', title:'状态',width: 100}
-       ,{field:'customer_name', title:'客户',width: 100}
-       ,{field:'model_name', title:'车型',width: 100}
-       ,{field:'name', title:'预约人',width: 100}
+       ,{field:'customer_name', title:'客户',width: 120}
+       ,{field:'model_name', title:'车型',width: 150}
+       ,{field:'name', title:'预约人',width: 120}
        ,{field:'tel', title:'电话',width: 120}
        ,{field:'date', title:'预约日期',width: 150}
        ,{field:'create_time', title:'创建时间',width: 150}

+ 3 - 3
uis/views/product_order/order.html

@@ -83,7 +83,7 @@
       elem: '#datagrid'
       ,url: '/product_order/order/'
       ,cols: [[
-        {field:'no', title:'单号',width: 100}
+        {field:'no', title:'单号',width: 200}
        ,{field:'status_text', title:'状态',width: 100}
        ,{field:'name', title:'客户',width: 100}
        ,{field:'product_name', title:'商品',width: 150}
@@ -92,8 +92,8 @@
        ,{field:'count', title:'购买数量',width: 100, align: 'right'}
        ,{field:'price', title:'单价',width: 80, align: 'right'}
        ,{field:'amount', title:'合计金额',width: 80, align: 'right'}
-       ,{field:'area', title:'收货地区',width: 150}
-       ,{field:'addr', title:'收货地址',width: 150}
+       ,{field:'area', title:'收货地区',width: 200}
+       ,{field:'addr', title:'收货地址',width: 200}
        ,{field:'create_time', title:'创建时间',width: 150}
        ,{field:'notes', title:'备注',width: 150}
         ,{width:80, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}

+ 2 - 2
uis/views/vehicle_order/drive_reserve.html

@@ -101,9 +101,9 @@
       elem: '#datagrid'
       ,url: '/vehicle_order/drive_reserve/'
       ,cols: [[
-        {field:'shop_name', title:'门店',width: 100}
+        {field:'shop_name', title:'门店',width: 200}
        ,{field:'status_text', title:'状态',width: 100}
-       ,{field:'customer_name', title:'客户',width: 100}
+       ,{field:'customer_name', title:'客户',width: 120}
        ,{field:'brand_name', title:'品牌',width: 100}
        ,{field:'series_name', title:'车系',width: 100}
        ,{field:'model_name', title:'车型',width: 150}

+ 4 - 4
uis/views/vehicle_order/inquiry.html

@@ -59,7 +59,7 @@
 
             <script type="text/html" id="datagrid-operate-bar">
                 <div class="layui-btn-group">
-                    <a class="layui-btn layui-btn-xs" lay-event="visit">回访</a>
+                    <a class="layui-btn layui-btn-xs" lay-event="visit">回访</a>
                 </div>
             </script>
           </div>
@@ -99,15 +99,15 @@
       elem: '#datagrid'
       ,url: '/vehicle_order/inquiry/'
       ,cols: [[
-        {field:'shop_name', title:'门店',width: 100}
+        {field:'shop_name', title:'门店',width: 200}
        ,{field:'status_text', title:'状态',width: 100}
-       ,{field:'customer_name', title:'客户',width: 100}
+       ,{field:'customer_name', title:'客户',width: 120}
        ,{field:'brand_name', title:'品牌',width: 100}
        ,{field:'series_name', title:'车系',width: 100}
        ,{field:'model_name', title:'车型',width: 150}
        ,{field:'name', title:'询价人',width: 100}
        ,{field:'tel', title:'电话',width: 120}
-       ,{field:'area', title:'地区',width: 150}
+       ,{field:'area', title:'地区',width: 200}
        ,{field:'create_time', title:'创建时间',width: 150}
        ,{field:'notes', title:'备注',width: 150}
         ,{width:80, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}

+ 5 - 5
uis/views/vehicle_order/usedvehicle_estimate.html

@@ -59,7 +59,7 @@
 
             <script type="text/html" id="datagrid-operate-bar">
                 <div class="layui-btn-group">
-                    <a class="layui-btn layui-btn-xs" lay-event="visit">回访</a>
+                    <a class="layui-btn layui-btn-xs" lay-event="visit">回访</a>
                 </div>
             </script>
           </div>
@@ -99,14 +99,14 @@
       elem: '#datagrid'
       ,url: '/vehicle_order/usedvehicle_estimate/'
       ,cols: [[
-        {field:'shop_name', title:'门店',width: 100}
+        {field:'shop_name', title:'门店',width: 200}
        ,{field:'brand_name', title:'品牌',width: 100}
-       ,{field:'model', title:'车型',width: 100}
+       ,{field:'model', title:'车型',width: 150}
        ,{field:'status_text', title:'状态',width: 100}
-       ,{field:'customer_name', title:'客户',width: 100}
+       ,{field:'customer_name', title:'客户',width: 120}
        ,{field:'customer_tel', title:'电话',width: 120}
        ,{field:'plate_date', title:'上牌日期',width: 120}
-       ,{field:'area', title:'地区',width: 150}
+       ,{field:'area', title:'地区',width: 200}
        ,{field:'mileage', title:'里程',width: 150}
        ,{field:'create_time', title:'创建时间',width: 150}
        ,{field:'notes', title:'备注',width: 150}

+ 4 - 4
uis/views/vehicle_order/usedvehicle_inquiry.html

@@ -59,7 +59,7 @@
 
             <script type="text/html" id="datagrid-operate-bar">
                 <div class="layui-btn-group">
-                    <a class="layui-btn layui-btn-xs" lay-event="visit">回访</a>
+                    <a class="layui-btn layui-btn-xs" lay-event="visit">回访</a>
                 </div>
             </script>
           </div>
@@ -99,13 +99,13 @@
       elem: '#datagrid'
       ,url: '/vehicle_order/usedvehicle_inquiry/'
       ,cols: [[
-        {field:'brand_name', title:'品牌',width: 100}
+        {field:'brand_name', title:'品牌',width: 200}
        ,{field:'status_text', title:'状态',width: 100}
-       ,{field:'customer_name', title:'客户',width: 100}
+       ,{field:'customer_name', title:'客户',width: 120}
         ,{field:'customer_tel', title:'电话',width: 120}
         ,{field:'gender_text', title:'性别',width: 80}
        ,{field:'name', title:'询价人',width: 100}
-       ,{field:'area', title:'地区',width: 150}
+       ,{field:'area', title:'地区',width: 200}
        ,{field:'years', title:'车龄',width: 150}
        ,{field:'mileage', title:'里程',width: 150}
        ,{field:'create_time', title:'创建时间',width: 150}

+ 5 - 1
utils/wx/WXBizDataCrypt.py

@@ -4,7 +4,8 @@ from Crypto.Cipher import AES
 
 
 class WXBizDataCrypt:
-    def __init__(self, sessionKey):
+    def __init__(self, appId, sessionKey):
+        self.appId = appId
         self.sessionKey = sessionKey
 
     def decrypt(self, encryptedData, iv):
@@ -16,6 +17,9 @@ class WXBizDataCrypt:
 
         decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
 
+        if decrypted['watermark']['appid'] != self.appId:
+            raise Exception('Invalid Buffer')
+
         return decrypted
 
     def _unpad(self, s):