バージョン選択

フォーラム

メニュー

オンライン状況

75 人のユーザが現在オンラインです。 (58 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 75
もっと...

サイト内検索

質問 > フロント機能 > Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について

フロント機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
PONK
投稿日時: 2019/11/28 15:23
対応状況: −−−
半人前
登録日: 2019/11/15
居住地:
投稿: 16
Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について
度々の投稿で申し訳ありません。
その後色々と試しておりますが、やはりポイント情報(値引き情報)が上手くアマゾンペイ決済プラグインに渡せていない状況です。

起こっている状況ですが、ポイントプラグインの利用ポイントの設定画面(/shopping/use_point)にて利用ポイントを入力した後、上の株式会社シロハチ様の投稿でご提案いただきましたルーティング設定の変更をしたアマゾンペイ決済プラグインの注文内容の確認画面に遷移した際に値引き情報が無くなってしまうという状況です。

更に詳しく調べましたところ、アマゾンペイ決済プラグインの注文内容の確認画面に遷移した直後は
$cartService = $app['eccube.service.cart'];
$cartService->lock();
より前に
$app['eccube.service.shopping']->getOrder($app['config']['order_processing'])->getDiscount();
にて値引き額(利用ポイント設定額)を取得できますが、
その後直ぐに自ページへリダイレクトしたような状況となり(ページが再読み込みされているようです)、その時点で
$app['eccube.service.shopping']->getOrder($app['config']['order_processing'])->getDiscount();
をしても戻ってくる値が「0」となってしまいます。

以下はアマゾンペイ決済プラグインのコントローラーとなります。

対応方法が分かる方がいらっしゃいましたら、何かご助言いただけますと幸いです。




<?php

/*
* This file is part of the FgAmazonPay
*
* Copyright (C) 2017 FourGlobe Co.,Ltd.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Plugin\FgAmazonPay\Controller;

use Eccube\Application;
use Eccube\Common\Constant;
use Eccube\Entity\Customer;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Plugin\FgAmazonPay\Exception\AmazonPayApiException;
use Symfony\Component\HttpFoundation\Request;

require_once(__DIR__.'/../vendor/amazon-pay-sdk-php/AmazonPay/Client.php');
use AmazonPay\Client;

class FgAmazonPayController
{
/**
* @var string 非会員用セッションキー
*/
private $sessionKey = 'eccube.front.shopping.nonmember';

/**
* @var string 非会員用セッションキー
*/
private $sessionCustomerAddressKey = 'eccube.front.shopping.nonmember.customeraddress';

/**
* @var string 複数配送警告メッセージ
*/
private $sessionMultipleKey = 'eccube.front.shopping.multiple';

/**
* @var string 受注IDキー
*/
private $sessionOrderKey = 'eccube.front.shopping.order.id';

/**
* FgAmazonPay画面
*
* @param Application $app
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function index(Application $app, Request $request)
{
$cartService = $app['eccube.service.cart'];
$cartService->lock();
$cartService->save();

// カートチェック
if (!$cartService->isLocked()) {
log_info('カートが存在しません');
// カートが存在しない、カートがロックされていない時はエラー
return $app->redirect($app->url('cart'));
}

// カートチェック
if (count($cartService->getCart()->getCartItems()) <= 0) {
log_info('カートに商品が入っていないためショッピングカート画面にリダイレクト');
// カートが存在しない時はエラー
return $app->redirect($app->url('cart'));
}

$PluginSetting = $app['fg_amazon_pay.repository.fg_amazon_pay_setting']->findOneBy(array(), array('id' => 'desc'));
$client_id = $PluginSetting->getClientKey();
$seller_id = $PluginSetting->getSellerKey();
$view_type = $PluginSetting->getViewType();
$have_confirm = $PluginSetting->getHaveConfirm();
if ($PluginSetting->getIsSandbox()) {
$widget_url = 'https://static-fe.payments-amazon.com/OffAmazonPayments/jp/sandbox/lpa/js/Widgets.js';
} else {
$widget_url = 'https://static-fe.payments-amazon.com/OffAmazonPayments/jp/lpa/js/Widgets.js';
}

// 登録済みの受注情報を取得
$Order = $app['eccube.service.shopping']->getOrder($app['config']['order_processing']);

// 初回アクセス(受注情報がない)の場合は, 受注情報を作成
if (is_null($Order)) {
/*-----------2018-06-28手数料追加start--------*/
$access_key = $PluginSetting->getAccessKey();
$secret_key = $PluginSetting->getSecretKey();
/*-----------2018-06-28手数料追加end--------*/
// 未ログインの場合, アマゾンのユーザ情報を利用する
if (!$app->isGranted('IS_AUTHENTICATED_FULLY')) {
$config = array(
'merchant_id' => $seller_id,
'access_key' => $access_key,
'secret_key' => $secret_key,
'client_id' => $client_id,
'region' => 'jp',
'sandbox' => $PluginSetting->getIsSandbox(),
);
$client = new Client($config);


//$aa = $_REQUEST;
//print_r($aa);


$PluginSetting = $app['fg_amazon_pay.repository.fg_amazon_pay_setting']->findOneBy(array(), array('id' => 'desc'));
$view_type = $PluginSetting->getViewType();
$client_id = $PluginSetting->getClientKey();
if(!$view_type && !isset($_GET['access_token']) ){
return $app->render('FgAmazonPay/Resource/template/element/popupFalse.twig', array("client_id"=>$client_id,"widget_url"=>$widget_url));
}

$amazon_userinfo = $client->getUserInfo($_GET['access_token']);

$Customer = new Customer();
$Customer->setName01(html_entity_decode($amazon_userinfo['name']));
$Customer->setEmail($amazon_userinfo['email']);
$Customer->setPref($app['eccube.repository.master.pref']->find(3));
} else {
$Customer = $app->user();
}

try {
// 受注情報を作成
$Order = $app['eccube.service.shopping']->createOrder($Customer);
$Order->setPayment(null);
$Order->setPaymentMethod('Amazon Pay');
$Order->setCharge(0);
} catch (CartException $e) {
log_error('初回受注情報作成エラー', array($e->getMessage()));
$app->addRequestError($e->getMessage());
return $app->redirect($app->url('cart'));
}

// セッション情報を削除
if (isset($this->sessionOrderKey)) {
$app['session']->remove($this->sessionOrderKey);
}
if (isset($this->sessionMultipleKey)) {
$app['session']->remove($this->sessionMultipleKey);
}
}
/*-----------2018-06-11手数料追加start--------*/
$payment = $app['eccube.repository.payment']->find("99");
$Order->setPayment($payment);
$Order->setCharge($payment->getCharge());
//$Order->setDeliveryFeeTotal(19);
//echo $Order->getDeliveryFeeTotal();
$Order = $app['eccube.service.shopping']->calculatePrice($Order);
//echo $Order->getDeliveryFeeTotal();
// 受注関連情報を最新状態に更新
//$app['orm.em']->refresh($Order);
/*-----------2018-06-11手数料追加end--------------*/

