最新版本的PayPal API中的多个产品

时间:2015-04-23 21:08:16

标签: php api rest paypal

将多个产品传入php paypal付款的正确方法是什么?

单品的Currect工作测试代码:

$api = new ApiContext(
        new OAuthTokenCredential(
            'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
            'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        )
    );

    $api->setConfig([
        'mode' => 'sandbox',
        'log.LogEnabled' => false,
        'log.FileName' => '',
        'log.LogLevel' => 'FINE',
        'validation.level' => 'log'
    ]);

    $payer          = new Payer();
    $details        = new Details();
    $amount         = new Amount();
    $transaction    = new Transaction();
    $payment        = new Payment();
    $redirecturls   = new RedirectUrls();

    $payer->setPaymentMethod('paypal');

    $details->setShipping('2.00')
        ->setTax('0.00')
        ->setSubtotal('20.00');

    $amount->setCurrency('EUR')
        ->setTotal('22.00')
        ->setDetails($details);

    $transaction->setAmount($amount)
        ->setDescription('Test');

    $payment->setIntent('sale')
        ->setPayer($payer)
        ->setTransactions([$transaction]);

    $redirecturls->setReturnUrl('RETURN URL')
        ->setCancelUrl('CANCEL URL');

    $payment->setRedirectUrls($redirecturls);

    try {

        $payment->create($api);

    } catch (PPConnectionException $e) {
        header('Location: ERROR URL');
    }

    header('Location: '.$payment->getApprovalLink());

请记住,这不是我将如何实现它,这只是概念的证明!

我创建了一个CodeIgniter库,我可以轻松地拨打电话付款!

如果有人有兴趣,请不要犹豫,给我发消息!

    $this->load->library('Paypal');
    $this->load->model('Config_model');

    $ClientID = $this->Config_model->get('paypal.ClientID'); 
    $Secret = $this->Config_model->get('paypal.Secret');
    $defaultCurrency = $this->Config_model->get('transactions.currency');

    $this->paypal->setSandbox(true);
    $this->paypal->setMerchant($ClientID, $Secret);
    $this->paypal->setDefaultCurrency($defaultCurrency);
    $this->paypal->addItem('test', 5.3, 2);
    $this->paypal->addItem('test2', 3.3, 5);
    $this->paypal->setShipping(2);
    $this->paypal->setTax(3);
    $this->paypal->setDescription("Betalingetje");
    $this->paypal->setCancelUrl('CANCEL URL HERE');
    $this->paypal->setReturnUrl('RETURN URL HERE');
    $this->paypal->execute();

PS:它与另一个小型图书馆'这是自动加载的。此库仅包含作曲家autoload.php,如下所示:

class MyComposer 
{
    function __construct() 
    {
        include("application/composer/vendor/autoload.php");
    }
}

1 个答案:

答案 0 :(得分:0)

您可以在此处找到源代码:http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/CreatePaymentUsingPayPal.html

SDK本身附带了many more samples。您可以按照https://github.com/paypal/PayPal-PHP-SDK/wiki/Samples中提供的说明在本地计算机上执行示例。

如果我有任何帮助,请告诉我。

以下是示例代码段:

<?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)
    ->setPrice(7.5);
$item2 = new Item();
$item2->setName('Granola bars')
    ->setCurrency('USD')
    ->setQuantity(5)
    ->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();
// 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);
return $payment;