function criteo(list, url) { if(fn_is_empty(list)){ return false; } /* * Criteo OneTag를 활성화하려면 로더 스크립트(Loader script)가 필요합니다. * 아래 스크립트를 사이트의 '헤드(head)' 부분에 위치시켜 모든 페이지에 포함되도록 해야, 동시에 로딩되는 다른 스크립트로 인해 지연이 발생하지 않습니다. * 페이지에서 한번만 트리거되면 되고, 단일 페이지에서 여러차례 트리거되어도 상관없습니다. * */ const commonHeaderAt = adScriptCommonHeaderAt(list); if(commonHeaderAt){ const adMediaId = commonHeaderAt.adMediaId; let criteoScript = document.createElement('script'); criteoScript.type ='text/javascript' criteoScript.async = true; criteoScript.src = `//dynamic.criteo.com/js/ld/ld.js?a=${adMediaId}`; document.head.appendChild(criteoScript); } //상품상세 페이지 if(url.includes(selectGoodsDtl)){ //# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용 const addCartEventAt = adScriptAddCartEventAt(list); if(addCartEventAt){ addCartStorage(addCartEventAt) } }//상품 상세 END //주문 완료 페이지 if(url.includes(selectOrdrCompt)){ //# 주문완료 페이지가 로드되면 아래 코드 실행. const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list) if(purchsCompleteFormAt){ let purchsComplateFormScript = document.createElement('script'); let adMediaId = purchsCompleteFormAt.adMediaId // 상품정보 배열 let productDataArray = []; const adscriptVal = $('#adscript').val() const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('')); const adscriptParse = JSON.parse(decode); let finalOrderNo = adscriptParse.total.ordrInnb const orderInfo = adscriptParse.order const email = orderInfo.ordrrEmail.trim().replaceAll(' ','').toLowerCase() for(let obj of adscriptParse.goodsList){ let productData = { id: obj.goodsInnb.toString(), price: parseInt(obj.applyDscntAmt)/obj.ordrQy, quantity: obj.ordrQy }; // 배열에 추가 productDataArray.push(productData); } //우편번호 let zipCode = ''; for(let obj of adscriptParse.shippingList){ if(!fn_is_empty(obj.dlvylcZip)){ zipCode = obj.dlvylcZip } } purchsComplateFormScript.innerHTML= ` window.criteo_q = window.criteo_q || []; var deviceType = /iPad/.test(navigator.userAgent) ? "t" : /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/.test(navigator.userAgent) ? "m" : "d"; window.criteo_q.push( { event: "setAccount", account: ${adMediaId}}, // To Do 1. 현재 유저의 이메일 주소(공백 제거 및 소문자로 변환 후) 전달. 유저의 이메일을 알수 없는 상황이면 빈 문자열로 전달 { event: "setEmail", email: "${email}", hash_method: "sha256" }, { event: "setEmail", email: "${email}", hash_method: "md5" }, // To Do 2. 현재 유저의 저장된 배송지 우편번호. 유저의 배송지 우편번호를 알수 없는 상황이면 빈 문자열로 전달 { event: "setZipcode", zipcode: "${zipCode}" }, { event: "setSiteType", type: deviceType}, // To Do 3. 확인 또는 주문 번호를 전달. 확인 또는 주문 번호가 없을 경우, Math.floor(Math.random()*99999999999)와 같이 랜덤한 숫자를 만들어 전달 { event: "trackTransaction", id: ${finalOrderNo} , item: ${JSON.stringify(productDataArray)} // 상품정보 // To Do 4. 현재 유저가 추가한 상품의 정보(상품 ID, 상품 단가, 추가한 수량)를 아래 객체 포멧으로 전달 // 상품 ID는 태그에서 전달되는 상품 ID와 피드에서 전달 주신 상품 ID가 매칭이 되어야 함 // 상품 단가는 유저가 선택한 상품의 단가로 전달(옵션 추가 가격 및 할인 가격 포함). 통화 기호 및 천단위 구분자는 제외 // 수량은 유저가 선택한 값으로 전달 // Tip 1. 복잡한 추가 구성 상품 및 옵션으로 인해 제대로된 상품 단가 및 수량 전달이 어려운 경우, 최종 가격으로 전달 후 수량은 1로 전달 해주셔도 됩니다. // Tip 2. 크리테오는 이 세일즈 태그에서 전달 주는 상품 단가와 수량을 곱하기하여 매출을 리포팅 하오니, 최대한 정확하게 전달이 중요합니다. //{id: "상품번호", price: 옵션주문단가, quantity: 옵션주문수량 } // 장바구니에 추가 된 각 상품에 대한 새 객체 추가. 새 객체를 추가하실때, 객체 사이를 쉼표(,)로 구분 } ); `; document.head.appendChild(purchsComplateFormScript); } }//주문 완료 페이지 END }