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
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
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
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
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
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
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
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
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