第9回 magento cafe plus
TRANSCRIPT
Magento Cafe Plus #9
最近のMagento
セキュリティパッチ• PATCH-SUPEE-5994公開–まだ適用していないサイトにはすみやかに適用を
Magento1.xのメンテナンス期間• Magento2リリース後 3年間
2015/06 2015/12 2016/06 2016/12 2017/06 2017/12 2018/06 2018/12
Magento1.xas
Mainstream
Magento2.x as MainstreamMagento2
asBeta / RC
1年目 2年目 3年目
Magento1.x as Maintenance phase
Magento2 リリース
Magento1.xサポート終了
Meet Magento 2015 Japan
• 只今絶賛参加登録受付中• 講演者も募集中
Magento2エクステンション開発その 2
前回のおさらい• M1とM2は似て非なるアプリケーション
• DBレベルではマイグレーション可能
• M1の知識が全く役に立たないわけではない
• XMLファイルが細分化・多様化している
M2で HELLO WORLDをだしてみる
Hello Worldに必要なもの• 設定ファイル• レイアウト XML• テンプレート• ブロック• ヘルパー• composer.json
composer.json{ "name":”veriteworks/magento2-helloworld", "type":"magento2-module", "extra": { "map": [ [ "*", ”Veriteworks/Helloworld" ] ] }, "license": [ "OSL-3.0", "AFL-3.0" ], "description":"Magento2 Hello World sample.", "version":”1.0.0.0", "authors":[ { "name":"Hirokazu Nishi", "email":"[email protected]", "homepage":"https://principle-works.jp/", "role":"developer" } ], "require": { "php": "~5.5.0|~5.6.0", "magento/framework": "0.74.0-beta12", "lib-libxml": "*", "magento/magento-composer-installer": "*” }}
etc/module.xml
<?xml version="1.0" ?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"> <module name=“Veriteworks_Helloworld" setup_version="1.0.0.0"> </module></config>
ヘルパー
<?phpnamespace Veriteworks\Helloworld\Helper;
class Data extends \Magento\Framework\App\Helper\AbstractHelper{
}
ブロック
<?phpnamespace Veriteworks\Helloworld\Block;
use Magento\Framework\View\Element\Template;
/** * Helloworld block * */class Helloworld extends \Magento\Framework\View\Element\Template{
}
レイアウト XML<?xml version="1.0"?><page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="before.body.end"> <block class="Veriteworks\Helloworld\Block\Helloworld" name="helloworld" as="helloworld" template="Veriteworks_Helloworld::helloworld/default.phtml" before="-"/> </referenceContainer> </body></page>
テンプレート
<h1>Hello World!</h1>
エクステンションの有効化
エクステンションを有効化するコマンドphp bin/magento module:enable Veriteworks_Helloworld --clear-static-content
セットアップスクリプトの実行php bin/magento setup:upgrade
キャッシュの更新php bin/magento cache:flush
継続課金
継続課金( Recurring Payment)とは
• ある一定期間ごとに顧客に対して課金を行う処理
• 1年 /半年 /四半期 /毎月 /2週などのサイクルがある
• 継続課金を行うためには、顧客との間に支払契約の締結が必要
• 締め日・洗い替え処理など、都度決済より複雑
よくある都度課金の流れECサイト顧客 決済サービス
商品をカートに投入
購入手続き開始
支払方法選択
購入確定ボタンクリック 注文受付処理実行
決済データ送信 決済処理実行
決済結果送信決済結果受信
注文データ確定注文完了
継続課金の処理パターン
1 加盟店側で課金アクションを起こすもの
2 決済サービス側で自動的に課金が行われるもの
継続課金という概念がなく、登録済みカード番号等を用いて繰り返し課金を行うもの。
課金予定データまでは準備してくれるが、確定処理は加盟店側で実施するもの。
都度課金とは独立した仕様として、課金契約データが用意され、指定した期間ごとに自動的にサービス側で課金が実施される。
洗替処理不可 実装容易
洗替処理可 実装難易度高
洗替処理可?不可? 実装難易度中
継続課金の流れ〜その 1ECサイト顧客 決済サービス
購入確定ボタンクリック 注文受付処理実行
決済データ送信 継続課金登録処理実行
登録結果送信決済結果受信
注文データ確定注文完了
課金処理実行
決済データ作成
定期課金処理
決済結果通知?決済結果受信
注文履歴作成
注文データ作成
決済データ送信
継続課金の流れ〜その 2ECサイト顧客 決済サービス
購入確定ボタンクリック 注文受付処理実行
決済データ送信 継続課金登録処理実行
登録結果送信決済結果受信
注文データ確定注文完了
課金処理実行
決済データ作成
定期課金処理
決済結果通知?決済結果受信
注文履歴作成
決済結果照会 決済データ返却
Magentoでの継続課金
そもそもの話• ベータ版扱い 5年以上・・・
• 事実上 PayPal専用
• ほかの決済サービスで使えなくもない、が・・・
サードパーティ製といえば・・・
http://www.magentocommerce.com/magento-connect/subscriptions-and-recurring-payments-by-aheadworks.html
サードパーティ製の課題• 独自実装になっているので、決済モジュールは個別に対応が必要
• 機能面で標準と異なる点があるため、注意が必要
• そもそもライセンス費用が必要
• 日本の決済になど・・・対応しているわけがない
継続課金を使う際の設定 1
継続課金を使う際の設定 2
継続課金の仕組み• Recurring Profile
• Recurring Product
• Nominal Item
• 対応する決済方法
Recurring Profile
• 継続課金の契約データそのもの
• 誰に何を、いくらで、どの周期で、何回課金するか
• 1つの継続課金契約には 1つの Recurring Profile
Recurring Product
• 商品のデータ上、「 Recurring Profile」が有効になっている商品
• Recurringできるのは、 Simple, Virtualのみ
• Recurring Profileが有効な商品は、それ単独でしかカートに入れることができない
• つまり 1回の決済で 1つの商品しか買えない
Nominal Item
• Recurring Productをカートに入れた際に出る項目
対応する決済方法• Mage_Payment_Model_Recurring_Profile_MethodI
nterfaceを実装した決済クラス– submitRecurringProfile– getRecurringProfileDetails– canGetRecurringProfileDetails– updateRecurringProfile– updateRecurringProfileStatus
• その他、決済サービス側の仕様を満たす実装–こちらのほうがよほど面倒くさい
決済サービス側で勝手に課金する場合
• 課金されたことをMagento側で拾う処理が必要–定時バッチで実行する方法–サービス側から通知してもらう方法
• どちらでやるかは仕様に依存–通知してもらう場合は注文・請求データの作成処理を実装する必要あり
Magento側で課金を起こす場合• 定時バッチによる課金処理を起こす• カード番号の決済サービス側での保存が必要(カード決済の場合)
• Magento側で Recurring Profile毎にいつ課金するか判定を実施–課金処理時に注文データと請求データを作成
面倒な仕様の例• 継続課金の課金・取消申請をする期間が1ヶ月のうちに一定期間存在する–その期間を過ぎると諸々面倒であったりとか・・・
• SFTPで所定のデータをアップしろ、とか–もはやWebアプリではなくただのバッチ処理ではと・・・
継続課金の制約• Recurring Profileの内容を顧客が自由に変更できない(解約・停止はできる)
• 管理者も解約と停止しかできない– 税率変更時に問題になる– 契約変更時は解約・新規契約になる
• カード番号をMagento側に持つのはNGなので、カード番号お預かり等の機能のない決済サービスでは利用できない(ペイジー・コンビニなどは可)
• 継続課金の場合、 3Dセキュア認証が行われない事がある
まとめ• Magentoの継続課金機能はベータ版
• 決済側さえ対応していればそれなりに使える–ただし、決済側の仕様がバラバラ
• 1つの継続課金で 1つの商品しか扱えない
• 税率の変更や届け先の変更などは出来ない