当前位置:首页 > PHP教程 > php高级应用 > 列表

magento2 添加支付方式payment method

发布:smiling 来源: PHP粉丝网  添加日期:2016-01-20 16:14:48 浏览: 评论:0 

下面我们一直来看看magento2 添加支付方式payment method,有兴趣的可以和phpfensi小编一起来看看吧,希望例子对各位用.

一:启动文件 \app\code\Inchoo\Stripe\etc\module.xml

  1. <?xml version="1.0"?> 
  2.  
  3. <config xmlns:xsi=" 
  4. http://www.w3.org/2001/XMLSchema-instance 
  5. xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"> 
  6.  
  7. <module name="More_Payment" schema_version="1.0.0.0" active="true"> 
  8.  
  9. <sequence> 
  10.  
  11. <module name="Magento_Sales"/> 
  12.  
  13. <module name="Magento_Payment"/> 
  14.  
  15. </sequence> 
  16.  
  17. <depends> 
  18.  
  19. <module name="Magento_Sales"/> 
  20.  
  21. <module name="Magento_Payment"/> 
  22.  
  23. </depends> 
  24.  
  25. </module> 
  26.  
  27. </config> 

二:配置文件config.xml \app\code\Inchoo\Stripe\etc\config.xml

  1. <?xml version="1.0"?> 
  2.  
  3. <config xmlns:xsi=" 
  4. http://www.w3.org/2001/XMLSchema-instance 
  5. xsi:noNamespaceSchemaLocation="../../../Magento/Core/etc/config.xsd"> 
  6.  
  7. <default> 
  8.  
  9. <payment> 
  10.  
  11. <more_payment> 
  12.  
  13. <active>1</active> 
  14.  
  15. <model>More\Payment\Model\Payment</model> 
  16.  
  17. <payment_action>authorize_capture</payment_action> 
  18.  
  19. <title>Payment</title> 
  20.  
  21. <api_key backend_model="Magento\Backend\Model\Config\Backend\Encrypted" /> 
  22.  
  23. <cctypes>AE,VI,MC,DI,JCB</cctypes> 
  24.  
  25. <allowspecific>1</allowspecific> 
  26.  
  27. <min_order_total>0.50</min_order_total> 
  28.  
  29. </more_payment> 
  30.  
  31. </payment> 
  32.  
  33. </default> 
  34.  
  35. </config> 

