|
@@ -116,9 +116,9 @@ class InAppPurchaseView(View):
|
|
pay_result_url = CommonService.get_payment_status_url(lang, 'fail')
|
|
pay_result_url = CommonService.get_payment_status_url(lang, 'fail')
|
|
if device_apple_package_qs[0].userID != user_id:
|
|
if device_apple_package_qs[0].userID != user_id:
|
|
return response.json(0, {'url': pay_result_url})
|
|
return response.json(0, {'url': pay_result_url})
|
|
- elif device_apple_package_qs[0].uid == uid:
|
|
|
|
|
|
+ elif device_apple_package_qs[0].uid == uid and device_apple_package_qs[0].subscription_status == 0:
|
|
device_apple_package_qs.update(subscription_status=1)
|
|
device_apple_package_qs.update(subscription_status=1)
|
|
- return response.json(0)
|
|
|
|
|
|
+ return response.json(0, {'url': pay_result_url})
|
|
else:
|
|
else:
|
|
return response.json(0, {'url': pay_result_url})
|
|
return response.json(0, {'url': pay_result_url})
|
|
|
|
|
|
@@ -463,7 +463,7 @@ class InAppPurchaseView(View):
|
|
cls.do_vod_msg_notice(uid, user_id, lang, sys_msg_text_list)
|
|
cls.do_vod_msg_notice(uid, user_id, lang, sys_msg_text_list)
|
|
|
|
|
|
elif str(decoded_payload.rawNotificationType) == "SUBSCRIBED":
|
|
elif str(decoded_payload.rawNotificationType) == "SUBSCRIBED":
|
|
- # 处理订阅
|
|
|
|
|
|
+ # 处理订阅 ---> 充值逻辑写在了认证交易
|
|
pass
|
|
pass
|
|
|
|
|
|
elif str(decoded_payload.rawNotificationType) == "EXPIRED":
|
|
elif str(decoded_payload.rawNotificationType) == "EXPIRED":
|
|
@@ -473,7 +473,14 @@ class InAppPurchaseView(View):
|
|
# PRICE_INCREASE,则表示订阅已过期,因为客户不同意需要客户同意的价格上涨。如果subtype为
|
|
# PRICE_INCREASE,则表示订阅已过期,因为客户不同意需要客户同意的价格上涨。如果subtype为
|
|
# PRODUCT_NOT_FOR_SALE,则表示订阅已过期,因为在订阅尝试续订时,产品已不可购买。
|
|
# PRODUCT_NOT_FOR_SALE,则表示订阅已过期,因为在订阅尝试续订时,产品已不可购买。
|
|
# 没有子类型的通知表示订阅因其他原因过期。
|
|
# 没有子类型的通知表示订阅因其他原因过期。
|
|
- pass
|
|
|
|
|
|
+ decoded_transaction_information = verifier.verify_and_decode_signed_transaction(
|
|
|
|
+ decoded_payload.data.signedTransactionInfo)
|
|
|
|
+
|
|
|
|
+ # originalTransactionId 原始购买的交易标识符
|
|
|
|
+ original_transaction_id = decoded_transaction_information.originalTransactionId
|
|
|
|
+ if original_transaction_id:
|
|
|
|
+ DeviceApplePackage.objects.filter(original_transaction_id=original_transaction_id).update(
|
|
|
|
+ subscription_status=2)
|
|
|
|
|
|
elif str(decoded_payload.rawNotificationType) == "CONSUMPTION_REQUEST":
|
|
elif str(decoded_payload.rawNotificationType) == "CONSUMPTION_REQUEST":
|
|
# 一种通知类型,指示客户发起了消费型 App 内购买项目或自动续期订阅的退款请求,并且 App Store 要求您提供消费数据。有关详细信息,请参阅发送消耗信息。
|
|
# 一种通知类型,指示客户发起了消费型 App 内购买项目或自动续期订阅的退款请求,并且 App Store 要求您提供消费数据。有关详细信息,请参阅发送消耗信息。
|
|
@@ -488,6 +495,18 @@ class InAppPurchaseView(View):
|
|
if original_transaction_id:
|
|
if original_transaction_id:
|
|
DeviceApplePackage.objects.filter(original_transaction_id=original_transaction_id).update(
|
|
DeviceApplePackage.objects.filter(original_transaction_id=original_transaction_id).update(
|
|
subscription_status=0)
|
|
subscription_status=0)
|
|
|
|
+
|
|
|
|
+ elif str(decoded_payload.rawNotificationType) == "REFUND":
|
|
|
|
+ # 一种通知类型,表示 App Store 成功退还了消耗性应用内购买、非消耗性应用内购买、自动续订或不可续订的交易。
|
|
|
|
+ # revocationDate 包含退款交易的时间戳。originalTransactionId 和 productId 用于标识原始交易和产品。revocationReason 包含原因。
|
|
|
|
+ # 要请求客户所有退款交易的列表,请参阅 App Store 服务器 API 中的获取退款历史记录。
|
|
|
|
+ pass
|
|
|
|
+
|
|
|
|
+ elif str(decoded_payload.rawNotificationType) == "REFUND_DECLINED":
|
|
|
|
+ # 一种通知类型,表示 App Store 由于客户提出的争议而撤销了先前批准的退款。如果您的应用程序因相关退款而撤销了内容或服务,则需要恢复这些内容或服务。
|
|
|
|
+ # 此通知类型可适用于任何应用程序内购买类型:消耗品、非消耗品、不可续订订阅和自动续订订阅。对于自动续订,当 App Store 撤销退款时,续订日期保持不变。
|
|
|
|
+ pass
|
|
|
|
+
|
|
else:
|
|
else:
|
|
logger.info(f"App Store服务器通知decoded_payload.rawNotificationType 未处理")
|
|
logger.info(f"App Store服务器通知decoded_payload.rawNotificationType 未处理")
|
|
return HttpResponse(status=500)
|
|
return HttpResponse(status=500)
|