2017-02-22 3 views
4

Ich benutze eCommerce. Sobald die Zahlung erfolgt ist, sollte es nach einigen Tagen & erfasst werden, sollte es verarbeitet oder von Kundenkonto abgezogen werden.Zahlung Gateway Änderung Methode nach Dauer

Beispiel: Wenn der Kunde zahlt mit Paypal initial wäre es "Autorisieren" & nach (Max. 21 Tage), dass bestimmte Transaktion wird in "Verkauf" bedeutet verarbeitet umgewandelt.

Kunden können mit Kreditkarte bezahlen. Können wir Paypal verwenden oder müssen Sie eine andere Zahlungsmethode verwenden?

Nach meinem Wissen: In Paypal SDK API müssen Sie die Zahlung wieder & dann Prozess erstellen. Aber ich habe bereits Transaktions-ID. Also musst du wieder eine Zahlung erstellen?

Paypal: How to Capture Authorized Payment?

http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payments/AuthorizationCapture.html

+0

Wenn jemand im Detail oder einen, der dies erreicht hat, führen kann. Kann ihre Ansichten teilen. Danke –

Antwort

1

in composer.json hinzufügen

"require": { 
     "paypal/rest-api-sdk-php": "*" 
    } 

Blick Codebeispiel in yii

use Yii; 
use yii\base\ErrorException; 
use yii\helpers\ArrayHelper; 
use yii\base\Component; 
use yii\helpers\Url; 

use PayPal\Api\Address; 
use PayPal\Api\CreditCard; 
use PayPal\Api\Amount; 
use PayPal\Api\Payer; 
use PayPal\Api\Payment; 
use PayPal\Api\Transaction; 
use PayPal\Api\FundingInstrument; 
use PayPal\Auth\OAuthTokenCredential; 
use PayPal\Api\Details; 
use PayPal\Api\Item; 
use PayPal\Api\ItemList; 
use PayPal\Api\RedirectUrls; 
use PayPal\Rest\ApiContext; 


class Paypal extends Component 
{ 
    public $clientId; 
    public $clientSecret; 
    public $currency; 
    public $returnUrl; 
    public $cancelUrl; 
    public $intentType; 
    public $config; 

    public function pay($total, $shipping, $tax, $productName, $transactionDescription) 
    { 

     $apiContext = new ApiContext(
      new OAuthTokenCredential(
       $this->getClientId(),  // ClientID 
       $this->getClientSecret()  // ClientSecret 
      ) 
     ); 

     $apiContext->setConfig(ArrayHelper::merge(
      [ 
       'mode'      => 'sandbox', // development (sandbox) or production (live) mode 
       'http.ConnectionTimeOut' => 30, 
       'http.Retry'    => 1, 
       'log.LogEnabled'   => YII_DEBUG ? 1 : 0, 
       'log.FileName'    => Yii::getAlias('@runtime/logs/paypal.log'), 
       'log.LogLevel'    => 'FINE', 
       'validation.level'   => 'log', 
       'cache.enabled'    => 'true' 
      ], $this->getConfig()) 
     ); 

     $payer = new Payer(); 
     $payer->setPaymentMethod("paypal"); 

     if(($subtotal = $total - $shipping - $tax) < 0) { 
      throw new ErrorException('Subtotal is negative'); 
     } 

     $item = new Item(); 
     $item->setName($productName) 
      ->setCurrency($this->getCurrency()) 
      ->setQuantity(1) 
      ->setPrice($subtotal); 

     $itemList = new ItemList(); 
     $itemList->addItem($item); 

     $details = new Details(); 
     $details->setShipping($shipping) 
      ->setTax($tax) 
      ->setSubtotal($subtotal); 

     $amount = new Amount(); 
     $amount->setCurrency($this->getCurrency()) 
      ->setTotal($total) 
      ->setDetails($details); 

     $transaction = new Transaction(); 
     $transaction->setAmount($amount) 
      ->setItemList($itemList) 
      ->setDescription($transactionDescription) 
      ->setInvoiceNumber(uniqid()); 

     $redirectUrls = new RedirectUrls(); 
     $redirectUrls->setReturnUrl(Url::home(true) . Url::to([$this->getReturnUrl()])) 
      ->setCancelUrl(Url::home(true) . Url::to([$this->getCancelUrl()])); 

     $payment = new Payment(); 
     $payment->setIntent($this->getIntentType()) 
      ->setPayer($payer) 
      ->setRedirectUrls($redirectUrls) 
      ->setTransactions(array($transaction)); 

     try { 
      $payment->create($apiContext); 
     } catch (Exception $ex) { 

     } 

     return $payment; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getClientId() 
    { 
     return $this->clientId; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getClientSecret() 
    { 
     return $this->clientSecret; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getCurrency() 
    { 
     return $this->currency; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getReturnUrl() 
    { 
     return $this->returnUrl; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getCancelUrl() 
    { 
     return $this->cancelUrl; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getIntentType() 
    { 
     return $this->intentType; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getConfig() 
    { 
     return $this->config; 
    } 



} 
+0

Auf der Suche nach einer Lösung im Kern PHP –

+0

@AnkitShah, können Sie nicht einfach das PayPal Rest API SDK in der obigen Antwort verwendet verwenden? – fubar