-
Notifications
You must be signed in to change notification settings - Fork 123
Adding Checkout JS to existing Payment with PayPal sample #963
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
<?php | ||
|
||
// # Create Payment using PayPal as payment method | ||
// This sample code demonstrates how you can process a | ||
// PayPal Account based Payment. | ||
// API used: /v1/payments/payment | ||
|
||
require __DIR__ . '/../bootstrap.php'; | ||
use PayPal\Api\Amount; | ||
use PayPal\Api\Details; | ||
use PayPal\Api\Item; | ||
use PayPal\Api\ItemList; | ||
use PayPal\Api\Payer; | ||
use PayPal\Api\Payment; | ||
use PayPal\Api\RedirectUrls; | ||
use PayPal\Api\Transaction; | ||
|
||
// ### Payer | ||
// A resource representing a Payer that funds a payment | ||
// For paypal account payments, set payment method | ||
// to 'paypal'. | ||
$payer = new Payer(); | ||
$payer->setPaymentMethod("paypal"); | ||
|
||
// ### Itemized information | ||
// (Optional) Lets you specify item wise | ||
// information | ||
$item1 = new Item(); | ||
$item1->setName('Ground Coffee 40 oz') | ||
->setCurrency('USD') | ||
->setQuantity(1) | ||
->setSku("123123") // Similar to `item_number` in Classic API | ||
->setPrice(7.5); | ||
$item2 = new Item(); | ||
$item2->setName('Granola bars') | ||
->setCurrency('USD') | ||
->setQuantity(5) | ||
->setSku("321321") // Similar to `item_number` in Classic API | ||
->setPrice(2); | ||
|
||
$itemList = new ItemList(); | ||
$itemList->setItems(array($item1, $item2)); | ||
|
||
// ### Additional payment details | ||
// Use this optional field to set additional | ||
// payment information such as tax, shipping | ||
// charges etc. | ||
$details = new Details(); | ||
$details->setShipping(1.2) | ||
->setTax(1.3) | ||
->setSubtotal(17.50); | ||
|
||
// ### Amount | ||
// Lets you specify a payment amount. | ||
// You can also specify additional details | ||
// such as shipping, tax. | ||
$amount = new Amount(); | ||
$amount->setCurrency("USD") | ||
->setTotal(20) | ||
->setDetails($details); | ||
|
||
// ### Transaction | ||
// A transaction defines the contract of a | ||
// payment - what is the payment for and who | ||
// is fulfilling it. | ||
$transaction = new Transaction(); | ||
$transaction->setAmount($amount) | ||
->setItemList($itemList) | ||
->setDescription("Payment description") | ||
->setInvoiceNumber(uniqid()); | ||
|
||
// ### Redirect urls | ||
// Set the urls that the buyer must be redirected to after | ||
// payment approval/ cancellation. | ||
$baseUrl = getBaseUrl(); | ||
$redirectUrls = new RedirectUrls(); | ||
$redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true") | ||
->setCancelUrl("$baseUrl/ExecutePayment.php?success=false"); | ||
|
||
// ### Payment | ||
// A Payment Resource; create one using | ||
// the above types and intent set to 'sale' | ||
$payment = new Payment(); | ||
$payment->setIntent("sale") | ||
->setPayer($payer) | ||
->setRedirectUrls($redirectUrls) | ||
->setTransactions(array($transaction)); | ||
|
||
|
||
// For Sample Purposes Only. | ||
$request = clone $payment; | ||
|
||
// ### Create Payment | ||
// Create a payment by calling the 'create' method | ||
// passing it a valid apiContext. | ||
// (See bootstrap.php for more on `ApiContext`) | ||
// The return object contains the state and the | ||
// url to which the buyer must be redirected to | ||
// for payment approval | ||
try { | ||
$payment->create($apiContext); | ||
} catch (Exception $ex) { | ||
// NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY | ||
ResultPrinter::printError("Created Payment Using PayPal. Please visit the URL to Approve.", "Payment", null, $request, $ex); | ||
exit(1); | ||
} | ||
|
||
// ### Get redirect url | ||
// The API response provides the url that you must redirect | ||
// the buyer to. Retrieve the url from the $payment->getApprovalLink() | ||
// method | ||
$approvalUrl = $payment->getApprovalLink(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We won't need this. |
||
|
||
|
||
// Checkout JS https://developer.paypal.com/demo/checkout/#/pattern/server | ||
// NOTE: The checkout.js script should be added to your head element not directly to the body as shown in the sample here. | ||
echo '<script src="https://www.paypalobjects.com/api/checkout.js"></script>'; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You might be able to just finish the PHP script here, and load the script as a normal HTML tag. <!DOCTYPE html>
<html>
<?php
... //This is where all our PHP code goes
?>
<head>
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
... // rest of your js code
</head>
<body>
</body>
</html> |
||
|
||
// NOTE: As an Alternative you can make a request with paypal.request.post to a page that returns the Payment ID value | ||
echo "<script> | ||
paypal.Button.render({ | ||
env: 'sandbox', // sandbox | production | ||
// Show the buyer a 'Pay Now' button in the checkout flow | ||
commit: true, | ||
// payment() is called when the button is clicked | ||
payment: function() { | ||
// Return the Payment ID | ||
return '$payment->id'; | ||
}, | ||
// onAuthorize() is called when the buyer approves the payment | ||
onAuthorize: function(data, actions) { | ||
// Redirect to existing Execute Payment | ||
return actions.redirect(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Are there other options than doing a redirect ? Can I fetch all the relevant field here, and make a normal HTTP post call to my server to do an execute for me ? It would be nice to mention the most common flow used. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is the simplest way with the existing sample set up, I plan on creating another example with Ajax calls using the PayPal request object that is built into the Checkout library. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we should just stick to one. Let people do other's from documentation |
||
}, | ||
onCancel: function(data, actions) { | ||
return actions.redirect(); | ||
} | ||
}, '#paypal-button-container'); | ||
</script>"; | ||
|
||
|
||
// NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY | ||
ResultPrinter::printResult("Created Payment Using PayPal. Please click the PayPal Checkout button to Approve.", "Payment", $payment->id . "<br>Click here to Approve the Payment:<br> <div id=\"paypal-button-container\"></div>", $request, $payment); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We do not need this. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I will refactor per an above comment, in the current state it is needed because of this |
||
|
||
return $payment; |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -112,6 +112,6 @@ | |
$approvalUrl = $payment->getApprovalLink(); | ||
|
||
// NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY | ||
ResultPrinter::printResult("Created Payment Using PayPal. Please visit the URL to Approve.", "Payment", "<a href='$approvalUrl' >$approvalUrl</a>", $request, $payment); | ||
ResultPrinter::printResult("Created Payment Using PayPal. Please visit the URL to Approve.", "Payment", $payment->id . "<br>Please visit the URL to Approve: <a href='$approvalUrl' >$approvalUrl</a>", $request, $payment); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This would print |
||
|
||
return $payment; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Created Payment Using PayPal. Please visit the URL to Approve.
->Error creating Payment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copy and Paste from existing the CreatePayment example. What do you suggest?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can add changes to both.