PayPal Checkout (Orders v2) auto fill billing address - paypal

I am creating a PayPal Checkout button, is there any way to auto fill the billing address in the Debit or Credit Card form?
see screenshot
My current code:
paypal.Buttons({
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '1'
}
}],
});
}
}).render('#paypal-button-container');

The way to do this used to involve a payer object, and still works:
paypal.Buttons({
enableStandardCardFields: true,
createOrder: function(data, actions) {
return actions.order.create({
intent: 'CAPTURE',
payer: {
name: {
given_name: "Firstname",
surname: "Lastname"
},
address: {
address_line_1: '123 ABC Street',
address_line_2: 'Apt 2',
admin_area_2: 'San Jose',
admin_area_1: 'CA',
postal_code: '95121',
country_code: 'US'
},
email_address: "customer#domain.com",
phone: {
phone_type: "MOBILE",
phone_number: {
national_number: "14082508100"
}
}
},
purchase_units: [
{
amount: {
value: '15.00',
currency_code: 'USD'
},
shipping: {
address: {
address_line_1: '2211 N First Street',
address_line_2: 'Building 17',
admin_area_2: 'San Jose',
admin_area_1: 'CA',
postal_code: '95131',
country_code: 'US'
}
},
}
]
});
}
}).render("body");
That payer parameter of the v2/checkout/orders API has been deprecated recently, though; seems the replacements will be in payment_source.paypal

Related

PayPal Debit or Credit Card not render when empty value is provided

