parent
488f533dd2
commit
aaef7e748b
@ -0,0 +1,150 @@
|
|||||||
|
var cards = {
|
||||||
|
"^3[47]\\d{1,2}(| |-)\\d{6}\\1\\d{6}$":"amex","^5[1-5]\\d{2}(| |-)(?:\\d{4}\\1){2}\\d{4}$":"mastercard",
|
||||||
|
"^4\\d{3}(| |-)(?:\\d{4}\\1){2}\\d{4}$":"visa","^6(?:011|5\\d\\d)(| |-)(?:\\d{4}\\1){2}\\d{4}$":"discover"}
|
||||||
|
|
||||||
|
var payment = {}
|
||||||
|
payment.setup = function(context,pricing){
|
||||||
|
sessionStorage.store_context = context
|
||||||
|
sessionStorage.pricing = pricing.constructor == String ? pricing: JSON.stringify(pricing)
|
||||||
|
sessionStorage.customer = JSON.stringify({info:{}})
|
||||||
|
|
||||||
|
$('.payment-amount > input').on('focusin',function(){
|
||||||
|
$('.payment-amount > .menu').slideDown('fast')
|
||||||
|
})
|
||||||
|
$('.payment-amount > input').on('focusout',function(){
|
||||||
|
$('.payment-amount > .menu').slideUp('slow')
|
||||||
|
})
|
||||||
|
|
||||||
|
payment.init(0)
|
||||||
|
// jx.dom.set.focus('amount')
|
||||||
|
var d = new Date()
|
||||||
|
$('.copyright').text(d.getFullYear())
|
||||||
|
if( $('.jxmodal').length == 0){
|
||||||
|
$('.close-dialog').hide()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
payment.init = function(index){
|
||||||
|
var p = JSON.parse(sessionStorage.pricing)
|
||||||
|
|
||||||
|
var _item = p[index]
|
||||||
|
var amount = (_item.unit_amount/100).toFixed(2)
|
||||||
|
$('.amount').val( amount)
|
||||||
|
//$('.amount-value').text(amount)
|
||||||
|
$('.currency').text(_item.currency.toUpperCase())
|
||||||
|
$('.amount').change()
|
||||||
|
sessionStorage.product = JSON.parse(sessionStorage.customer)
|
||||||
|
|
||||||
|
}
|
||||||
|
payment.validate = function(e){
|
||||||
|
var id = e.target
|
||||||
|
customer = JSON.parse(sessionStorage.customer)
|
||||||
|
|
||||||
|
$(id).removeClass('error')
|
||||||
|
var pattern = $(id).attr('data-pattern')
|
||||||
|
var field = $(id).attr('class')
|
||||||
|
var value = $(id).val().trim()
|
||||||
|
|
||||||
|
$(id).val(value)
|
||||||
|
if (customer.info[field] != null){
|
||||||
|
delete customer.info[field]
|
||||||
|
}
|
||||||
|
if (pattern == 'card'){
|
||||||
|
var r = jx.utils.patterns.visitor(jx.utils.keys(cards),function(key){
|
||||||
|
|
||||||
|
if(value.match(key)){
|
||||||
|
return cards[key]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if(r.length > 0){
|
||||||
|
//
|
||||||
|
// @TODO: Generalize this to a function call (poor programming)
|
||||||
|
customer.info[field] = value
|
||||||
|
sessionStorage.customer = JSON.stringify(customer)
|
||||||
|
var link = ([sessionStorage.store_context,'/static/img/cards/',r[0]+'.svg']).join('')
|
||||||
|
jx.dom.set.attribute('pay-icon','src',link)
|
||||||
|
return 1
|
||||||
|
}else{
|
||||||
|
|
||||||
|
jx.dom.set.attribute('pay-icon','src','')
|
||||||
|
$(id).addClass('error')
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
if(value.match(pattern)){
|
||||||
|
customer.info[field] = value
|
||||||
|
sessionStorage.customer = JSON.stringify(customer)
|
||||||
|
return 1
|
||||||
|
}else{
|
||||||
|
$(id).addClass('error')
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
payment.dialog = function(title,message,type){
|
||||||
|
ICONS = {'WARN':'fas fa-exclamation-triangle','CHECK':'fas fa-check fa-3x','PROGRESS':'fas fa-cog fa-spin'}
|
||||||
|
var uri = ([sessionStorage.store_context,'/ui/dialog']).join('')
|
||||||
|
|
||||||
|
var info = {title:title,message:message,icon:ICONS[type],type:type}
|
||||||
|
var httpclient = HttpClient.instance()
|
||||||
|
httpclient.setData( JSON.stringify(info))
|
||||||
|
httpclient.setHeader('content-type','application/json')
|
||||||
|
httpclient.post(uri,function(x){
|
||||||
|
jx.modal.show({html:x.responseText,id:'payment-dialog'})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
payment.proceed = function(){
|
||||||
|
|
||||||
|
jx.utils.patterns.visitor($('input'),function(_input){
|
||||||
|
//
|
||||||
|
// re-running validation
|
||||||
|
if ($(_input).attr('class') != 'amount'){
|
||||||
|
$(_input).keyup()
|
||||||
|
}else {
|
||||||
|
$(_input).change()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
var N = $('input').length
|
||||||
|
info = JSON.parse(sessionStorage.customer).info
|
||||||
|
var n = jx.utils.keys(info).length
|
||||||
|
if (n != N){
|
||||||
|
//
|
||||||
|
// Nothing to be done here because the user interface would have lit-up
|
||||||
|
//
|
||||||
|
;
|
||||||
|
}else{
|
||||||
|
//
|
||||||
|
// Submit the charge to be processed
|
||||||
|
//
|
||||||
|
payment.dialog('Preparing payment','Please wait ...','PROGRESS')
|
||||||
|
info.amount = info.amount * 100
|
||||||
|
$('.dialog > .message').text('Processing card, please wait ...')
|
||||||
|
var uri = ([sessionStorage.store_context,'/{{product.name|safe}}/pay']).join('/')
|
||||||
|
var http = HttpClient.instance()
|
||||||
|
http.setData(JSON.stringify(info))
|
||||||
|
http.setHeader('content-type','application/json')
|
||||||
|
http.post(uri,function(x){
|
||||||
|
|
||||||
|
if(x.status == 200){
|
||||||
|
TYPE='CHECK'
|
||||||
|
TITLE = ''
|
||||||
|
jx.utils.patterns.visitor($('input'),function(_input){
|
||||||
|
$(_input).val('')
|
||||||
|
$(_input).attr('disabled',true)
|
||||||
|
|
||||||
|
})
|
||||||
|
sessionStorage.customer = JSON.stringify({info:{}})
|
||||||
|
|
||||||
|
}else{
|
||||||
|
TITLE='.::'
|
||||||
|
TYPE='WARN'
|
||||||
|
}
|
||||||
|
$('.jxmodal')[$('.jxmodal')].remove()
|
||||||
|
payment.dialog(TITLE,x.responseText,TYPE)
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue