|
@@ -1,10 +1,12 @@
|
|
|
from Ansjer.config import PAYPAL_CRD,SERVER_DOMAIN,SERVER_DOMAIN_SSL,PAYPAL_WEB_HOOK_ID
|
|
|
-from Model.models import PayCycleConfigModel,Order_Model, Store_Meal, UID_Bucket, PromotionRuleModel, Unused_Uid_Meal,Device_Info, CouponModel
|
|
|
+from Model.models import PayCycleConfigModel,Order_Model, Store_Meal, UID_Bucket, PromotionRuleModel, Unused_Uid_Meal,Device_Info, CouponModel, Order_Model
|
|
|
from Service.CommonService import CommonService
|
|
|
from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
|
|
|
import requests
|
|
|
import time
|
|
|
import sys
|
|
|
+from Object.TokenObject import TokenObject
|
|
|
+from Object.UidTokenObject import UidTokenObject
|
|
|
from Object.ResponseObject import ResponseObject
|
|
|
import paypalrestsdk
|
|
|
from paypalrestsdk import BillingAgreement
|
|
@@ -31,7 +33,6 @@ class Paypal:
|
|
|
return False
|
|
|
return True
|
|
|
|
|
|
-
|
|
|
def subscriptions(store_info,lang,orderID,price):
|
|
|
cycle_config = PayCycleConfigModel.objects.filter(id=store_info['cycle_config_id']).values()
|
|
|
if not cycle_config:
|
|
@@ -564,6 +565,83 @@ class PaypalCycleNotify(View):
|
|
|
exit()
|
|
|
|
|
|
|
|
|
+class payCycle(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):
|
|
|
+ response = ResponseObject()
|
|
|
+ token = request_dict.get('token', None)
|
|
|
+ # 设备主键uid
|
|
|
+ tko = TokenObject(token)
|
|
|
+ response.lang = tko.lang
|
|
|
+ if tko.code != 0:
|
|
|
+ return response.json(tko.code)
|
|
|
+ userID = tko.userID
|
|
|
+ if operation is None:
|
|
|
+ return response.json(444, 'error path')
|
|
|
+ elif operation == 'queryPayCycle': # paypal成功订阅回调
|
|
|
+ return self.do_query_pay_cycle(request_dict,userID, response)
|
|
|
+ elif operation == 'cancelPayCycle': # 取消自动续费
|
|
|
+ return self.do_cancel_pay_cycle(request_dict,userID, response)
|
|
|
+ def do_query_pay_cycle(self, request_dict, userID, response):
|
|
|
+ lang = request_dict.get('lang', 'en')
|
|
|
+ orderObject = Order_Model.objects.filter(userID=userID,status=1,rank__lang__lang=lang).annotate(rank__title=F('rank__lang__title'), rank__content=F('rank__lang__content'))
|
|
|
+ orderObject = orderObject.filter(~Q(agreement_id = ''))
|
|
|
+ if not orderObject.exists():
|
|
|
+ return response.json(0, {'data':[], 'count': 0})
|
|
|
+ orderQuery = orderObject.values("orderID", "UID", "channel", "desc", "price", "currency",
|
|
|
+ "addTime",
|
|
|
+ "updTime", "paypal", "rank__day", "payType",
|
|
|
+ "rank__price", "status",
|
|
|
+ "rank__lang__content", "rank__title", "rank__currency",
|
|
|
+ "rank_id", "rank__expire","agreement_id").order_by('addTime')
|
|
|
+ new_data = []
|
|
|
+ values = []
|
|
|
+ for d in orderQuery:
|
|
|
+ if d['agreement_id'] not in values:
|
|
|
+ new_data.append(d)
|
|
|
+ values.append(d['agreement_id'])
|
|
|
+ count = len(new_data)
|
|
|
+ return response.json(0, {'data': new_data, 'count': count})
|
|
|
+
|
|
|
+ def do_cancel_pay_cycle(self, request_dict, userID, response):
|
|
|
+ orderID = request_dict.get('orderID', 'None')
|
|
|
+ orderObject = Order_Model.objects.filter(orderID=orderID)
|
|
|
+ orderObject = orderObject.filter(~Q(agreement_id = '')).values("agreement_id")
|
|
|
+ if not orderObject.exists():
|
|
|
+ return response.json(800)
|
|
|
+
|
|
|
+ paypalrestsdk.configure(PAYPAL_CRD)
|
|
|
+ BILLING_AGREEMENT_ID = orderObject[0]['agreement_id']
|
|
|
+ try:
|
|
|
+ billing_agreement = paypalrestsdk.BillingAgreement.find(BILLING_AGREEMENT_ID)
|
|
|
+ if billing_agreement.state != 'Active':
|
|
|
+ return response.json(10051)
|
|
|
+ cancel_note = {"note": "Canceling the agreement"}
|
|
|
+ if billing_agreement.cancel(cancel_note):
|
|
|
+ Order_Model.objects.filter(agreement_id=BILLING_AGREEMENT_ID).update(agreement_id='')
|
|
|
+ return response.json(10051)
|
|
|
+ else:
|
|
|
+ return response.json(10052)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(10052)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|