This repository has been archived by the owner on Sep 29, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 108
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Added feature to create future payments - Updated Authentication model to retrieve long lived refresh token - Updated Documentation - Updated Sample
- Loading branch information
japatel
committed
Oct 6, 2014
1 parent
49b80f7
commit cea8981
Showing
5 changed files
with
303 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
<?php | ||
|
||
namespace PayPal\Api; | ||
|
||
use PayPal\Common\PPModel; | ||
use PayPal\Rest\ApiContext; | ||
use PayPal\Transport\PPRestCall; | ||
|
||
/** | ||
* Class FuturePayment | ||
* | ||
* @package PayPal\Api | ||
*/ | ||
class FuturePayment extends Payment | ||
{ | ||
|
||
/** | ||
* Extends the Payment object to create future payments | ||
* | ||
* @param null $apiContext | ||
* @param $correlationId | ||
* @return $this | ||
*/ | ||
public function create($apiContext = null, $correlationId = null) { | ||
if ($apiContext == null) { | ||
$apiContext = new ApiContext(self::$credential); | ||
} | ||
if (($correlationId == null || trim($correlationId) == "")) { | ||
throw new \InvalidArgumentException("correlationId cannot be null or empty"); | ||
} | ||
$payLoad = $this->toJSON(); | ||
$call = new PPRestCall($apiContext); | ||
$json = $call->execute( | ||
array('PayPal\Rest\RestHandler'), | ||
"/v1/payments/payment", | ||
"POST", | ||
$payLoad, | ||
[ | ||
'Paypal-Application-Correlation-Id' => $correlationId, | ||
'PAYPAL-CLIENT-METADATA-ID' => $correlationId | ||
] | ||
); | ||
$this->fromJson($json); | ||
|
||
return $this; | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
<!DOCTYPE html><html lang="en"><head><title>payments/CreateFuturePayment</title></head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><meta name="groc-relative-root" content="../"><meta name="groc-document-path" content="payments/CreateFuturePayment"><meta name="groc-project-path" content="sample/payments/CreateFuturePayment.php"><link rel="stylesheet" type="text/css" media="all" href="../assets/style.css"><script type="text/javascript" src="../assets/behavior.js"></script><body><div id="meta"><div class="file-path">sample/payments/CreateFuturePayment.php</div></div><div id="document"><div class="segment"><div class="code"><div class="wrapper"><span class="hljs-preprocessor"><?php</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h1 id="create-payment-using-paypal-as-payment-method">Create Payment using PayPal as payment method</h1> | ||
<p>This sample code demonstrates how you can process a | ||
PayPal Account based Payment. | ||
API used: /v1/payments/payment</p></div></div><div class="code"><div class="wrapper"><span class="hljs-keyword">require</span> <span class="hljs-keyword">__DIR__</span> . <span class="hljs-string">'/../bootstrap.php'</span>; | ||
<span class="hljs-keyword">use</span> <span class="hljs-title">PayPal</span>\<span class="hljs-title">Api</span>\<span class="hljs-title">Amount</span>; | ||
<span class="hljs-keyword">use</span> <span class="hljs-title">PayPal</span>\<span class="hljs-title">Api</span>\<span class="hljs-title">Details</span>; | ||
<span class="hljs-keyword">use</span> <span class="hljs-title">PayPal</span>\<span class="hljs-title">Api</span>\<span class="hljs-title">Item</span>; | ||
<span class="hljs-keyword">use</span> <span class="hljs-title">PayPal</span>\<span class="hljs-title">Api</span>\<span class="hljs-title">ItemList</span>; | ||
<span class="hljs-keyword">use</span> <span class="hljs-title">PayPal</span>\<span class="hljs-title">Api</span>\<span class="hljs-title">Payer</span>; | ||
<span class="hljs-keyword">use</span> <span class="hljs-title">PayPal</span>\<span class="hljs-title">Api</span>\<span class="hljs-title">Payment</span>; | ||
<span class="hljs-keyword">use</span> <span class="hljs-title">PayPal</span>\<span class="hljs-title">Api</span>\<span class="hljs-title">RedirectUrls</span>; | ||
<span class="hljs-keyword">use</span> <span class="hljs-title">PayPal</span>\<span class="hljs-title">Api</span>\<span class="hljs-title">Transaction</span>; | ||
session_start();</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h3 id="payer">Payer</h3> | ||
<p>A resource representing a Payer that funds a payment | ||
For paypal account payments, set payment method | ||
to 'paypal'.</p></div></div><div class="code"><div class="wrapper"><span class="hljs-variable">$payer</span> = <span class="hljs-keyword">new</span> Payer(); | ||
<span class="hljs-variable">$payer</span>->setPaymentMethod(<span class="hljs-string">"paypal"</span>);</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h3 id="amount">Amount</h3> | ||
<p>Lets you specify a payment amount. | ||
You can also specify additional details | ||
such as shipping, tax.</p></div></div><div class="code"><div class="wrapper"><span class="hljs-variable">$amount</span> = <span class="hljs-keyword">new</span> Amount(); | ||
<span class="hljs-variable">$amount</span>->setCurrency(<span class="hljs-string">"USD"</span>) | ||
->setTotal(<span class="hljs-string">"0.17"</span>);</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h3 id="transaction">Transaction</h3> | ||
<p>A transaction defines the contract of a | ||
payment - what is the payment for and who | ||
is fulfilling it. </p></div></div><div class="code"><div class="wrapper"><span class="hljs-variable">$transaction</span> = <span class="hljs-keyword">new</span> Transaction(); | ||
<span class="hljs-variable">$transaction</span>->setAmount(<span class="hljs-variable">$amount</span>) | ||
->setDescription(<span class="hljs-string">"Payment description"</span>);</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h3 id="redirect-urls">Redirect urls</h3> | ||
<p>Set the urls that the buyer must be redirected to after | ||
payment approval/ cancellation.</p></div></div><div class="code"><div class="wrapper"><span class="hljs-variable">$baseUrl</span> = getBaseUrl(); | ||
<span class="hljs-variable">$redirectUrls</span> = <span class="hljs-keyword">new</span> RedirectUrls(); | ||
<span class="hljs-variable">$redirectUrls</span>->setReturnUrl(<span class="hljs-string">"$baseUrl/ExecutePayment.php?success=true"</span>) | ||
->setCancelUrl(<span class="hljs-string">"$baseUrl/ExecutePayment.php?success=false"</span>);</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h3 id="payment">Payment</h3> | ||
<p>A Payment Resource; create one using | ||
the above types and intent set to 'sale'</p></div></div><div class="code"><div class="wrapper"><span class="hljs-variable">$payment</span> = <span class="hljs-keyword">new</span> Payment(); | ||
<span class="hljs-variable">$payment</span>->setIntent(<span class="hljs-string">"authorize"</span>) | ||
->setPayer(<span class="hljs-variable">$payer</span>) | ||
->setRedirectUrls(<span class="hljs-variable">$redirectUrls</span>) | ||
->setTransactions(<span class="hljs-keyword">array</span>(<span class="hljs-variable">$transaction</span>));</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h3 id="get-refresh-token">Get Refresh Token</h3> | ||
<p>You need to get a permanent refresh token from the authorization code, retrieved from the mobile sdk.</p></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>authorization code from mobile sdk</p></div></div><div class="code"><div class="wrapper"><span class="hljs-variable">$authorizationCode</span> = <span class="hljs-string">'EF4Ds2Wv1JbHiU_UuhR5v-ftTbeJD03RBX-Zjg9pLCAhdLqLeRR6YSKTNsrbQGX7lFoZ3SxwFyxADEZbBOxpn023W9SA0JzSQAy-9eLdON5eDPAyMyKlHyNVS2DqBR2iWVfQGfudbd9MDoRxMEjIZbY'</span>;</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>correlation id from mobile sdk</p></div></div><div class="code"><div class="wrapper"><span class="hljs-variable">$correlationId</span> = <span class="hljs-string">'123123456'</span>; | ||
|
||
<span class="hljs-keyword">try</span> {</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Exchange authorization_code for long living refresh token. You should store | ||
it in a database for later use</p></div></div><div class="code"><div class="wrapper"> <span class="hljs-variable">$refreshToken</span> = <span class="hljs-variable">$apiContext</span>->getCredential()->getRefreshToken(<span class="hljs-variable">$apiContext</span>->getConfig(), <span class="hljs-variable">$authorizationCode</span>);</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Update the access token in apiContext</p></div></div><div class="code"><div class="wrapper"> <span class="hljs-variable">$apiContext</span>->getCredential()->updateAccessToken(<span class="hljs-variable">$apiContext</span>->getConfig(), <span class="hljs-variable">$refreshToken</span>);</div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h3 id="create-future-payment">Create Future Payment</h3> | ||
<p>Create a payment by calling the 'create' method | ||
passing it a valid apiContext. | ||
(See bootstrap.php for more on <code>ApiContext</code>) | ||
The return object contains the state and the | ||
url to which the buyer must be redirected to | ||
for payment approval | ||
Please note that currently future payments works only with Paypal as a funding instrument.</p></div></div><div class="code"><div class="wrapper"> <span class="hljs-variable">$payment</span>->create(<span class="hljs-variable">$apiContext</span>, <span class="hljs-variable">$correlationId</span>); | ||
|
||
} <span class="hljs-keyword">catch</span> (PayPal\<span class="hljs-keyword">Exception</span>\PPConnectionException <span class="hljs-variable">$ex</span>) { | ||
<span class="hljs-keyword">echo</span> <span class="hljs-string">"Exception: "</span> . <span class="hljs-variable">$ex</span>->getMessage() . PHP_EOL; | ||
var_dump(<span class="hljs-variable">$ex</span>->getData()); | ||
<span class="hljs-keyword">exit</span>(<span class="hljs-number">1</span>); | ||
} | ||
<span class="hljs-preprocessor">?></span> | ||
|
||
<html> | ||
<head> | ||
<title>Future payments</title> | ||
</head> | ||
<body> | ||
<div> | ||
Created payment: | ||
<span class="hljs-preprocessor"><?php</span> <span class="hljs-keyword">echo</span> <span class="hljs-variable">$payment</span>->getId();<span class="hljs-preprocessor">?></span> | ||
</div> | ||
<pre><span class="hljs-preprocessor"><?php</span> <span class="hljs-keyword">echo</span> <span class="hljs-variable">$payment</span>->toJSON(JSON_PRETTY_PRINT);<span class="hljs-preprocessor">?></span></pre> | ||
<a href=<span class="hljs-string">'../index.html'</span>>Back</a> | ||
</body> | ||
</html></div></div></div></div></body></html> |
Oops, something went wrong.