gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:37:06 25 4
gpt4 key购买 nike

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

示例:如果客户使用 Paypal 首字母付款,它将被“授权”并且在(最多 21 天)特定交易转换为“销售”意味着处理。

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

据我所知:在 Paypal SDK API 中,您必须再次创建付款,然后再进行处理。但是我已经有了交易 ID。所以需要重新创建付款吗?

Paypal: How to Capture Authorized Payment?

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

最佳答案

加入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;
}



}

关于php - 持续时间后支付网关更改方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com