支付网关更改方法持续时间

时间:2017-02-22 01:35:58

标签: php api paypal e-commerce payment-gateway

我正在使用电子商务。完成付款后,应该将其捕获并且几天后,应该从客户帐户处理或扣除。

示例:如果客户使用Paypal初始付款,那将是"授权" &安培;在(最多21天)特定交易转换为" Sale"意味着处理。

客户可以使用信用卡付款。我们可以使用Paypal还是需要使用其他付款方式?

据我所知:在Paypal SDK API中,您必须创建“再次付款”和“然后过程。但我已经有了交易ID。那么需要再次创建付款吗?

Paypal: How to Capture Authorized Payment?

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

1 个答案:

答案 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;
    }



}