I am doing an integration of PayPal but i do have an issue: in the code below, if the $("#DonorEmailID").val() is empty, the form is not rendered anymore
paypal.Buttons({
style: {
layout: 'vertical',
shape: 'rect',
height: 36
},
createOrder: function (data, actions) {
return actions.order.create({
//https://developer.paypal.com/docs/checkout/integration-features/standard-card-fields/
payer: {
email_address: $("#DonorEmailID").val(),
phone: {
phone_type: "MOBILE",
phone_number: {
national_number: "14082508100"
}
}
},
application_context: {
shipping_preference: 'NO_SHIPPING'
},
purchase_units: [{
description: getPurchaseDescription(),
amount: {
value: $("#Amount").val()
}
}]
});
},
Demo video: https://www.screencast.com/t/xdENMuUbcbWu
Is there any way to add the email_address property conditionally to payer? Or do you have another solution to this issue?
Thanks.
paypal.Buttons({
style: {
layout: 'vertical',
shape: 'rect',
height: 36
},
createOrder: function (data, actions) {
var order = {
//https://developer.paypal.com/docs/checkout/integration-features/standard-card-fields/
payer: {
phone: {
phone_type: "MOBILE",
phone_number: {
national_number: "14082508100"
}
}
},
application_context: {
shipping_preference: 'NO_SHIPPING'
},
purchase_units: [{
description: getPurchaseDescription(),
amount: {
value: $("#Amount").val()
}
}]
};
var email = email_address: $("#DonorEmailID").val();
if(email) order.payer.email_address = email;
return actions.order.create(order);
},

PayPal autofill the Credit Card details

I am using the PayPal Credit Card and i am trying to fill up the form using their code:
paypal.Buttons({
style: {
layout: 'vertical',
shape: 'rect',
height: 36
},
createOrder: function (data, actions) {
return actions.order.create({
//https://developer.paypal.com/docs/checkout/integration-features/standard-card-fields/
payer: {
name: {
given_name: "PayPal",
surname: "Customer"
},
address: {
address_line_1: '123 ABC Street',
address_line_2: 'Apt 2',
admin_area_2: 'San Jose',
admin_area_1: 'CA',
postal_code: '95121',
country_code: 'US'
},
email_address: "customer#domain.com",
phone: {
phone_type: "MOBILE",
phone_number: {
national_number: "14082508100"
}
}
},
application_context: {
shipping_preference: 'NO_SHIPPING'
},
purchase_units: [{
description: getPurchaseDescription(),
amount: {
value: $("#Amount").val()
}
}]
});
},
Works well but i want to fill the credit card number and expiry date too. Is there any way to do this?
I tried
card: {
number: "378282246310005"
}
But the credit number is not filled.
Thanks.
I want to fill the credit card number and expiry date too. Is there any way to do this?
No. PayPal's SDK buttons should only ever be used by customers on their own devices who are entering their own payment information (login or card details)
Also, be aware that card numbers and accompanying expiry dates are very sensitive information that in general should never be stored by most systems, but in the rare occasions where it makes sense to store them exacting measures must be taken, including a PCI SAQ of type D

Showing details of purchase on Checkout pop-up for Paypal

I am a new paypal merchant and am trying to display some information on the checkout pop-up after the client clicks the PAY WITH PAYPAL button. I am using the JavaScript SDK in Sandbox mode
It is a digital purchase, so no shipping is needed -- which works in the code below
The only thing it shows on the Checkout pop-up is the total, "Hi John", Pay With options, and the PAY NOW button.
I want it to show what the client is purchasing, and our company info (name, phone number).
<script src="https://www.paypal.com/sdk/js?client-id=...">
createOrder: function(data, actions) {
// This function sets up the details of the transaction, including the amount and line item details.
var orderDescription = "ITEM YOU PURCHASED" // shows on payment history but not on payment pop-up
return actions.order.create({
intent: "CAPTURE",
purchase_units: [{
description: orderDescription,
amount: {
value: '0.26',
currency_code: "CAD"
}
}],
payee: {
email_address: "email"
},
payee_display_metadata: {
brand_name: "Company Name"
},
application_context: {
shipping_preference: "NO_SHIPPING",
business_name:"My Business Name",
},
note_to_payer: "Contact us at ... for any questions on your order.",
});
},
onApprove: function(data, actions) { .........
Argg..Why is it I always find the answer after I post a question...
I need a item breakdown then I get the down-arrow to expand the cart
changed purchase_units to
purchase_units: [{
amount: {
currency_code: "CAD",
value: "150.00",
breakdown: {
item_total: {
currency_code: "CAD",
value: "150.00"
}
}
},
items: [
{
name: "Tuition",
description: "The best item ever",
sku: "xyz-2654",
unit_amount: {
currency_code: "CAD",
value: "50.00"
},
quantity: "3"
},
]
}],

PayPal Checkout / Smart Buttons - Error with createOrder & empty fields which are optional

With the createOrder function I am passing some of the customer information, mainly to pre-populate the credit / debit card fields.
Something like phone number optional at checkout. With the following code if the order_phone field has a phone number, it works. If it is empty it returns an error and stops. Is there any way around this or let PayPal know it is optional? This happens with other variables too which may be optional for the customer.
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: $("#grand_total").val(),
currency_code: ("#grand_total").val()
}
}],
"application_context" : {
"shipping_preference":"NO_SHIPPING"
},
payer: {
name: {
given_name: $("#first_name").val(),
surname: $("#last_name").val()
},
email_address: $("#email_address").val(),
phone: {
phone_number: {
national_number: $("#order_phone").val()
}
}
},
});
},
Try something like
createOrder: function(data, actions) {
var myOrder = {
purchase_units: [{
amount: {
value: $("#grand_total").val(),
currency_code: "USD"
}
}],
"application_context" : {
"shipping_preference":"NO_SHIPPING"
},
payer: {
name: {
given_name: $("#first_name").val(),
surname: $("#last_name").val()
},
email_address: $("#email_address").val(),
},
};
var phone = $("#order_phone").val();
if(phone) myOrder.payer.phone = {
phone_number: {
national_number: phone
}
};
return actions.order.create(myOrder);
},

PayPal Express Checkout default Country

I'm trying to default the billing country to the UK, but no matter what i try it always defaults to the US.
Any ideas?
Note, that we do not require the customer to enter a shipping address so this has been hidden as per the json but have tried setting this to see if it makes a difference with no joy.
I've tried the following:
json_patch_request: [
{
op: 'replace',
path: '/payer/payer_info/billing_address',
value: {
country_code: 'GB',
}
}
],
payer: {
payer_info: {
country_code: 'GB',
billing_address: {
country_code: 'GB',
},
shipping_address: {
country_code: 'GB',
}
}
},
payment: {
transactions: [
{
amount: {
total: 10,
currency: 'GBP'
},
custom: 'x',
},
],
},
experience: {
input_fields: {
no_shipping: 1
},
flow_config: {
landing_page_type: "billing",
},
presentation: {
locale_code: "GB",
},
}
You need to set that in your seller profile:
Log in to your PayPal account
Click Money at the top of the page
Click Manage Currency
Choose the currency to make Primary
Click Make Primary
See https://www.paypal-community.com/t5/About-Payments-Archive/How-to-change-Paypal-default-currency-to-USD/td-p/616528