You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

80 lines
2.1 KiB

import logging
import requests
import json
from mixpanel import Mixpanel
from django.conf import settings
from project.celery import app
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
logger_roistat = get_task_logger('roistat')
@app.task
def transaction_to_mixpanel(user_id, amount, time, product_type):
mix = Mixpanel(settings.MIX_TOKEN)
mix.people_track_charge(
user_id,
amount,
{
'$time': time,
'product_type': product_type,
}
)
@app.task
def product_payment_to_mixpanel(user_id, event_name, time, properties):
mix = Mixpanel(settings.MIX_TOKEN)
props = {
'$time': time,
}
props.update(properties)
mix.track(
user_id,
event_name,
properties=props,
)
@app.task
def transaction_to_roistat(user_id, payment_id, event_name, amount, time, status, product_type, roistat_visit):
body = [{
'id': str(payment_id),
'name': event_name,
'date_create': time,
'status': str(status),
'roistat': str(roistat_visit) if roistat_visit else None,
'price': str(amount),
'client_id': str(user_id),
'fields': {
'product_type': product_type,
}
}]
project = settings.ROISTAT_PROJECT
key = settings.ROISTAT_KEY
url = settings.ROISTAT_API_URL + \
f'/project/add-orders?key={key}&project={project}'
payload = json.dumps(body)
headers = {'content-type': 'application/json'}
resp = requests.request("POST", url, data=payload, headers=headers)
try:
resp_json = resp.json()
except:
resp_json = None
if resp.status_code != 200 or not resp_json or not resp_json.get('processed'):
logger.error('TRANSACTION_TO_ROISTAT for payment # %d, %s RUB: %s' % (
payment_id, amount, resp.text))
logger_roistat.debug('TRANSACTION_TO_ROISTAT for payment # %d, %s RUB: %s' % (
payment_id, amount, resp.text))
else:
logger.info('TRANSACTION_TO_ROISTAT: ' + str(resp.text))
logger_roistat.debug('TRANSACTION_TO_ROISTAT: ' + str(resp.text))