我正在使用电子商务。完成付款后,应该将其捕获并且几天后,应该从客户帐户处理或扣除。
示例:如果客户使用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
答案 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;
}
}