|
@@ -43,7 +43,7 @@ class InAppPurchaseView(View):
|
|
|
|
|
|
def validation(self, request_dict, request, operation):
|
|
def validation(self, request_dict, request, operation):
|
|
if operation == 'AppStoreServerNotifications': # App Store服务器通知
|
|
if operation == 'AppStoreServerNotifications': # App Store服务器通知
|
|
- return self.app_store_server_notifications(request)
|
|
|
|
|
|
+ return self.app_store_server_notifications(request, request_dict)
|
|
token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
|
|
token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
|
|
if token_code != 0:
|
|
if token_code != 0:
|
|
return response.json(token_code)
|
|
return response.json(token_code)
|
|
@@ -131,6 +131,7 @@ class InAppPurchaseView(View):
|
|
|
|
|
|
product_id = None
|
|
product_id = None
|
|
originalTransaction_id = None
|
|
originalTransaction_id = None
|
|
|
|
+ agreement_id = ""
|
|
if payload and payload.productId and payload.originalTransactionId:
|
|
if payload and payload.productId and payload.originalTransactionId:
|
|
product_id = payload.productId
|
|
product_id = payload.productId
|
|
originalTransaction_id = payload.originalTransactionId
|
|
originalTransaction_id = payload.originalTransactionId
|
|
@@ -141,14 +142,7 @@ class InAppPurchaseView(View):
|
|
|
|
|
|
# 之前订阅过任意套餐返回不可再次订阅
|
|
# 之前订阅过任意套餐返回不可再次订阅
|
|
if Store_Meal.objects.filter(product_id=product_id, cycle_config_id__isnull=False).exists():
|
|
if Store_Meal.objects.filter(product_id=product_id, cycle_config_id__isnull=False).exists():
|
|
- transaction_subscription = client.get_all_subscription_statuses(transaction_id)
|
|
|
|
- if transaction_subscription.data:
|
|
|
|
- for subscription in transaction_subscription.data[0].lastTransactions:
|
|
|
|
- if str(subscription.status) == "Status.ACTIVE":
|
|
|
|
- key = str(originalTransaction_id) + "_SUBSCRIBED"
|
|
|
|
- redis_originalTransaction_id = redis_obj.get_data(key)
|
|
|
|
- if redis_originalTransaction_id != str(originalTransaction_id):
|
|
|
|
- return response.json(10048, f"订阅状态为 {subscription.status} ")
|
|
|
|
|
|
+ agreement_id = originalTransaction_id
|
|
|
|
|
|
pay_type = PAY_TYPE_IN_APP_PURCHASE
|
|
pay_type = PAY_TYPE_IN_APP_PURCHASE
|
|
now_time = int(time.time())
|
|
now_time = int(time.time())
|
|
@@ -220,7 +214,9 @@ class InAppPurchaseView(View):
|
|
orderID=order_id, UID=uid, channel=channel, userID_id=user_id, desc=content, payType=pay_type,
|
|
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,
|
|
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,
|
|
order_type=order_type, commodity_code=commodity_code, commodity_type=commodity_type, rank_id=rank_id,
|
|
- ai_rank_id=1, status=1, create_vod=1, store_meal_name=store_meal_name, uid_bucket_id=uid_bucket_id)
|
|
|
|
|
|
+ ai_rank_id=1, status=1, create_vod=1, store_meal_name=store_meal_name, uid_bucket_id=uid_bucket_id,
|
|
|
|
+ agreement_id=agreement_id
|
|
|
|
+ )
|
|
|
|
|
|
# 发送云存开通信息
|
|
# 发送云存开通信息
|
|
date_time = time.strftime("%Y-%m-%d", time.localtime())
|
|
date_time = time.strftime("%Y-%m-%d", time.localtime())
|
|
@@ -311,7 +307,7 @@ class InAppPurchaseView(View):
|
|
ali_sms.send_code_sms_cloud(phone=phone, params=params, sign_name=sign_ms, temp_msg=temp_msg)
|
|
ali_sms.send_code_sms_cloud(phone=phone, params=params, sign_name=sign_ms, temp_msg=temp_msg)
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
- def app_store_server_notifications(cls, request):
|
|
|
|
|
|
+ def app_store_server_notifications(cls, request, request_dict):
|
|
logger = logging.getLogger('apple_pay')
|
|
logger = logging.getLogger('apple_pay')
|
|
try:
|
|
try:
|
|
logger.info('App Store服务器通知请求类型:{}'.format(request.method))
|
|
logger.info('App Store服务器通知请求类型:{}'.format(request.method))
|
|
@@ -470,12 +466,6 @@ class InAppPurchaseView(View):
|
|
# INITIAL_BUY(首次购买),则表示用户首次购买或通过家庭共享访问该订阅。如果子类型为
|
|
# INITIAL_BUY(首次购买),则表示用户首次购买或通过家庭共享访问该订阅。如果子类型为
|
|
decoded_transaction_information = verifier.verify_and_decode_signed_transaction(
|
|
decoded_transaction_information = verifier.verify_and_decode_signed_transaction(
|
|
decoded_payload.data.signedTransactionInfo)
|
|
decoded_payload.data.signedTransactionInfo)
|
|
- originalTransaction_id = decoded_transaction_information.originalTransactionId
|
|
|
|
-
|
|
|
|
- # redis上锁,保证验证时是同一个订单
|
|
|
|
- redis_obj = RedisObject()
|
|
|
|
- redis_key = str(originalTransaction_id) + "_SUBSCRIBED"
|
|
|
|
- redis_obj.set_data(redis_key, originalTransaction_id, 3600)
|
|
|
|
|
|
|
|
# 之前订阅过不可重复订阅
|
|
# 之前订阅过不可重复订阅
|
|
key_id = 'N42WMFCV6A'
|
|
key_id = 'N42WMFCV6A'
|
|
@@ -509,7 +499,7 @@ class InAppPurchaseView(View):
|
|
return HttpResponse(status=500)
|
|
return HttpResponse(status=500)
|
|
return HttpResponse(status=200)
|
|
return HttpResponse(status=200)
|
|
else:
|
|
else:
|
|
- logger.info('App Store服务器通知不是post请求')
|
|
|
|
|
|
+ logger.info(f'App Store服务器通知不是post请求, 参数{request_dict}')
|
|
return HttpResponse(status=400)
|
|
return HttpResponse(status=400)
|
|
except Exception as e:
|
|
except Exception as e:
|
|
logger.info('App Store服务器通知异常:{}'.
|
|
logger.info('App Store服务器通知异常:{}'.
|