// form作成
$builder = $app['eccube.service.shopping']->getShippingFormBuilder($Order);

$event = new EventArgs(
array(
'builder' => $builder,
'Order' => $Order,
),
$request
);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_SHOPPING_INDEX_INITIALIZE, $event);

$form = $builder->getForm();

/*-----------2018-06-11手数料追加start--------*/
/*
* 配送業者変更処理
*/
if ($_SERVER['REQUEST_METHOD'] == "POST") {
//print_r($_POST);exit;
/*
Array ( [order_reference_id] => S03-7330465-5163350 [shopping] => Array ( [_token] => PR4iEttg0iKqCvJem-AeypOWUlbQLNlBVsHjJNoqRYM [shippings] => Array ( [0] => Array ( [delivery] => 1 [shippingDeliveryDate] => [deliveryTime] => ) ) [message] => ) )
*/
$config = array(
'merchant_id' => $seller_id,
'access_key' => $access_key,
'secret_key' => $secret_key,
'client_id' => $client_id,
'region' => 'jp',
'sandbox' => $PluginSetting->getIsSandbox(),
);
$client = new Client($config);

$result = $client->getOrderReferenceDetails(array(
'AddressConsentToken' => $_POST['_token'],
'amazon_order_reference_id' => $_POST['order_reference_id'],
));
$response_values = $result->toArray();
if ($response_values['ResponseStatus'] != 200) {
log_error('Amazon Pay API エラー', array('getOrderReferenceDetails() に失敗'));
throw new \Exception('Amazon Pay API の処理に失敗しました');
}else{
$destination = $response_values['GetOrderReferenceDetailsResult']['OrderReferenceDetails']['Destination']['PhysicalDestination'];
//echo $destination['StateOrRegion'];exit;
$pref = $app['eccube.repository.master.pref']->findOneBy(array('name' => $destination['StateOrRegion']));
}

log_info('配送業者変更処理開始', array($Order->getId()));
$form->handleRequest($request);
$data = $form->getData();

$shippings = $data['shippings'];

$productDeliveryFeeTotal = 0;
$BaseInfo = $app['eccube.repository.base_info']->get();

foreach ($shippings as $Shipping) {
$Delivery = $Shipping->getDelivery();

if ($Delivery) {
$deliveryFee = $app['eccube.repository.delivery_fee']->findOneBy(array(
'Delivery' => $Delivery,
'Pref' => $pref
));

// 商品ごとの配送料合計
if ($BaseInfo->getOptionProductDeliveryFee() === Constant::ENABLED) {
$productDeliveryFeeTotal += $app['eccube.service.shopping']->getProductDeliveryFee($Shipping);
}
if($pref){
$pref_fee = $deliveryFee->getFee();
}else{
$pref_fee = 0;
}
$Shipping->setDeliveryFee($deliveryFee);
$Shipping->setShippingDeliveryFee( $pref_fee + $productDeliveryFeeTotal);
$Shipping->setShippingDeliveryName($Delivery->getName());

}
}
$message = $data['message'];

$Order->setDeliveryFeeTotal($app['eccube.service.shopping']->getShippingDeliveryFeeTotal($shippings));

// 合計金額の再計算
$Order = $app['eccube.service.shopping']->getAmount($Order);

// 受注関連情報を最新状態に更新
$app['orm.em']->flush();

$event = new EventArgs(
array(
'form' => $form,
'Order' => $Order,
),
$request
);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_SHOPPING_DELIVERY_COMPLETE, $event);