三:后台配置文件 app\code\Inchoo\Stripe\etc\adminhtml\system2.xml

  1. <?xml version="1.0"?> 
  2.  
  3. <config xmlns:xsi=" 
  4. http://www.w3.org/2001/XMLSchema-instance 
  5. xsi:noNamespaceSchemaLocation="../../../../Magento/Backend/etc/system_file.xsd"> 
  6.  
  7. <system> 
  8.  
  9. <section id="payment" translate="label" type="text" sortOrder="400" showInDefault="1" showInWebsite="1" showInStore="1"> 
  10.  
  11. <group id="more_payment" translate="label" type="text" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1"> 
  12.  
  13. <label>Payment</label> 
  14.  
  15. <field id="active" translate="label" type="<a href="/tags.php/select/" target="_blank">select</a>sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="0"> 
  16.  
  17. <label>Enabled</label> 
  18.  
  19. <source_model>Magento\Backend\Model\Config\Source\Yesno</source_model> 
  20.  
  21. </field> 
  22.  
  23. <field id="title" translate="label" type="text" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1"> 
  24.  
  25. <label>Title</label> 
  26.  
  27. </field> 
  28.  
  29. <field id="api_key" translate="label" type="obscure" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="0"> 
  30.  
  31. <label>Api Key</label> 
  32.  
  33. <backend_model>Magento\Backend\Model\Config\Backend\Encrypted</backend_model> 
  34.  
  35. </field> 
  36.  
  37. <field id="debug" translate="label" type="select" sortOrder="4" showInDefault="1" showInWebsite="1" showInStore="0"> 
  38.  
  39. <label>Debug</label> 
  40.  
  41. <source_model>Magento\Backend\Model\Config\Source\Yesno</source_model> 
  42.  
  43. </field> 
  44.  
  45. <field id="cctypes" translate="label" type="multiselect" sortOrder="5" showInDefault="1" showInWebsite="1" showInStore="0"> 
  46.  
  47. <label>Credit Card Types</label> 
  48.  
  49. <source_model>More\Payment\Model\Source\Cctype</source_model> 
  50.  
  51. </field> 
  52.  
  53. <field id="sort_order" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0"> 
  54.  
  55. <label>Sort Order</label> 
  56.  
  57. </field> 
  58.  
  59. <field id="allowspecific" translate="label" type="allowspecific" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="0"> 
  60.  
  61. <label>Payment from Applicable Countries</label> 
  62.  
  63. <source_model>Magento\Payment\Model\Config\Source\Allspecificcountries</source_model> 
  64.  
  65. </field> 
  66.  
  67. <field id="specificcountry" translate="label" type="multiselect" sortOrder="51" showInDefault="1" showInWebsite="1" showInStore="0"> 
  68.  
  69. <label>Payment from Specific Countries</label> 
  70.  
  71. <source_model>Magento\Directory\Model\Config\Source\Country</source_model> 
  72.  
  73. </field> 
  74.  
  75. <field id="min_order_total" translate="label" type="text" sortOrder="98" showInDefault="1" showInWebsite="1" showInStore="0"> 
  76.  
  77. <label>Minimum Order Total</label> 
  78.  
  79. </field> 
  80.  
  81. <field id="max_order_total" translate="label" type="text" sortOrder="99" showInDefault="1" showInWebsite="1" showInStore="0"> 
  82.  
  83. <label>Maximum Order Total</label> 
  84.  
  85. <comment>Leave empty to disable limit</comment> 
  86.  
  87. </field> 
  88.  
  89. </group> 
  90.  
  91. </section> 
  92.  
  93. </system> 
  94.  
  95. </config> 

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

  1. <?php 
  2. namespace More\Payment\Model; 
  3.  
  4. class Payment extends \Magento\Payment\Model\Method\Cc 
  5.  
  6.  
  7. const CODE = 'more_payment'
  8.  
  9.    
  10.  
  11. protected $_code = self::CODE; 
  12.  
  13.    
  14.  
  15. protected $_isGateway = true
  16.  
  17. protected $_canCapture = true
  18.  
  19. protected $_canCapturePartial = true
  20.  
  21. protected $_canRefund = true
  22.  
  23. protected $_canRefundInvoicePartial = true
  24.  
  25.    
  26.  
  27. protected $_stripeApi = false
  28.  
  29.    
  30.  
  31. protected $_minAmount = null
  32.  
  33. protected $_maxAmount = null
  34.  
  35. protected $_supportedCurrencyCodes = array('USD'); 
  36.  
  37. public function __construct( 
  38.  
  39. \Magento\Framework\Event\ManagerInterface $eventManager, 
  40.  
  41. \Magento\Payment\Helper\Data $paymentData, 
  42.  
  43. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, 
  44.  
  45. \Magento\Framework\Logger\AdapterFactory $logAdapterFactory, 
  46.  
  47. \Magento\Framework\Logger $logger, 
  48.  
  49. \Magento\Framework\Module\ModuleListInterface $moduleList, 
  50.  
  51. \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, 
  52.  
  53. \Magento\Centinel\Model\Service $centinelService, 
  54.  
  55. \Stripe\Api $stripe, 
  56.  
  57. array $data = array() 
  58.  
  59. ) { 
  60.  
  61. parent::__construct($eventManager, $paymentData, $scopeConfig, $logAdapterFactory, $logger, $moduleList, $localeDate, $centinelService, $data); 
  62.  
  63. $this->_stripeApi = $stripe; 
  64.  
  65. // $this->_stripeApi->setApiKey( 
  66.  
  67. // $this->getConfigData('api_key') 
  68.  
  69. // ); 
  70.  
  71. $this->_minAmount = $this->getConfigData('min_order_total'); 
  72.  
  73. $this->_maxAmount = $this->getConfigData('max_order_total'); 
  74.  
  75.  
  76. /** 
  77.  
  78. * 支付捕获方法 
  79.  
  80. * * 
  81.  
  82. * @param \Magento\Framework\Object $payment 
  83.  
  84. * @param float $amount 
  85.  
  86. * @return $this 
  87.  
  88. * @throws \Magento\Framework\Model\Exception 
  89.  
  90. */ 
  91.  
  92. public function capture(\Magento\Framework\Object $payment, $amount) 
  93.  
  94.  
  95. /** @var Magento\Sales\Model\Order $order */ 
  96.  
  97. $order = $payment->getOrder(); 
  98.  
  99. /** @var Magento\Sales\Model\Order\Address $billing */ 
  100.  
  101. $billing = $order->getBillingAddress(); 
  102.  
  103. try { 
  104.  
  105. $charge = \Stripe_Charge::create(array( 
  106.  
  107. 'amount' => $amount * 100, 
  108.  
  109. 'currency' => strtolower($order->getBaseCurrencyCode()), 
  110.  
  111. 'description' => sprintf('#%s, %s', $order->getIncrementId(), $order->getCustomerEmail()), 
  112.  
  113. 'card' => array( 
  114.  
  115. 'number' => $payment->getCcNumber(), 
  116.  
  117. 'number' => $payment->getCcNumber(), 
  118.  
  119. 'exp_month' => sprintf('%02d',$payment->getCcExpMonth()), 
  120.  
  121. 'exp_year' => $payment->getCcExpYear(), 
  122.  
  123. 'cvc' => $payment->getCcCid(), 
  124.  
  125. 'name' => $billing->getName(), 
  126.  
  127. 'address_line1' => $billing->getStreet(1), 
  128.  
  129. 'address_line2' => $billing->getStreet(2), 
  130.  
  131. 'address_zip' => $billing->getPostcode(), 
  132.  
  133. 'address_state' => $billing->getRegion(), 
  134.  
  135. 'address_country' => $billing->getCountry(), 
  136.  
  137. ), 
  138.  
  139. )); 
  140.  
  141. $payment 
  142.  
  143. ->setTransactionId($charge->id) 
  144.  
  145. ->setIsTransactionClosed(0); 
  146.  
  147. <a href="/tags.php/catch/" target="_blank">catch</a> (\Exception $e) { 
  148.  
  149. $this->debugData($e->getMessage()); 
  150.  
  151. $this->_logger->logException(__('Payment capturing error.')); 
  152.  
  153. throw new \Magento\Framework\Model\Exception(__('Payment capturing error.')); 
  154.  
  155.  
  156. return $this; 
  157.  
  158.  
  159. /** 
  160.  
  161. * Payment refund 
  162.  
  163.  
  164. * @param \Magento\Framework\Object $payment 
  165.  
  166. * @param float $amount 
  167.  
  168. * @return $this 
  169.  
  170. * @throws \Magento\Framework\Model\Exception 
  171.  
  172. */ 
  173.  
  174. public function refund(\Magento\Framework\Object $payment, $amount) 
  175.  
  176.  
  177. $transactionId = $payment->getParentTransactionId(); 
  178.  
  179. try { 
  180.  
  181. \Stripe_Charge::retrieve($transactionId)->refund(); 
  182.  
  183. } catch (\Exception $e) { 
  184.  
  185. $this->debugData($e->getMessage()); 
  186.  
  187. $this->_logger->logException(__('Payment refunding error.')); 
  188.  
  189. throw new \Magento\Framework\Model\Exception(__('Payment refunding error.')); 
  190.  
  191.  
  192. $payment 
  193.  
  194. ->setTransactionId($transactionId . '-' . \Magento\Sales\Model\Order\Payment\Transaction::TYPE_REFUND) 
  195.  
  196. ->setParentTransactionId($transactionId) 
  197.  
  198. ->setIsTransactionClosed(1) 
  199.  
  200. ->setShouldCloseParentTransaction(1); 
  201.  
  202. return $this; 
  203.  
  204.  
  205. /** 
  206.  
  207. * Determine method availability based on quote amount and config data 
  208.  
  209.  
  210. * @param null $quote 
  211.  
  212. * @return bool 
  213.  
  214. */ 
  215.  
  216. public function isAvailable($quote = null
  217.  
  218.  
  219. if ($quote && ( 
  220.  
  221. $quote->getBaseGrandTotal() < $this->_minAmount 
  222.  
  223. || ($this->_maxAmount && $quote->getBaseGrandTotal() > $this->_maxAmount)) 
  224.  
  225. ) { 
  226.  
  227. return false; 
  228.  
  229.  
  230. // if (!$this->getConfigData('api_key')) { 
  231.  
  232. // return false; 
  233.  
  234. // } 
  235.  
  236. return parent::isAvailable($quote); 
  237.  
  238.  
  239. /** 
  240.  
  241. * Availability for currency 
  242.  
  243.  
  244. * @param string $currencyCode 
  245.  
  246. * @return bool 
  247.  
  248. */ 
  249.  
  250. public function canUseForCurrency($currencyCode) 
  251.  
  252.  
  253. if (!in_array($currencyCode, $this->_supportedCurrencyCodes)) { 
  254.  
  255. return false; 
  256.  
  257.  
  258. return true; 
  259.  
  260.  

Tags: magento2 payment method

分享到: