braintree embedded paypal checkout - paypal

we have a payment page on our site. We implemented it via Braintree.
The PoC is here http://petrzampach-001-site11.smarterasp.net/
The code is similar to this:
<script src="https://js.braintreegateway.com/v2/braintree.js"></script>
#using (Html.BeginForm("CreatePurchase", "Home", FormMethod.Post, new { role = "form" }))
{
<div id="paymentGate">
<div id="payment-form"></div>
</div>
<script>
braintree.setup(
"#ViewBag.BrainTreeClientToken",
"dropin", {
container: "payment-form"
});
</script>
}
So far so good. But, we dont like the pop up window when you click on the Paypal button. We would like to integrate it into our site. I asked Braintree support and they told us about v.zero. Excellent! But unfortunatelly we cannot figure this one out. No matter what we try it always opens in a pop up window.
My another PoC is here:
http://petrzampach-001-site11.smarterasp.net/home/CustomUI
The code looks like this:
<script src="https://js.braintreegateway.com/js/braintree-2.21.0.min.js"></script>
#using (Html.BeginForm("CreatePurchase", "Home", FormMethod.Post, new { role = "form", id = "payment-form" }))
{
<label for="card-number">Card Number</label>
<div id="card-number" style="border:1px solid black;height:20px;"></div>
<label for="cvv">CVV</label>
<div id="cvv" style="border:1px solid black;height:20px;"></div>
<label for="expiration-date">Expiration Date</label>
<div id="expiration-date" style="border:1px solid black;height:20px;"></div>
<div id="paypal-container"></div>
<script type="text/javascript">
braintree.setup("#ViewBag.BrainTreeClientToken", "custom", {
id: "payment-form",
hostedFields: {
number: {
selector: "#card-number"
},
cvv: {
selector: "#cvv"
},
expirationDate: {
selector: "#expiration-date"
}
},
paypal: {
container: "paypal-container",
},
onPaymentMethodReceived: function (obj) {
}
});
</script>
}
We can customize the credit card fields, but still cannot embed the Paypal login into our page.
Thank you for any advice.
Petr

Full disclosure: I work at Braintree. If you have any further questions, feel free to contact our support team.
When using v.zero, the form for accepting PayPal credentials opens within a popup. This is so customers know they are providing their credentials to PayPal in a secure, encrypted manner and not entering their credentials on a malicious site. People that pay with PayPal expect that they can verify their credentials are only being submitted to PayPal, and implementing v.zero in this way leads to higher conversion rates, which is our motivation for implementing it this way.
There is no option to allow PayPal credentials to be entered not through a popup.

Related

Send e-mail with Intel XDK

i have a problem with XDK.I'm trying to send an email but i don't know what is wrong. My code:
<script type="text/javascript">
function notEmpty(){
var myTextField = document.getElementById('Name').value,document.getElementById('Mail').value;
if(myTextField.value != ""){
intel.xdk.device.sendEmail(myTextField.value, 'mail#mail.comr', 'Contact', true, null, null)
}else{
alert("Would you please enter some text?")
}
}
</script>
...
<input class="wide-control" placeholder="Placeholder Text" type="text" id="Nome">
</div>
<div class="table-thing with-label widget uib_w_2 d-margins" data-uib="app_framework/input" data-ver="1">
<label class="narrow-control label-inline" for="Mail">Input</label>
<input class="wide-control" placeholder="Placeholder Text" type="text" id="Mail">
</div>
<a class="button widget uib_w_3 d-margins" data-uib="app_framework/button" data-ver="1">Button</a>
<button onclick="notEmpty()">Click me</button>
....
Intel XDK's SendEmail method: https://software.intel.com/en-us/node/493039
This will open the phone's native e-mail application with the parameters you provide prepopulated. For this to work, you must have the "email" options checked in the build settings for Cordova Plugin. You also need to be testing the compiled application Intel XDK provides after the build process.
This feature IS NOT observable when testing in the "emulator" or in a browser. The Javascript API needs to hook into native phone functionality to work.

Change the login form in secure social

i'm writing a play 2.3 application using secure social.
I've customize my login form:
#(loginForm: Form[(String,String)], errorMsg: Option[String] = None)(implicit request: RequestHeader, lang: Lang, env:securesocial.core.RuntimeEnvironment[_])
#import securesocial.core.providers.UsernamePasswordProvider.UsernamePassword
#main(Messages("securesocial.login.title"))(null) {
<div class="login">
<div class="page-header">
<h1>#Messages("securesocial.login.title")</h1>
</div>
#errorMsg.map { msg =>
<div class="alert alert-danger">
#Messages(msg)
</div>
}
#request.flash.get("success").map { msg =>
<div class="alert alert-info">
#msg
</div>
}
#request.flash.get("error").map { msg =>
<div class="alert alert-danger">
#msg
</div>
}
#defining( env.providers.values.filter( _.id != UsernamePassword) ) { externalProviders =>
#env.providers.get(UsernamePassword).map { up =>
<div class="clearfix">
#if( externalProviders.size > 0 ) {
<p>#Messages("securesocial.login.useEmailAndPassword")</p>
} else {
<p>#Messages("securesocial.login.useEmailAndPasswordOnly")</p>
}
#securesocial.views.html.provider("userpass", Some(loginForm))
</div>
}
}
</div>
}
But when the view is display i see "Did you forget your password? If you don't have an account with us yet you can sign up here".
But i don't want it, in my application the user get the credentials from the administrator, he can't signup and change the password. how can i do that?
Furthemore i don't want to import all the secure social routes, but only the routes needed for the login action.
If you look into the source of the securesocial.views.html.provider template which is imported in your customized login page you will see that password recovery information is defined there:
<div class="clearfix">
<p>#Messages("securesocial.login.forgotPassword") </p>
</div>
All you need to do is to customize this part of a view as well. Create an another template based on the original SecureSocial view and remove parts that are not required for you.
If you want to allow only login and logout actions simply omit other route definitions and don't put them in your route file. You need only:
GET /login securesocial.controllers.LoginPage.login
GET /logout securesocial.controllers.LoginPage.logout
and providers entry points:
GET /authenticate/:provider securesocial.controllers.ProviderController.authenticate(provider)
POST /authenticate/:provider securesocial.controllers.ProviderController.authenticateByPost(provider)
GET /not-authorized securesocial.controllers.ProviderController.notAuthorized
If you want to allow your user to change a password after login you should consider using build-in actions:
GET /password securesocial.controllers.PasswordChange.page
POST /password securesocial.controllers.PasswordChange.handlePasswordChange

Backbone.js and form input blur

I am pretty much a backbonejs newbie. I am submitting form data to mysql.
I have one special input box where the use types in his or her email address as a user name.
As it stands, I can check all my input fields (user, pass, address, phone, etc) client
side, use an event on a button, load the model, use PHP to put the data into the db.
This works just fine and is tested. The backend validation works fine and feeds to
the browser when necessary.
Now I want to check the loginname field against the back end BEFORE writing the record (I know I can trap this on the back end in the final submit but want to do it here). If the user already has an account with the same email address I want to catch that client side. The issue is I can't seem to find a way to capture this blur (or onblur or change whatever I use) when I move off the loginname field so I can (in the render of the view is all I can figure) go off, use PHP again and send back a flag "new" or "existing"
No errors in Google developer tool
define([
'jquery',
'underscore',
'backbone',
'lib/jquery-migrate-1.2.1',
'models/RegisterModel',
'text!templates/RegisterTemplate.html',
'lib/jquery.maskedinput-1.0',
'lib/bootstrap-acknowledgeinput.min',
'lib/jqBootstrapValidation'
], function($, _, Backbone, jQueryMigrate, RegisterModel, RegisterTemplate,
MaskedInput,Ack, jqAck){
var RegisterView = Backbone.View.extend({
el: $("#container"),
events: {
'click .btn-primary': 'saveClient',
'focusout .loginname': 'usercheck'
},
usercheck: function() { //** not working
console.log("usercheck detected");
alert("Alerts suck.");
},
render: function(){
//Since our template has dynamic variables in it, we need to compile it
var compiledTemplate = _.template( RegisterTemplate, this.model );
this.$el.html(compiledTemplate); //Replaces EVERYTHING inside the <div
id="container">
this.$('#phone').mask('(999) 999-9999');
this.$('#phone2').mask('(999) 999-9999');
this.$('#zip').mask('99999');
$(function () { //** working
$("input,select,textarea").not("[type=submit]").jqBootstrapValidation();
});
$('.loginname').live("click", function () { //** not working
alert('AHHHHHH!');
});
$().acknowledgeinput({ // ** this works fine
success_color: '#00FF00',
danger_color: '#FF0000',
update_on: 'keyup'
});
** I looked in Chrome at the blur event for the input with name/id = loginname
HTML I did look at the blur for the elmement with id (Chrome says it's input#loginname)
does have the blur event attached to it. I changed my code a bit, but still it doesn't seem to trigger. I never know with backbone if it's just something simple or one of those
"this and scope" issues :)
<div id="container" class="row-fluid">
<div class="span6">
<div class="requiredNotice"><i class="icon-warning-sign icon-red"></i> Can't
be blank!</div>
<h3>New Client Registration:</h3>
<form class="form-horizontal" method="POST">
<fieldset>
<div class="control-group">
<label class="control-label required" for="loginname">UserID (Email
</label>
<div class="controls">
<div class="input-prepend" data-role="acknowledge-input">
<div data-role="acknowledgement"><i></i></div>
<input type="email" data-type="email" required="required"
placeholder="Use email account"
maxlength="254" name="loginname" id="loginname"
class="inputclass pageRequired
input-xlarge" />
</div>
<span class="loginname_error label label-info hide"></span>
</div>
</div> ... etc
events: {
'click .btn-primary' : 'saveClient',
'focusout #input.loginname' : 'userCheck'
// "blur input.loginname" : "userCheck"
},
userCheck: function(e) {
console.log("usercheck detected");
alert("Alerts suck.");
},
.live is not needed here, there is nothing wrong with your event hash as well. There could be some thing wrong with template. I did just isolate the input field and focusout event in this jsfiddle it's working fine.
<script type="text/template" id="formtemplate">
<form>
<input type="text" class="loginname" value="" placeholder="enter login"/>
</form>
</script>
...
var View = Backbone.View.extend({
events:{
'focusout .loginname':'checkUser'
},
render:function(){
this.$el.html($('#formtemplate').html());
},
checkUser:function(e){
alert('checkUser'); //works well
}
});
var view = new View();
view.render();
view.$el.appendTo('body');
Okay - you said to tie this to blur, and this format finally worked!
'blur input#loginname' : 'userCheck'
events: {
'click .btn-primary' : 'saveClient',
'blur input#loginname' : 'userCheck'
},
userCheck: function(e) {
console.log("usercheck detected");
alert("Alerts suck.");
},
The console is not showing up, but at least I'm trapping the blur now! Thanks eveyone.

Embedded Payment return url shown in iframe

I'm trying to implement adaptive payments as embedded payment with lightbox.
It works fine until a user makes a payment, but after user completes the payment
page specified by return url gets loaded within the iframe.
I'm expecting it to be loaded in the window NOT in the iframe.
Following is the code that I have. Am I missing something?
Environment
Java(play framework)
PayPal_Platform_Java_SDK_N
Expected Page Transfer Scenario
PageA - ("pay with paypal" button click)
→ paypal dialog - ("close" button click)
→ PageB
PageA.html
<form action="https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay" target="PPDGFrame">
<dl>
<dt></dt>
<dd>
<input id="type" type="hidden" name="expType" value="light">
<input id="paykey" type="hidden" name="paykey" value="AP-KEY">
<input type="submit" id="paypalSubmitBtn" value="Pay with paypal" />
</dd>
</dl>
</form>
<script type="text/javascript">
var dgFlow;
$(function(){
dgFlow = new PAYPAL.apps.DGFlow({ trigger: 'paypalSubmitBtn' });
});
</script>
PageB.html
<p>Thank you for your payment!</p>
<script type="text/javascript">
function handleEmbeddedFlow() {
if (top && top.opener && top.opener.top) {
top.opener.top.dgFlow.closeFlow();
}
else{
top.dgFlow.closeFlow();
}
top.close();
}
jQuery.event.add(window, "load", function(){
alert("window.load");
handleEmbeddedFlow();
});
</script>
I also noticed that dgFlow can not be resolved in else case's top.dgFlow.closeFlow(); in PageB.html.
You can try to detect if the page is running in an iframe, and if so redirect to the page directly.
How to detect:
How to identify if a webpage is being loaded inside an iframe or directly into the browser window?
How to redirect:
Redirect the parent page from IFrame

Load page to Modal Window from form with jQuery

I´m working on a website with a purchase process. I have a form generated by some PHP that looks like this:
<form name="order_form" action="'.$thePayreadApi->get_server_url().'" method="post" id="payer-form">
'.$thePayreadApi->generate_form().'
<input type="submit" value="Klicka för betalning" />
</form>';
When the form is submitted it will go to a new page (located on another server) where the purchase is performed.
Basically what I want is the form to be submitted through AJAX and then load the new page in a Modal Window. I use jQuery throughout the website so I´d like a solution based on that lib.
I´ve found these sites that might be a hint:
http://pixeline.be/blog/2008/javascript-loading-external-urls-in-jqmodal-jquery-plugin/
http://dev.iceburg.net/jquery/jqModal/
Any help is really appreciated!
I haven't tried this exactly, but the theory is what I would go for:
$("form[name='order_form']").submit(function() {
//Validate in here
var validate = false;
if($("input[form='element1']").val()!="") {
validate = true;
}
if(validate) {
this.submit();
} else {
return false;
}
});
<form action="shopping.php" target="targetIframe" method="post">
<input type="submit" value="Click Me" />
</form>
<iframe name="targetIframe" src=""></iframe>