log_info('配送業者変更処理完了', array($Order->getId()));
}
/*-----------2018-06-11手数料追加end--------------*/

if ($Order->getTotalPrice() < 0) {
// 合計金額がマイナスの場合、エラー
log_info('受注金額マイナスエラー', array($Order->getId()));
$message = $app->trans('shopping.total.price', array('totalPrice' => number_format($Order->getTotalPrice())));
$app->addError($message);

return $app->redirect($app->url('shopping_error'));
}

/*-----------2018-06-11手数料追加start--------*/
$delivery_p = "?";
$delivery_idx = 0;
foreach ($_GET as $key => $item) {
if($key == 'delivery') continue;
if($delivery_idx > 0) $delivery_p = $delivery_p."&";
$delivery_p = $delivery_p . $key."=".$item;
$delivery_idx++;
}
/*-----------2018-06-11手数料追加end--------------*/

return $app->render('FgAmazonPay/Resource/template/index.twig', array(
'form' => $form->createView(),
'Order' => $Order,
'delivery_p' => $delivery_p,
'seller_id' => $seller_id,
'client_id' => $client_id,
'widget_url' => $widget_url,
'view_type' => $view_type,
'have_confirm' =>$have_confirm,
'REQUEST_METHOD' =>$_SERVER['REQUEST_METHOD'],
));
}

