gmo

画面遷移

1. ショッピングカート
/cart
[購入手続きへ]ボタン
→2へ

2. ご注文内容の確認
/shopping

・代引
[注文する]ボタン
→3へ

・クレカ
[クレジットカード決済へ]ボタン
→4へ

3. 注文完了
/shopping/complete

4. クレジットカード決済
/shopping/gmo_payment
[選択したカードでご注文を確定する]
→3へ
[入力したカード情報でご注文を確定する]
→3へ

上記、4のボタンを押下し、決済実行のレスポンスがOKなら以下の受注情報を更新。
受注情報

受注日

受注ステータス(新規受付)

  • -

ShoppingController.php

confirm
processPurchase
setOrderUpdateData

  • -

PaymentController.php

mode=next

index

→creditProcess(registCreditProcess(登録クレジットカード)も同じ)
if ('POST' === $this->app['request']->getMethod()) {
if ("next" == $mode) {
return $this->creditCommit($Order, $data);

→creditCommit
$objPageHelper->modeAction($mode, $formData, $Order, $PaymentExtension, $this->app);
if ($objPageHelper->isComplete) {
$orderId = $objPageHelper->orderId;
$order = $this->app['eccube.repository.order']->findOneBy(array('id' => $orderId));

$this->changeOrderData($Order);

→changeOrderData
$Order->setOrderDate(new \DateTime());
$orderService = $this->app['eccube.service.order'];
$orderService->setStockUpdate($em, $Order);
if ($this->isGranted($this->app)) {
// 会員の場合、購入金額を更新
$orderService->setCustomerUpdate($em, $Order, $this->app->user());
}

$em->flush();
$em->getConnection()->commit();


PageHelper_Credit.php

→modeAction
switch ($mode) {
case 'next':
// 決済実行(ここでGMOと通信。レスポンスが取れないときは?)
PG_MULPAY_Client_Credit->doPaymentRequest

// 新規受付
$order_status = $app['config']['order_new'];
$order->setOrderStatus($app['eccube.repository.order_status']->find($order_status));
$app['orm.em']->persist($order);
$app['orm.em']->flush();

// ここで通信エラーの場合(登録クレジットカードのみ)
$cardSeq = $this->registCard($OrderExtension, $listParam, false);

$this->isComplete = true;