magento2 添加支付方式payment method

作者:袖梨 2022-06-24

一:启动文件 appcodeInchooStripeetcmodule.xml

























二:配置文件config.xml appcodeInchooStripeetcconfig.xml











1

MorePaymentModelPayment

authorize_capture

Payment



AE,VI,MC,DI,JCB

1

0.50








三:后台配置文件 appcodeInchooStripeetcadminhtmlsystem2.xml













 

select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="0">



MagentoBackendModelConfigSourceYesno













MagentoBackendModelConfigBackendEncrypted







MagentoBackendModelConfigSourceYesno







MorePaymentModelSourceCctype













MagentoPaymentModelConfigSourceAllspecificcountries







MagentoDirectoryModelConfigSourceCountry













Leave empty to disable limit






四:model类 因为我们在config.xml配置了model,所以前台点击保存支付方式的时候 触发

_stripeApi = $stripe;

// $this->_stripeApi->setApiKey(

// $this->getConfigData('api_key')

// );

 

$this->_minAmount = $this->getConfigData('min_order_total');

$this->_maxAmount = $this->getConfigData('max_order_total');

}

 

/**

* 支付捕获方法

* *

* @param MagentoFrameworkObject $payment

* @param float $amount

* @return $this

* @throws MagentoFrameworkModelException

*/

public function capture(MagentoFrameworkObject $payment, $amount)

{

/** @var MagentoSalesModelOrder $order */

$order = $payment->getOrder();

 

/** @var MagentoSalesModelOrderAddress $billing */

$billing = $order->getBillingAddress();

 

try {

$charge = Stripe_Charge::create(array(

'amount' => $amount * 100,

'currency' => strtolower($order->getBaseCurrencyCode()),

'description' => sprintf('#%s, %s', $order->getIncrementId(), $order->getCustomerEmail()),

'card' => array(

'number' => $payment->getCcNumber(),

'number' => $payment->getCcNumber(),

'exp_month' => sprintf('%02d',$payment->getCcExpMonth()),

'exp_year' => $payment->getCcExpYear(),

'cvc' => $payment->getCcCid(),

'name' => $billing->getName(),

'address_line1' => $billing->getStreet(1),

'address_line2' => $billing->getStreet(2),

'address_zip' => $billing->getPostcode(),

'address_state' => $billing->getRegion(),

'address_country' => $billing->getCountry(),

),

));

 

$payment

->setTransactionId($charge->id)

->setIsTransactionClosed(0);

} catch (Exception $e) {

$this->debugData($e->getMessage());

$this->_logger->logException(__('Payment capturing error.'));

throw new MagentoFrameworkModelException(__('Payment capturing error.'));

}

 

return $this;

}

 

/**

* Payment refund

*

* @param MagentoFrameworkObject $payment

* @param float $amount

* @return $this

* @throws MagentoFrameworkModelException

*/

public function refund(MagentoFrameworkObject $payment, $amount)

{

$transactionId = $payment->getParentTransactionId();

 

try {

Stripe_Charge::retrieve($transactionId)->refund();

} catch (Exception $e) {

$this->debugData($e->getMessage());

$this->_logger->logException(__('Payment refunding error.'));

throw new MagentoFrameworkModelException(__('Payment refunding error.'));

}

 

$payment

->setTransactionId($transactionId . '-' . MagentoSalesModelOrderPaymentTransaction::TYPE_REFUND)

->setParentTransactionId($transactionId)

->setIsTransactionClosed(1)

->setShouldCloseParentTransaction(1);

 

return $this;

}

 

/**

* Determine method availability based on quote amount and config data

*

* @param null $quote

* @return bool

*/

public function isAvailable($quote = null)

{

if ($quote && (

$quote->getBaseGrandTotal() < $this->_minAmount

|| ($this->_maxAmount && $quote->getBaseGrandTotal() > $this->_maxAmount))

) {

return false;

}

 

// if (!$this->getConfigData('api_key')) {

// return false;

// }

 

return parent::isAvailable($quote);

}

 

/**

* Availability for currency

*

* @param string $currencyCode

* @return bool

*/

public function canUseForCurrency($currencyCode)

{

if (!in_array($currencyCode, $this->_supportedCurrencyCodes)) {

return false;

}

return true;

}

}

 

相关文章

精彩推荐