2017-02-22 43 views
4

Я использую электронную коммерцию. После выполнения платежа он должен быть захвачен & через несколько дней, его следует обработать или вычесть из учетной записи клиента.Способ изменения шлюза оплаты после длительности

Пример: Если клиент платит с использованием первоначальной версии Paypal, это будет «Авторизовать» & после (максимум 21 день), что конкретная транзакция конвертируется в «Продажа», обрабатывается.

Клиенты могут оплатить с помощью кредитной карты. Можем ли мы использовать Paypal или использовать другой способ оплаты?

Как известно: в API-интерфейсе Paypal SDK вы должны создать этот платеж снова &, затем Process. Но у меня уже есть Идентификатор транзакции. Так нужно снова создать платеж?

Paypal: How to Capture Authorized Payment?

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

+0

Если кто-то может вести в деталях или тот, кто достигли этого. Могут делиться своими взглядами. Спасибо –

ответ

1

Добавить в composer.json

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

пример Посмотрите код в 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

Ищете решение в ядре PHP –

+0

@AnkitShah, можете ли вы не просто использовать SDK PayPal Rest API SDK, упомянутый в приведенном выше ответе? – fubar