バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

フロント機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
PONK
投稿日時: 2019/11/28 15:23
対応状況: −−−
新米
登録日: 2019/11/15
居住地:
投稿: 9
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ペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は65,967名です
総投稿数は98,076件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2605
4
nanasess
2101
5
umebius
1717
6
yuh
1612
7
red
1423
8
h_tanaka
1038
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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