Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
onestartup-shop
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Angel Martin
onestartup-shop
Commits
70a8968d
Commit
70a8968d
authored
Oct 16, 2018
by
Francisco Salazar
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of bunkrbit.com:bsabbath/onestartup-shop
parents
550b0702
1bc050dd
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
363 additions
and
15 deletions
+363
-15
plazos.js
src/assets/plazos.js
+251
-0
CartController.php
src/controllers/CartController.php
+46
-13
routes.php
src/routes.php
+1
-0
finish.blade.php
src/views/public/cart/finish.blade.php
+8
-2
fields-payment-installments.blade.php
src/views/public/forms/fields-payment-installments.blade.php
+45
-0
fields-payment.blade.php
src/views/public/forms/fields-payment.blade.php
+12
-0
No files found.
src/assets/plazos.js
0 → 100644
View file @
70a8968d
//Mercadopago.setPublishableKey('TEST-adec97b5-9592-44da-8232-c5d29d803e55');
Mercadopago
.
setPublishableKey
(
'APP_USR-65a0d217-9d89-43ea-afc0-7d8df2eb49f6'
);
$
(
"#form-pagar-mp"
).
submit
(
function
(
event
)
{
$
(
'.btn-submit'
).
attr
(
'disabled'
,
'disabled'
);
swal
({
text
:
"Espera por favor, estamos enviando tu pago..."
,
imageUrl
:
"/assets/img/ripple.gif"
,
showConfirmButton
:
false
,
allowEscapeKey
:
false
,
allowOutsideClick
:
false
,
closeOnConfirm
:
false
,
closeOnCancel
:
false
});
var
$form
=
$
(
this
);
Mercadopago
.
createToken
(
$form
,
mpResponseHandler
);
event
.
preventDefault
();
return
false
;
});
var
mpResponseHandler
=
function
(
status
,
response
)
{
var
$form
=
$
(
'#form-pagar-mp'
);
if
(
response
.
error
)
{
alert
(
"ocurrió un error: "
+
JSON
.
stringify
(
response
));
console
.
log
(
response
);
swal
.
close
();
var
error
=
'<div class="alert alert-dismissable alert-danger">'
+
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>'
+
'Haz ingresado valores invalidos: <br>Revisa los datos capturados o intenta con otra tarjeta'
+
'</div>'
;
$
(
"#errors-card"
).
html
(
error
);
$
(
'.btn-submit'
).
removeAttr
(
'disabled'
);
}
else
{
var
card_token_id
=
response
.
id
;
$form
.
append
(
$
(
'<input type="hidden" id="card_token_id" name="card_token_id"/>'
).
val
(
card_token_id
));
//alert("card_token_id: "+card_token_id);
$
(
"#errors-card"
).
html
(
""
);
$form
.
get
(
0
).
submit
();
}
}
$
(
"#plazos"
).
change
(
function
(){
if
(
this
.
checked
)
{
$
(
"#installments_info"
).
show
();
document
.
querySelector
(
'#issuer'
).
required
=
true
;
document
.
querySelector
(
'#installments'
).
required
=
true
;
document
.
getElementById
(
"issuer"
).
selectedIndex
=
-
1
;
document
.
getElementById
(
"installments"
).
selectedIndex
=
-
1
;
}
else
{
$
(
"#installments_info"
).
hide
();
document
.
querySelector
(
'#issuer'
).
required
=
false
;
document
.
querySelector
(
'#installments'
).
required
=
false
;
}
});
function
getBin
()
{
var
ccNumber
=
document
.
querySelector
(
'input[data-checkout="cardNumber"]'
);
return
ccNumber
.
value
.
replace
(
/
[
.-
]
/g
,
''
).
slice
(
0
,
6
);
}
function
clearOptions
()
{
var
bin
=
getBin
();
if
(
bin
.
length
==
0
)
{
document
.
querySelector
(
"#issuer"
).
style
.
display
=
'none'
;
document
.
querySelector
(
"#issuer"
).
innerHTML
=
""
;
var
selectorInstallments
=
document
.
querySelector
(
"#installments"
),
fragment
=
document
.
createDocumentFragment
(),
option
=
new
Option
(
"Ejige una opción..."
,
'-1'
);
selectorInstallments
.
options
.
length
=
0
;
fragment
.
appendChild
(
option
);
selectorInstallments
.
appendChild
(
fragment
);
selectorInstallments
.
setAttribute
(
'disabled'
,
'disabled'
);
}
}
function
guessingPaymentMethod
(
event
)
{
var
bin
=
getBin
(),
amount
=
document
.
querySelector
(
'#amount'
).
value
;
if
(
event
.
type
==
"keyup"
)
{
if
(
bin
.
length
==
6
)
{
Mercadopago
.
getPaymentMethod
({
"bin"
:
bin
},
setPaymentMethodInfo
);
}
}
else
{
setTimeout
(
function
()
{
if
(
bin
.
length
>=
6
)
{
Mercadopago
.
getPaymentMethod
({
"bin"
:
bin
},
setPaymentMethodInfo
);
}
},
100
);
}
};
function
setPaymentMethodInfo
(
status
,
response
)
{
if
(
status
==
200
)
{
console
.
log
(
'responsisss'
);
console
.
log
(
response
);
var
form
=
document
.
querySelector
(
'#form-pagar-mp'
);
if
(
document
.
querySelector
(
"input[name=paymentMethodId]"
)
==
null
)
{
var
paymentMethod
=
document
.
createElement
(
'input'
);
paymentMethod
.
setAttribute
(
'name'
,
"paymentMethodId"
);
paymentMethod
.
setAttribute
(
'type'
,
"hidden"
);
paymentMethod
.
setAttribute
(
'value'
,
response
[
0
].
id
);
form
.
appendChild
(
paymentMethod
);
}
else
{
document
.
querySelector
(
"input[name=paymentMethodId]"
).
value
=
response
[
0
].
id
;
}
if
(
response
[
0
].
payment_type_id
==
"credit_card"
){
document
.
getElementById
(
"plazos"
).
disabled
=
false
;
}
else
{
document
.
getElementById
(
"plazos"
).
disabled
=
true
;
}
// check if the security code (ex: Tarshop) is required
var
cardConfiguration
=
response
[
0
].
settings
,
bin
=
getBin
(),
amount
=
document
.
querySelector
(
'#amount'
).
value
;
for
(
var
index
=
0
;
index
<
cardConfiguration
.
length
;
index
++
)
{
if
(
bin
.
match
(
cardConfiguration
[
index
].
bin
.
pattern
)
!=
null
&&
cardConfiguration
[
index
].
security_code
.
length
==
0
)
{
/*
* In this case you do not need the Security code. You can hide the input.
*/
}
else
{
/*
* In this case you NEED the Security code. You MUST show the input.
*/
}
}
Mercadopago
.
getInstallments
({
"bin"
:
bin
,
"amount"
:
amount
},
setInstallmentInfo
);
// check if the issuer is necessary to pay
var
issuerMandatory
=
false
,
additionalInfo
=
response
[
0
].
additional_info_needed
;
for
(
var
i
=
0
;
i
<
additionalInfo
.
length
;
i
++
)
{
if
(
additionalInfo
[
i
]
==
"issuer_id"
)
{
issuerMandatory
=
true
;
}
};
if
(
issuerMandatory
)
{
Mercadopago
.
getIssuers
(
response
[
0
].
id
,
showCardIssuers
);
addEvent
(
document
.
querySelector
(
'#issuer'
),
'change'
,
setInstallmentsByIssuerId
);
}
else
{
document
.
querySelector
(
"#issuer"
).
style
.
display
=
'none'
;
document
.
querySelector
(
"#issuer"
).
options
.
length
=
0
;
}
}
};
function
showCardIssuers
(
status
,
issuers
)
{
var
issuersSelector
=
document
.
querySelector
(
"#issuer"
),
fragment
=
document
.
createDocumentFragment
();
issuersSelector
.
options
.
length
=
0
;
var
option
=
new
Option
(
"Elije una opción..."
,
'-1'
);
fragment
.
appendChild
(
option
);
for
(
var
i
=
0
;
i
<
issuers
.
length
;
i
++
)
{
if
(
issuers
[
i
].
name
!=
"default"
)
{
option
=
new
Option
(
issuers
[
i
].
name
,
issuers
[
i
].
id
);
}
else
{
option
=
new
Option
(
"Otro"
,
issuers
[
i
].
id
);
}
fragment
.
appendChild
(
option
);
}
issuersSelector
.
appendChild
(
fragment
);
issuersSelector
.
removeAttribute
(
'disabled'
);
document
.
querySelector
(
"#issuer"
).
removeAttribute
(
'style'
);
};
function
setInstallmentsByIssuerId
(
status
,
response
)
{
var
issuerId
=
document
.
querySelector
(
'#issuer'
).
value
,
amount
=
document
.
querySelector
(
'#amount'
).
value
;
if
(
issuerId
===
'-1'
)
{
return
;
}
Mercadopago
.
getInstallments
({
"bin"
:
getBin
(),
"amount"
:
amount
,
"issuer_id"
:
issuerId
},
setInstallmentInfo
);
};
function
setInstallmentInfo
(
status
,
response
)
{
var
selectorInstallments
=
document
.
querySelector
(
"#installments"
),
fragment
=
document
.
createDocumentFragment
();
selectorInstallments
.
options
.
length
=
0
;
if
(
response
.
length
>
0
)
{
var
option
=
new
Option
(
"Elije una opción..."
,
'-1'
),
payerCosts
=
response
[
0
].
payer_costs
;
fragment
.
appendChild
(
option
);
for
(
var
i
=
0
;
i
<
payerCosts
.
length
;
i
++
)
{
option
=
new
Option
(
payerCosts
[
i
].
recommended_message
||
payerCosts
[
i
].
installments
,
payerCosts
[
i
].
installments
);
fragment
.
appendChild
(
option
);
}
selectorInstallments
.
appendChild
(
fragment
);
selectorInstallments
.
removeAttribute
(
'disabled'
);
}
};
function
cardsHandler
()
{
clearOptions
();
var
cardSelector
=
document
.
querySelector
(
"#cardId"
),
amount
=
document
.
querySelector
(
'#amount'
).
value
;
if
(
cardSelector
&&
cardSelector
[
cardSelector
.
options
.
selectedIndex
].
value
!=
"-1"
)
{
var
_bin
=
cardSelector
[
cardSelector
.
options
.
selectedIndex
].
getAttribute
(
"first_six_digits"
);
Mercadopago
.
getPaymentMethod
({
"bin"
:
_bin
},
setPaymentMethodInfo
);
}
}
function
addEvent
(
el
,
eventName
,
handler
){
if
(
el
.
addEventListener
)
{
el
.
addEventListener
(
eventName
,
handler
);
}
else
{
el
.
attachEvent
(
'on'
+
eventName
,
function
(){
handler
.
call
(
el
);
});
}
};
addEvent
(
document
.
querySelector
(
'input[data-checkout="cardNumber"]'
),
'keyup'
,
guessingPaymentMethod
);
addEvent
(
document
.
querySelector
(
'input[data-checkout="cardNumber"]'
),
'keyup'
,
clearOptions
);
addEvent
(
document
.
querySelector
(
'input[data-checkout="cardNumber"]'
),
'change'
,
guessingPaymentMethod
);
cardsHandler
();
\ No newline at end of file
src/controllers/CartController.php
View file @
70a8968d
...
...
@@ -186,7 +186,7 @@ public function shipping()
->
with
(
'shipping'
,
$shipping
);
}
public
function
storeClient
(
Clien
t
$request
)
public
function
storeClient
(
Reques
t
$request
)
{
$client
=
new
Client
();
$addres
=
new
Addres
();
...
...
@@ -303,8 +303,20 @@ public function shipping()
}
public
function
paymentInstallments
(
Request
$request
){
return
$request
;
}
public
function
payment
(
Request
$request
)
{
{
$plazo
=
1
;
$banco
=
''
;
if
(
isset
(
$request
->
plazos
)){
if
(
$request
->
installments
!=
-
1
&&
$request
->
issuer
!=
-
1
){
$plazo
=
$request
->
installments
;
$banco
=
$request
->
issuer
;
}
}
if
(
!
\Session
::
has
(
'client'
))
{
return
redirect
()
->
route
(
'cart.shipping'
);
...
...
@@ -351,19 +363,40 @@ public function shipping()
$detail
=
$detail
.
''
.
$cupon
;
$mp
=
new
MP
(
env
(
'AC_MERCADO_PAGO'
));
$payment_data
=
array
(
"transaction_amount"
=>
(
$this
->
total
()
+
$costo_envio
)
-
$descuento
,
"token"
=>
$request
->
card_token_id
,
"description"
=>
$detail
,
"installments"
=>
1
,
"payment_method_id"
=>
$request
->
paymentMethodId
,
"payer"
=>
array
(
"email"
=>
$client
->
email
,
"first_name"
=>
$client
->
name
,
)
);
$payment_data
=
array
();
if
(
$banco
!=
''
){
$payment_data
=
array
(
"transaction_amount"
=>
(
$this
->
total
()
+
$costo_envio
)
-
$descuento
,
"token"
=>
$request
->
card_token_id
,
"description"
=>
$detail
,
"installments"
=>
(
int
)
$plazo
,
"issuer_id"
=>
$banco
,
"payment_method_id"
=>
$request
->
paymentMethodId
,
"payer"
=>
array
(
"email"
=>
$client
->
email
,
"first_name"
=>
$client
->
name
,
)
);
}
else
{
$payment_data
=
array
(
"transaction_amount"
=>
(
$this
->
total
()
+
$costo_envio
)
-
$descuento
,
"token"
=>
$request
->
card_token_id
,
"description"
=>
$detail
,
"installments"
=>
(
int
)
$plazo
,
"payment_method_id"
=>
$request
->
paymentMethodId
,
"payer"
=>
array
(
"email"
=>
$client
->
email
,
"first_name"
=>
$client
->
name
,
)
);
}
$payment
=
$mp
->
post
(
"/v1/payments"
,
$payment_data
);
$sale
->
payment_type
=
'Tarjeta'
;
if
(
$payment
[
'response'
][
'status'
]
==
'approved'
)
{
...
...
src/routes.php
View file @
70a8968d
...
...
@@ -138,6 +138,7 @@ Route::group(['middleware' => ['web']], function(){
Route
::
post
(
'cart/store/client'
,
'Onestartup\Shop\Controller\CartController@storeClient'
)
->
name
(
'cart.store.client'
);
Route
::
post
(
'cart/payment'
,
'Onestartup\Shop\Controller\CartController@payment'
)
->
name
(
'cart.payment'
);
Route
::
post
(
'cart/payment/installments'
,
'Onestartup\Shop\Controller\CartController@paymentInstallments'
)
->
name
(
'cart.payment-installments'
);
Route
::
post
(
'cart/paymentCash'
,
'Onestartup\Shop\Controller\CartController@paymentCash'
)
->
name
(
'cart.paymentCash'
);
Route
::
post
(
'cart/acordar'
,
'Onestartup\Shop\Controller\CartController@acordar'
)
->
name
(
'cart.acordar'
);
...
...
src/views/public/cart/finish.blade.php
View file @
70a8968d
...
...
@@ -70,9 +70,14 @@ setlocale(LC_MONETARY, 'en_US');
<br>
<br>
@include('shop-public::forms.form-acordar')
{{-- @include('shop-public::forms.form-acordar') --}}
<br>
<br>
<br>
plazos
{{-- @include('shop-public::forms.fields-payment-installments') --}}
</section>
...
...
@@ -80,7 +85,8 @@ setlocale(LC_MONETARY, 'en_US');
@endsection
@section('scripts_extra')
<script type="
text
/
javascript
" src="
{{
asset
(
'vendor/onestartup/shop/mp.js'
)}}
"></script>
<script type="
text
/
javascript
" src="
{{
asset
(
'vendor/onestartup/shop/plazos.js'
)}}
"></script>
@endsection
...
...
src/views/public/forms/fields-payment-installments.blade.php
0 → 100644
View file @
70a8968d
<form
action=
"{{route('cart.payment-installments')}}"
method=
"POST"
id=
"form-pagar-mp2"
>
{{ csrf_field() }}
<p>
Número de tarjeta
</p>
<input
type=
"text"
id=
"cardNumber2"
data-checkout=
"cardNumber2"
placeholder=
"4509 9535 6623 3704"
size=
"16"
name=
"number2"
required=
"required"
class=
"form-control"
min=
"16"
max=
"16"
/>
<p>
Nombre del titular
</p>
<input
type=
"text"
size=
"20"
name=
"name2"
data-checkout=
"cardholderName2"
placeholder=
"Ej. Roberto Carlos"
required=
"required"
class=
"form-control"
/>
<p>
Fecha de expiración
</p>
<input
type=
"text"
size=
"2"
name=
"month2"
data-checkout=
"cardExpirationMonth2"
placeholder=
"Ej. 09"
required=
"required"
class=
"form-control"
align=
"right"
/>
<input
type=
"text"
size=
"4"
name=
"year2"
data-checkout=
"cardExpirationYear2"
placeholder=
"Ej. 2018"
required=
"required"
class=
"form-control"
align=
"left"
/>
<p>
Código de seguridad
</p>
<input
class=
"form-white"
type=
"text"
size=
"4"
name=
"cvc2"
data-checkout=
"securityCode2"
placeholder=
"Ej. 543"
required=
"required"
class=
"form-control"
/>
<input
name=
"paymentMethodId2"
type=
"hidden"
>
<input
type=
"text"
id=
"amount"
name=
"amount"
value=
"{{ $sale->home_delivery ? ($total + $addres->shipping_price->cost) : $total }}"
/>
<br>
<label
for=
"issuer"
>
Issuer:
</label>
<select
id=
"issuer"
name=
"issuer"
></select><br>
<label
for=
"installments"
>
Installments:
</label>
<select
id=
"installments"
name=
"installments"
></select><br>
<br>
<div>
<label>
Si cuentas con un código de promocion introducelo aquí
</label><br>
<input
type=
"text"
name=
"coupon"
class=
"coupon"
placeholder=
"Codigo de promoción"
data-total=
"{{$sale->id}}"
>
<span
class=
"reponse_coupon"
></span>
<br>
</div>
<br>
<button>
Pagar {{ $sale->home_delivery ? money_format('%(#10n', ($total + $addres->shipping_price->cost)) : money_format('%(#10n', $total ) }}
<span
class=
"amount_discount"
></span>
</button>
</form>
\ No newline at end of file
src/views/public/forms/fields-payment.blade.php
View file @
70a8968d
...
...
@@ -18,6 +18,18 @@
<input
class=
"form-white"
type=
"text"
size=
"4"
name=
"cvc"
data-checkout=
"securityCode"
placeholder=
"Ej. 543"
required=
"required"
class=
"form-control"
/>
<input
name=
"paymentMethodId"
type=
"hidden"
>
<input
type=
"text"
id=
"amount"
name=
"amount"
value=
"{{ $sale->home_delivery ? ($total + $addres->shipping_price->cost) : $total }}"
/>
<br>
Pagar en cuotas(Solo tarjetas de credito Bancomer y Banamex):
<input
type=
"checkbox"
id=
"plazos"
name=
"plazos"
disabled
><br>
<div
style=
"display:none;"
id=
"installments_info"
>
<label
for=
"issuer"
>
Banco:
</label>
<select
id=
"issuer"
name=
"issuer"
></select><br>
<label
for=
"installments"
>
Plazos:
</label>
<select
id=
"installments"
name=
"installments"
></select><br>
</div>
<br>
<div>
<label>
Si cuentas con un código de promocion introducelo aquí
</label><br>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment