Files
sake/build/resources/main/static/js/adscript/admedia/adscript_criteo.js

118 lines
5.8 KiB
JavaScript

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
}