|
@@ -0,0 +1,87 @@
|
|
|
+# @Author : Rocky
|
|
|
+# @File : InAppPurchaseController.py
|
|
|
+# @Time : 2024/6/21 9:10
|
|
|
+import time
|
|
|
+
|
|
|
+import itunesiap
|
|
|
+from django.views import View
|
|
|
+
|
|
|
+from Model.models import Order_Model, Store_Meal
|
|
|
+from Service.CommonService import CommonService
|
|
|
+
|
|
|
+
|
|
|
+class InAppPurchaseView(View):
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validation(request.GET, request, operation)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validation(request.POST, request, operation)
|
|
|
+
|
|
|
+ def validation(self, request_dict, request, operation):
|
|
|
+ if operation == 'AppStoreServerNotifications': # App Store服务器通知
|
|
|
+ pass
|
|
|
+ token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
|
|
|
+ if token_code != 0:
|
|
|
+ return response.json(token_code)
|
|
|
+ if operation == 'verifyTransaction': # 获取商品列表
|
|
|
+ return self.verify_transaction(user_id, request_dict, response)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def verify_transaction(user_id, request_dict, response):
|
|
|
+ """
|
|
|
+ 认证交易
|
|
|
+ @param user_id: 用户id
|
|
|
+ @param request_dict: 请求参数
|
|
|
+ @request_dict receipt: 收据
|
|
|
+ @param response: 响应对象
|
|
|
+ @return: response
|
|
|
+ """
|
|
|
+ receipt = request_dict.get('receipt', None)
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
+ lang = request_dict.get('lang', 'en')
|
|
|
+ channel = request_dict.get('channel', None)
|
|
|
+ try:
|
|
|
+ order_id = CommonService.createOrderID()
|
|
|
+ verify_response = itunesiap.verify(receipt, env=itunesiap.env.sandbox)
|
|
|
+ print(verify_response.receipt.in_app[0]['product_id']) # response.receipt.last_in_app.product_id
|
|
|
+ product_id = verify_response.receipt.in_app[0]['product_id']
|
|
|
+
|
|
|
+ pay_type = 4
|
|
|
+ now_time = int(time.time())
|
|
|
+
|
|
|
+ store_qs = Store_Meal.objects.filter(
|
|
|
+ product_id=product_id, lang__lang=lang, is_show=0).\
|
|
|
+ values(
|
|
|
+ 'id', 'currency', 'price', 'lang__content', 'day', 'commodity_type', 'lang__title', 'expire',
|
|
|
+ 'commodity_code', 'discount_price', 'bucket__mold', 'cycle_config_id', 'is_ai')
|
|
|
+ if not store_qs.exists():
|
|
|
+ return response.json(173)
|
|
|
+
|
|
|
+ rank_id = store_qs[0]['id']
|
|
|
+ currency = store_qs[0]['currency']
|
|
|
+ price = store_qs[0]['price']
|
|
|
+ is_ai = store_qs[0]['is_ai']
|
|
|
+ content = store_qs[0]['lang__content']
|
|
|
+ commodity_code = store_qs[0]['commodity_code']
|
|
|
+ commodity_type = store_qs[0]['commodity_type']
|
|
|
+ order_type = 1 if is_ai else 0
|
|
|
+ store_meal_qs = Store_Meal.objects.filter(id=rank_id, lang__lang='cn', is_show=0).\
|
|
|
+ values('lang__title', 'lang__content')
|
|
|
+ if store_meal_qs.exists():
|
|
|
+ store_meal_name = store_meal_qs[0]['lang__title'] + '-' + store_meal_qs[0]['lang__content']
|
|
|
+ else:
|
|
|
+ store_meal_name = '未知套餐'
|
|
|
+
|
|
|
+ Order_Model.objects.create(
|
|
|
+ orderID=order_id, UID=uid, channel=channel, userID_id=user_id, desc=content, payType=pay_type,
|
|
|
+ payTime=now_time, price=price, currency=currency, addTime=now_time, updTime=now_time,
|
|
|
+ order_type=order_type, commodity_code=commodity_code, commodity_type=commodity_type, rank_id=rank_id,
|
|
|
+ ai_rank_id=1, store_meal_name=store_meal_name)
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+
|