/**
* 配送業者選択処理
*/
public function delivery(Application $app, Request $request)
{
// カートチェック
if (!$app['eccube.service.cart']->isLocked()) {
// カートが存在しない、カートがロックされていない時はエラー
log_info('カートが存在しません');
return $app->redirect($app->url('cart'));
}

$Order = $app['eccube.service.shopping']->getOrder($app['config']['order_processing']);
if (!$Order) {
log_info('購入処理中の受注情報がないため購入エラー');
$app->addError('front.shopping.order.error');
return $app->redirect($app->url('shopping_error'));
}

if ('POST' !== $request->getMethod()) {
return $app->redirect($app->url('shopping'));
}

$builder = $app['eccube.service.shopping']->getShippingFormBuilder($Order);
$form = $builder->getForm();
$form->handleRequest($request);

$PluginSetting = $app['fg_amazon_pay.repository.fg_amazon_pay_setting']->findOneBy(array(), array('id' => 'desc'));
$client_id = $PluginSetting->getClientKey();
$seller_id = $PluginSetting->getSellerKey();
$have_confirm = $PluginSetting->getHaveConfirm();
if ($PluginSetting->getIsSandbox()) {
$widget_url = 'https://static-fe.payments-amazon.com/OffAmazonPayments/jp/sandbox/lpa/js/Widgets.js';
} else {
$widget_url = 'https://static-fe.payments-amazon.com/OffAmazonPayments/jp/lpa/js/Widgets.js';
}

if ($form->isSubmitted()) {
log_info('配送業者変更処理開始', array($Order->getId()));

$data = $form->getData();

$access_key = $PluginSetting->getAccessKey();
$secret_key = $PluginSetting->getSecretKey();

$config = array(
'merchant_id' => $seller_id,
'access_key' => $access_key,
'secret_key' => $secret_key,
'client_id' => $client_id,
'region' => 'jp',
'sandbox' => $PluginSetting->getIsSandbox(),
);
$client = new Client($config);

$shippings = $data['shippings'];

$productDeliveryFeeTotal = 0;
$BaseInfo = $app['eccube.repository.base_info']->get();

$result = $client->getOrderReferenceDetails(array(
'merchant_id' => $seller_id,
'amazon_order_reference_id' => $_POST['order_reference_id'],
));
$response_values = $result->toArray();
if ($response_values['ResponseStatus'] != 200) {
log_error('Amazon Pay API エラー', array('getOrderReferenceDetails() に失敗'));
throw new \Exception('Amazon Pay API の処理に失敗しました');
}
$destination = $response_values['GetOrderReferenceDetailsResult']['OrderReferenceDetails']['Destination']['PhysicalDestination'];
$pref = $app['eccube.repository.master.pref']->findOneBy(array('name' => $destination['StateOrRegion']));

foreach ($shippings as $Shipping) {
$Delivery = $Shipping->getDelivery();

if ($Delivery) {
$deliveryFee = $app['eccube.repository.delivery_fee']->findOneBy(array(
'Delivery' => $Delivery,
'Pref' => $pref,
));

// 商品ごとの配送料合計
if ($BaseInfo->getOptionProductDeliveryFee() === Constant::ENABLED) {
$productDeliveryFeeTotal += $app['eccube.service.shopping']->getProductDeliveryFee($Shipping);
}

$Shipping->setDeliveryFee($deliveryFee);
$Shipping->setShippingDeliveryFee($deliveryFee->getFee() + $productDeliveryFeeTotal);
$Shipping->setShippingDeliveryName($Delivery->getName());
}
}

$message = $data['message'];

$Order->setPayment(NULL);
$Order->setPaymentMethod('Amazon Pay');
$Order->setMessage($message);
$Order->setCharge(0);

$Order->setDeliveryFeeTotal($app['eccube.service.shopping']->getShippingDeliveryFeeTotal($shippings));

// 合計金額の再計算
$Order = $app['eccube.service.shopping']->getAmount($Order);

// 受注関連情報を最新状態に更新
$app['orm.em']->flush();

log_info('配送業者変更処理完了', array($Order->getId()));
return $app->redirect($app->url('plugin_FgAmazonPay_confirm'));
}

log_info('配送業者変更入力チェックエラー', array($Order->getId()));
return $app->render('FgAmazonPay/Resource/template/index.twig', array(
'form' => $form->createView(),
'Order' => $Order,
'seller_id' => $seller_id,
'client_id' => $client_id,
'widget_url' => $widget_url,
'have_confirm' => $have_confirm,
));
}

public function confirm(Application $app, Request $request)
{
$cartService = $app['eccube.service.cart'];

// カートチェック
if (!$cartService->isLocked()) {
// カートが存在しない、カートがロックされていない時はエラー
log_info('カートが存在しません');
return $app->redirect($app->url('cart'));
}

$Order = $app['eccube.service.shopping']->getOrder($app['config']['order_processing']);
if (!$Order) {
log_info('購入処理中の受注情報がないため購入エラー');
$app->addError('front.shopping.order.error');
return $app->redirect($app->url('shopping_error'));
}

// form作成
$builder = $app['eccube.service.shopping']->getShippingFormBuilder($Order);
$form = $builder->getForm();
$form->handleRequest($request);

$PluginSetting = $app['fg_amazon_pay.repository.fg_amazon_pay_setting']->findOneBy(array(), array('id' => 'desc'));
$client_id = $PluginSetting->getClientKey();
$seller_id = $PluginSetting->getSellerKey();
if ($PluginSetting->getIsSandbox()) {
$widget_url = 'https://static-fe.payments-amazon.com/OffAmazonPayments/jp/sandbox/lpa/js/Widgets.js';
} else {
$widget_url = 'https://static-fe.payments-amazon.com/OffAmazonPayments/jp/lpa/js/Widgets.js';
}

if ($form->isSubmitted()) {
$data = $form->getData();

log_info('購入処理開始', array($Order->getId()));


$access_key = $PluginSetting->getAccessKey();
$secret_key = $PluginSetting->getSecretKey();
$have_confirm = $PluginSetting->getHaveConfirm();

$config = array(
'merchant_id' => $seller_id,
'access_key' => $access_key,
'secret_key' => $secret_key,
'client_id' => $client_id,
'region' => 'jp',
'sandbox' => $PluginSetting->getIsSandbox(),
);
$client = new Client($config);

// トランザクション制御
$em = $app['orm.em'];
$em->getConnection()->beginTransaction();
try {

/*-----------2018-06-11手数料追加start--------*/
$payment = $app['eccube.repository.payment']->find("99");
$Order->setPayment($payment);
$Order->setCharge($payment->getCharge());
$Order = $app['eccube.service.shopping']->calculatePrice($Order);
$Order->setPaymentMethod('Amazon Pay');
/*-----------2018-06-11手数料追加end--------------*/

$BaseInfo = $app['eccube.repository.base_info']->get();

// お問い合わせ、配送時間などのフォーム項目をセット
$app['eccube.service.shopping']->setFormData($Order, $data);

$result = $client->setOrderReferenceDetails(array(
'merchant_id' => $seller_id,
'amazon_order_reference_id' => $_POST['order_reference_id'],
'amount' => $Order->getPaymentTotal(),
'currency_code' => 'JPY',
'seller_note' => $PluginSetting->getMailText(),
'seller_order_id' => $Order->getId(),
'store_name' => $BaseInfo->getShopName(),
));
$response_values = $result->toArray();
if ($response_values['ResponseStatus'] != 200) {
log_error('Amazon Pay API エラー', array('setOrderReferenceDetails() に失敗'));
throw new AmazonPayApiException('Amazon Pay API の処理に失敗しました');
}

$result = $client->confirmOrderReference(array(
'merchant_id' => $seller_id,
'amazon_order_reference_id' => $_POST['order_reference_id'],
));
$response_values = $result->toArray();
if ($response_values['ResponseStatus'] != 200) {
log_error('Amazon Pay API エラー', array('confirmOrderReference() に失敗'));
throw new AmazonPayApiException('Amazon Pay API の処理に失敗しました');
}

$result = $client->getOrderReferenceDetails(array(
'merchant_id' => $seller_id,
'amazon_order_reference_id' => $_POST['order_reference_id'],
));
$response_values = $result->toArray();
if ($response_values['ResponseStatus'] != 200) {
log_error('Amazon Pay API エラー', array('getOrderReferenceDetails() に失敗'));
throw new AmazonPayApiException('Amazon Pay API の処理に失敗しました');
}
$destination = $response_values['GetOrderReferenceDetailsResult']['OrderReferenceDetails']['Destination']['PhysicalDestination'];

$pref = $app['eccube.repository.master.pref']->findOneBy(array('name' => $destination['StateOrRegion']));
$zip_code = preg_replace('/-/', '', $destination['PostalCode']);

if (is_null($Order->getCustomer())) {
$Order->setPref($pref);
$Order->setZipCode($zip_code);
$Order->setZip01(substr($zip_code, 0, 3));
$Order->setZip02(substr($zip_code, 3, 4));
$Order->setAddr01($destination['City'] . $destination['AddressLine1']);
if (isset($destination['AddressLine2'])) {
$Order->setAddr02($destination['AddressLine2']);
} else {
$Order->setAddr02('');
}
if (preg_match('/^(\d+)-(\d+)-(\d{4})$/', $destination['Phone'], $matches)) {
$Order->setTel01($matches[1]);
$Order->setTel02($matches[2]);
$Order->setTel03($matches[3]);
} elseif (preg_match('/^(0[36])-?(\d{4})-?(.*)$/', $destination['Phone'], $matches)) {
$Order->setTel01($matches[1]);
$Order->setTel02($matches[2]);
$Order->setTel03($matches[3]);
} elseif (preg_match('/^(\d{3})-?(\d*)-?(\d{4})$/', $destination['Phone'], $matches)) {
$Order->setTel01($matches[1]);
$Order->setTel02($matches[2]);
$Order->setTel03($matches[3]);
} else {
$Order->setTel01($destination['Phone']);
}
}
/*-----------2018-06-11手数料追加start--------*/
/*
$Order->setPayment(null);
$Order->setPaymentMethod('Amazon Pay');
$Order->setCharge(0);
*/
/*-----------2018-06-11手数料追加end--------------*/
foreach ($Order->getShippings() as $shipping) {
$shipping->setPref($pref);
$shipping->setZipCode($zip_code);
$shipping->setZip01(substr($zip_code, 0, 3));
$shipping->setZip02(substr($zip_code, 3, 4));
$shipping->setAddr01($destination['City'] . $destination['AddressLine1']);
if (isset($destination['AddressLine2'])) {
$shipping->setAddr02($destination['AddressLine2']);
} else {
$shipping->setAddr02('');
}
if (preg_match('/^(\d+)-(\d+)-(\d{4})$/', $destination['Phone'], $matches)) {
$shipping->setTel01($matches[1]);
$shipping->setTel02($matches[2]);
$shipping->setTel03($matches[3]);
} elseif (preg_match('/^(0[36])-?(\d{4})-?(.*)$/', $destination['Phone'], $matches)) {
$shipping->setTel01($matches[1]);
$shipping->setTel02($matches[2]);
$shipping->setTel03($matches[3]);
} elseif (preg_match('/^(\d{3})-?(\d*)-?(\d{4})$/', $destination['Phone'], $matches)) {
$shipping->setTel01($matches[1]);
$shipping->setTel02($matches[2]);
$shipping->setTel03($matches[3]);
} else {
$shipping->setTel01($destination['Phone']);
}
$shipping->setName01($destination['Name']);
$shipping->setName02('');
$shipping->setKana01('');
$shipping->setKana02('');
}

// オーソリ API 呼び出し
$authorization_reference_id = sprintf('%d-%s', $Order->getId(), uniqid());
$result = $client->authorize(array(
'merchant_id' => $seller_id,
'amazon_order_reference_id' => $_POST['order_reference_id'],
'authorization_amount' => $Order->getPaymentTotal(),
'currency_code' => 'JPY',
'transaction_timeout' => 0,
'authorization_reference_id' => $authorization_reference_id,
'capture_now' => false,
));
$response_values = $result->toArray();
if ($response_values['ResponseStatus'] != 200) {
log_error('Amazon Pay API エラー', array('authorize() に失敗'));
throw new AmazonPayApiException('Amazon Pay API の処理に失敗しました');
}
if ($response_values['AuthorizeResult']['AuthorizationDetails']['AuthorizationStatus']['State'] == 'Declined') {
// オーソリ処理で承認がえられなかった場合
if ($response_values['AuthorizeResult']['AuthorizationDetails']['AuthorizationStatus']['ReasonCode'] == 'AmazonRejected' ||
$response_values['AuthorizeResult']['AuthorizationDetails']['AuthorizationStatus']['ReasonCode'] == 'InvalidPaymentMethod') {
$app->addError('オーソリ処理が拒否されました。他のお支払い方法でためして下さい。');
} elseif ($response_values['AuthorizeResult']['AuthorizationDetails']['AuthorizationStatus']['ReasonCode'] == 'TransactionTimedOut' ||
$response_values['AuthorizeResult']['AuthorizationDetails']['AuthorizationStatus']['ReasonCode'] == 'ProcessingFailure') {
$app->addError('オーソリ処理が完了出来ませんでした。しばらく待ってから、もう一度注文してください。');
} else {
log_error('Amazon Pay API エラー', array('authorize() 結果ステータスが不明なステータスです'));
throw new AmazonPayApiException('Amazon Pay API の処理に失敗しました');
}

$em->getConnection()->rollback();
return $app->redirect($app->url('plugin_FgAmazonPay_confirm'));
} elseif ($response_values['AuthorizeResult']['AuthorizationDetails']['AuthorizationStatus']['State'] == 'Open') {
// 購入処理
$app['eccube.service.shopping']->processPurchase($Order);

///////////////////////////////////////
/* 注文状態 1:注文処理中(Open) 2:オーソリ済 3:売上請求済 4:返金済 */
$app['db']->insert('dtb_order_amazonpay', array(
'order_id' => $Order->getId(),
'amazon_pay_no' => substr($response_values['AuthorizeResult']['AuthorizationDetails']['AmazonAuthorizationId'],0,-8),
'amazon_authorization_id' => $response_values['AuthorizeResult']['AuthorizationDetails']['AmazonAuthorizationId'],
'amazon_amount' => $Order->getPaymentTotal(),
'amazon_pay_status' => '2',
'create_date' => date("Y-m-d H:i:s"),
'update_date' => date("Y-m-d H:i:s")
));
$TargetOrder = $app['eccube.repository.order']->find($Order->getId());
$TargetOrder->setOrderStatus($app['eccube.repository.order_status']->find($app['config']['order_pre_end']));//仮売上 or 売上 -> 入金済み
//$em->flush();

$sale_type = $PluginSetting->getSaleType();//1:仮売上 :売上
if(!$sale_type){
$result = $client->capture(array(
'merchant_id' => $seller_id,
'amazon_authorization_id' => $response_values['AuthorizeResult']['AuthorizationDetails']['AmazonAuthorizationId'],
'capture_amount' => $TargetOrder->getPaymentTotal(),
'currency_code' => 'JPY',
'capture_reference_id' => date("Ymd").$Order->getId()
));
$response_values = $result->toArray();
if ($response_values['ResponseStatus'] != 200) {
log_error('Amazon Pay API エラー', array('capture() に失敗'));
log_error('Amazon Pay API エラー', $response_values);
throw new AmazonPayApiException('Amazon Pay API の処理に失敗しました');
}
}
$em->flush();
$em->getConnection()->commit();
$app['db']->update('dtb_order', array(
'payment_id' => '99'
), array(
'order_id' => $Order->getId()
));
$em->getConnection()->commit();
///////////////////////////////////////


log_info('購入処理完了', array($Order->getId()));

} else {
throw new AmazonPayApiException('System Error: オーソリ処理に失敗しました。');
}
} catch (AmazonPayApiException $e) {

log_error('Amazon Pay API エラー', array($e->getMessage()));

$em->getConnection()->rollback();

$app->log($e);
$app->addError($e->getMessage());

return $app->redirect($app->url('plugin_FgAmazonPay_confirm'));
} catch (ShoppingException $e) {

log_error('購入エラー', array($e->getMessage()));

$em->getConnection()->rollback();

$app->log($e);
$app->addError($e->getMessage());

return $app->redirect($app->url('plugin_FgAmazonPay_confirm'));
} catch (\Exception $e) {
log_error('予期しないエラー', array($e->getMessage()));

$em->getConnection()->rollback();

$app->log($e);

$app->addError('front.shopping.system.error');
return $app->redirect($app->url('shopping_error'));
}

// カート削除
$app['eccube.service.cart']->clear()->save();

// 受注IDをセッションにセット
$app['session']->set($this->sessionOrderKey, $Order->getId());

// メール送信
$MailHistory = $app['eccube.service.shopping']->sendOrderMail($Order);

// 完了画面表示
return $app->redirect($app->url('shopping_complete'));
}

log_info('購入チェックエラー', array($Order->getId()));

return $app->render('FgAmazonPay/Resource/template/index.twig', array(
'form' => $form->createView(),
'Order' => $Order,
'seller_id' => $seller_id,
'client_id' => $client_id,
'widget_url' => $widget_url,
'have_confirm' => $have_confirm,
));
}
}
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について PONK 2019/11/21 16:15
     Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について 468 2019/11/25 10:22
       Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について PONK 2019/11/26 17:29
       » Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について PONK 2019/11/28 15:23
           Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について 468 2019/11/28 17:12
             Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について PONK 2019/11/28 17:57
               Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について 468 2019/11/28 19:23
                 Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について PONK 2019/11/28 20:37
                   Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について 468 2019/11/29 10:02
                     Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について PONK 2019/11/29 10:32
                       Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について 468 2019/11/29 10:55
                         Re: Pointプラグイン(Point 1.0.0)とAmazon Pay 決済プラグイン(FgAmazonPay 2.0.0)の共存について PONK 2019/11/29 11:52

 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は89,099名です
総投稿数は110,036件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1649
8
red
1570
9
mcontact
1298
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.