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
b9083438
Commit
b9083438
authored
Oct 02, 2018
by
Angel MAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test payments
parent
5063cfcf
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
362 additions
and
14 deletions
+362
-14
plazos.js
src/assets/plazos.js
+251
-0
CartController.php
src/controllers/CartController.php
+45
-12
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 @
b9083438
//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 @
b9083438
...
...
@@ -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 @
b9083438
...
...
@@ -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 @
b9083438
...
...
@@ -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 @
b9083438
<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 @
b9083438
...
...
@@ -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