Example #1
0
def lazada_authorize_login():
    code = request.get_json().get('code')
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)

    user = User.query.get(user_id)

    if user:
        client = LazopClient("https://auth.lazada.com/rest",
                             LAZADA_MARKET_KEY, LAZADA_MARKET_SECRET)
        api_request = LazopRequest("/auth/token/create")
        api_request.add_api_param("code", code)
        response = client.execute(api_request)
        access_token = response.body.get('access_token')
        refresh_token = response.body.get('refresh_token')
        seller_id = response.body.get('country_user_info')[0].get('seller_id')
        short_code = response.body.get('country_user_info')[
            0].get('short_code')
        # email = response.body.get('account')
        print(response.body)

        new_marketplace = Marketplace(
            user_id=user_id,
            marketplace_name="lazada",
            shop_id=seller_id,
            shop_name=short_code,
            access_token=access_token,
            refresh_token=refresh_token
        )

        db.session.add(new_marketplace)
        db.session.commit()
        send_new_marketplace_email(user.email, user_id, "Lazada")

        responseObject = {
            'status': 'success',
            'message': 'Marketplaces connected successfully',
            'lazada_refresh': refresh_token,
            'lazada_token': access_token
        }

        return make_response(jsonify(responseObject)), 201

    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }
        return make_response(jsonify(responseObject)), 401
Example #2
0
def shopee_products():
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)
    user = User.query.get(user_id)

    if user:
        shop_id = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='shopee').first().shop_id
        endpoint = "https://partner.shopeemobile.com/api/v1/items/get"
        request_body = json.dumps({'shopid': shop_id, 'partner_id': int(SHOPEE_APP_ID), 'timestamp': int(
            time.time()), 'pagination_offset': 0, 'pagination_entries_per_page': 100})
        signature = hmac.new(
            key=bytes(SHOPEE_APP_KEY, encoding="ascii"),
            msg=bytes(f'{endpoint}|{request_body}', encoding="ascii"),
            digestmod=hashlib.sha256).hexdigest()
        headers = {'Authorization': signature}
        response = requests.post(endpoint, headers=headers, data=request_body)

        products = []
        for item in response.json()['items']:
            item_id = item['item_id']
            endpoint = "https://partner.shopeemobile.com/api/v1/item/get"
            request_body = json.dumps({'shopid': shop_id, 'item_id': item_id, 'partner_id': int(SHOPEE_APP_ID), 'timestamp': int(
                time.time())})
            signature = hmac.new(
                key=bytes(SHOPEE_APP_KEY, encoding="ascii"),
                msg=bytes(f'{endpoint}|{request_body}', encoding="ascii"),
                digestmod=hashlib.sha256).hexdigest()
            headers = {'Authorization': signature}
            response = requests.post(
                endpoint, headers=headers, data=request_body)
            products.append(response.json()['item'])

        responseObject = {
            'status': 'success',
            'message': 'all products returned',
            'products': products
        }

        return make_response(jsonify(responseObject)), 200

    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }

        return make_response(jsonify(responseObject)), 401
Example #3
0
def lazada_category_tree():
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)
    user = User.query.get(user_id)

    if user:
        access_token = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='lazada').first().access_token
        refresh_token = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='lazada').first().refresh_token
        client = LazopClient('https://api.lazada.com.my/rest',
                             LAZADA_MARKET_KEY, LAZADA_MARKET_SECRET)
        laz_request = LazopRequest('/category/tree/get', 'GET')
        response = client.execute(laz_request)
        tree = response.body['data']
        # laz_request2 = LazopRequest('/brands/get', 'GET')
        # laz_request2.add_api_param('offset', '0')
        # laz_request2.add_api_param('limit', '1000')
        # response2 = client.execute(laz_request2)
        # brands = response2.body['data']

        responseObject = {
            'status': 'success',
            'message': 'category tree returned',
            'tree': tree,
            # 'brands': brands
        }

        return make_response(jsonify(responseObject)), 200

    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }

        return make_response(jsonify(responseObject)), 401
Example #4
0
def shopee_authorize_login():
    shop_id = request.get_json().get('shop_id')
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)

    user = User.query.get(user_id)

    if user:

        new_marketplace = Marketplace(
            user_id=user_id,
            marketplace_name="shopee",
            shop_id=shop_id,
            shop_name="",
            access_token="",
            refresh_token=""
        )

        db.session.add(new_marketplace)
        db.session.commit()
        send_new_marketplace_email(user.email, user_id, "Shopee")

        responseObject = {
            'status': 'success',
            'message': 'Marketplaces connected successfully',
            'shopee_shop_id': shop_id
        }

        return make_response(jsonify(responseObject)), 201

    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }
        return make_response(jsonify(responseObject)), 401
Example #5
0
def shopee_attributes():
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)
    user = User.query.get(user_id)

    if user:
        post_data = request.get_json()
        category_id = post_data.get('id')
        shop_id = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='shopee').first().shop_id
        endpoint = "https://partner.shopeemobile.com/api/v1/item/attributes/get"
        request_body = json.dumps({"shopid": shop_id, "partner_id": int(SHOPEE_APP_ID), "timestamp": int(
            time.time()), "category_id": category_id})
        signature = hmac.new(
            key=bytes(SHOPEE_APP_KEY, encoding="ascii"),
            msg=bytes(f'{endpoint}|{request_body}', encoding="ascii"),
            digestmod=hashlib.sha256).hexdigest()
        headers = {'Authorization': signature}
        response = requests.post(endpoint, headers=headers, data=request_body)

        responseObject = {
            'status': 'success',
            'message': 'attributes for the selected category returned',
            'attributes': response.json()['attributes']
        }

        return make_response(jsonify(responseObject)), 200
    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }

        return make_response(jsonify(responseObject)), 401
Example #6
0
def lazada_products():
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)
    user = User.query.get(user_id)

    if user:
        access_token = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='lazada').first().access_token
        refresh_token = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='lazada').first().refresh_token
        client = LazopClient('https://api.lazada.com.my/rest',
                             LAZADA_MARKET_KEY, LAZADA_MARKET_SECRET)
        laz_request = LazopRequest('/products/get', 'GET')
        laz_request.add_api_param('filter', 'live')
        laz_request.add_api_param('limit', '10')
        laz_request.add_api_param('options', '1')
        response = client.execute(laz_request, access_token)
        products = response.body['data']

        responseObject = {
            'status': 'success',
            'message': 'all products returned',
            'products': products
        }

        return make_response(jsonify(responseObject)), 200

    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }

        return make_response(jsonify(responseObject)), 401
Example #7
0
def destroy():
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)

    user = User.query.get(user_id)

    if user:
        marketplace_name = request.get_json().get('marketplace_name')
        deleted_marketplace = Marketplace.query.filter_by(
            marketplace_name=marketplace_name, user_id=user_id).first()
        db.session.delete(deleted_marketplace)
        db.session.commit()

        responseObject = {
            'status': 'success',
            'message': 'Marketplaces deleted successfully',
        }

        return make_response(jsonify(responseObject)), 201

    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }
        return make_response(jsonify(responseObject)), 401
Example #8
0
def shopee_new_product():
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)
    user = User.query.get(user_id)

    if user:
        form = request.form
        category_id = form.get('id')
        name = form.get('name')
        description = form.get('description')
        price = form.get('price')
        quantity = form.get('quantity')
        weight = form.get('package_weight')
        attribute1_id = form.get('attribute1Id')
        attribute2_id = form.get('attribute2Id')
        attribute3_id = form.get('attribute3Id')
        attribute1_value = form.get('attribute1Value')
        attribute2_value = form.get('attribute2Value')
        attribute3_value = form.get('attribute3Value')
        if attribute2_id == '':
            attributes = [
                {"attributes_id": int(attribute1_id), "value": attribute1_value}]
        elif attribute3_id == '':
            attributes = [{"attributes_id": int(attribute1_id), "value": attribute1_value}, {
                "attributes_id": int(attribute2_id), "value": attribute2_value}]
        else:
            attributes = [{"attributes_id": int(attribute1_id), "value": attribute1_value}, {
                "attributes_id": int(attribute2_id), "value": attribute2_value}, {"attributes_id": int(attribute3_id), "value": attribute3_value}]
        # grab the file
        file = request.files["image"]

        # check file size
        if len(file.read()) > (2 * 1024 * 1024):

            responseObject = {
                'status': 'fail',
                'message': "Max size allowed is 2 MB"
            }

            return make_response(jsonify(responseObject)), 400

        # check correct extension and upload if valid
        if file and allowed_file(file.filename):
            file.seek(0)
            serial_filename = f'{user_id}.{name}.{random.randint(1,100000)}.{file.filename}'
            file.filename = secure_filename(serial_filename)
            upload_image(file)

            new_image = Image(
                user_id=user_id,
                image_name=str(file.filename),
            )

            db.session.add(new_image)
            db.session.commit()

        else:

            responseObject = {
                'status': 'fail',
                'message': "Image format not supported"
            }

            return make_response(jsonify(responseObject)), 400

        shop_id = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='shopee').first().shop_id
        endpoint = "https://partner.shopeemobile.com/api/v1/item/add"
        request_body = json.dumps({"shopid": shop_id, "category_id": int(category_id), 'name': name, 'description': description, 'price': float(price), 'stock': int(quantity), 'images': [{'url': new_image.image_url}], "attributes": attributes, "logistics": [{"logistic_id": 29210, "enabled": True}], "weight": float(weight), "partner_id": int(SHOPEE_APP_ID), "timestamp": int(
            time.time())})
        signature = hmac.new(
            key=bytes(SHOPEE_APP_KEY, encoding="ascii"),
            msg=bytes(f'{endpoint}|{request_body}', encoding="ascii"),
            digestmod=hashlib.sha256).hexdigest()
        headers = {'Authorization': signature}
        response = requests.post(endpoint, headers=headers, data=request_body)
        breakpoint()

        try:
            response.json()['item_id']

        except:
            responseObject = {
                'status': 'failed',
                'message': response.json()['msg'],
            }
            return make_response(jsonify(responseObject)), 400

        else:
            send_new_product_email(user.email, user_id, name)
            responseObject = {
                'status': 'success',
                'message': response.json()['msg'],
            }
            return make_response(jsonify(responseObject)), 200

    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }

        return make_response(jsonify(responseObject)), 401
Example #9
0
def lazada_new_product():
    auth_header = request.headers.get('Authorization')
    if auth_header:
        auth_token = auth_header.split(" ")[1]
    else:
        responseObject = {
            'status': 'failed',
            'message': 'No authorization header found'
        }

        return make_response(jsonify(responseObject)), 401

    user_id = User.decode_auth_token(auth_token)
    user = User.query.get(user_id)

    if user:
        post_data = request.form
        access_token = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='lazada').first().access_token
        refresh_token = Marketplace.query.filter_by(
            user_id=user_id, marketplace_name='lazada').first().refresh_token
        payload = post_data.get('payload')
        category_id = post_data.get('id')
        name = post_data.get('name')
        description = post_data.get('description')
        color = post_data.get('color')
        brand = post_data.get('brand')
        price = post_data.get('price')
        quantity = post_data.get('quantity')
        content = post_data.get('package_content')
        height = post_data.get('package_height')
        weight = post_data.get('package_weight')
        width = post_data.get('package_width')
        length = post_data.get('package_length')

        # grab the file
        file = request.files["image"]

        # check file size
        if len(file.read()) > (2 * 1024 * 1024):

            responseObject = {
                'status': 'fail',
                'message': "Max size allowed is 2 MB"
            }

            return make_response(jsonify(responseObject)), 400

        # check correct extension and upload if valid
        if file and allowed_file(file.filename):
            file.seek(0)
            serial_filename = f'{user_id}.{name}.{random.randint(1,100000)}.{file.filename}'
            file.filename = secure_filename(serial_filename)
            upload_image(file)

            new_image = Image(
                user_id=user_id,
                image_name=str(file.filename),
            )

            db.session.add(new_image)
            db.session.commit()

        else:

            responseObject = {
                'status': 'fail',
                'message': "Image format not supported"
            }

            return make_response(jsonify(responseObject)), 400

        image = new_image.image_url

        client = LazopClient('https://api.lazada.com.my/rest',
                             LAZADA_MARKET_KEY, LAZADA_MARKET_SECRET)
        laz_request = LazopRequest('/product/create')
        laz_request.add_api_param('payload', f"<?xml version=\"1.0\" encoding=\"UTF-8\" ?> <Request>     <Product>         <PrimaryCategory>{category_id}</PrimaryCategory>         <SPUId></SPUId>         <AssociatedSku></AssociatedSku>         <Attributes>             <name>{name}</name>             <short_description>{description}</short_description>             <brand>{brand}</brand>             <model>no model</model>    <warranty_type>No Warranty</warranty_type>     </Attributes>         <Skus>             <Sku>                 <SellerSku>MarketBucket-{name}</SellerSku>                 <color_family>{color}</color_family>                 <images><image>{image}</image></images>                                  <quantity>{quantity}</quantity>                 <price>{price}</price>                 <package_length>{length}</package_length>                 <package_height>{height}</package_height>                 <package_weight>{weight}</package_weight>                 <package_width>{width}</package_width>                 <package_content>{content}</package_content>                 <tax_class>default</tax_class>                         </Sku>         </Skus>     </Product> </Request>")
        response = client.execute(laz_request, access_token)
        code = response.code

        if code == '0':
            send_new_product_email(user.email, user_id, name)
            seller_sku = response.body['data']['sku_list'][0]['seller_sku']
            request2 = LazopRequest('/images/set')
            request2.add_api_param(
                'payload', f'<Request>   <Product>     <Skus>       <Sku>         <SellerSku>{seller_sku}</SellerSku>         <Images>           <Image>{image}</Image>                   </Images>       </Sku>     </Skus>   </Product> </Request>')
            response2 = client.execute(request2, access_token)
            responseObject = {
                'status': 'success',
                'message': f'{seller_sku} was added successfully to Lazada!',
            }
            return make_response(jsonify(responseObject)), 200

        else:
            field = response.body['detail'][0]['field']
            message = response.body['detail'][0]['message']
            responseObject = {
                'status': 'failed',
                'message': f'{field}: {message}',
            }
            return make_response(jsonify(responseObject)), 400

    else:
        responseObject = {
            'status': 'failed',
            'message': 'Authentication failed'
        }

        return make_response(jsonify(responseObject)), 401