案2について強引にやってみました。参考までに。
data/class/pages/shopping/LC_Page_Shopping_payment.php
$this->arrErr = $this->lfCheckError($objFormParam, $this->arrPrices['subtotal'], $this->tpl_user_point);
// added
if (empty($this->arrErr)) {
if (USE_POINT === false) {
$use_point = 0;
} else {
if ($objFormParam->getValue('point_check') == '1') {
$use_point = $objFormParam->getValue('use_point');
} else {
$use_point = 0;
}
}
// カート集計を元に計算(代引手数料なし)
$arrCalcResults = $objCartSess->calculate($this->cartKey, $objCustomer,
$use_point,
$objPurchase->getShippingPref($this->is_multiple),
0,
$arrOrderTemp['discount'],
$objFormParam->getValue('deliv_id'),
$arrOrderTemp['order_pref'], // 税金計算の為に追加 注文者基準
$arrOrderTemp['order_country_id'] // 税金計算の為に追加 注文者基準
);
$payment_id = $objFormParam->getValue('payment_id');
// 現在の支払方法の名称
foreach ($this->arrPayment as $payment) {
if ($payment['payment_id'] == $payment_id) {
$payment_method = $payment['payment_method'];
break;
}
}
// 支払金額で支払方法を再設定
$objPayment = new SC_Helper_Payment_Ex();
$arrSelectedDeliv = $this->getSelectedDeliv($objCartSess, $deliv_id, $arrCalcResults['payment_total']);
$payments_total = $arrSelectedDeliv['arrPayment'];
$payment_method_found = false;
foreach ($payments_total as $payment) {
// 同じ支払い方法
if ($payment['payment_method'] == $payment_method) {
$payment_method_found = true;
$objFormParam->setValue('payment_id', $payment['payment_id']);
$this->arrPayment = $payments_total;
break;
}
}
if ($payment_method_found == false) {
$this->arrErr['payment_id'] = '※ 選択した支払い方法は、ご利用限度額内にないため、ご利用できません。<br>';
}
}
// added
default:
// FIXME 前のページから戻ってきた場合は別パラメーター(mode)で処理分岐する必要があるのかもしれない
$this->setFormParams($objFormParam, $arrOrderTemp, false, $this->arrShipping);
if (!$this->is_single_deliv) {
$deliv_id = $objFormParam->getValue('deliv_id');
} else {
$deliv_id = $this->arrDeliv[0]['deliv_id'];
}
if (!SC_Utils_Ex::isBlank($deliv_id)) {
$objFormParam->setValue('deliv_id', $deliv_id);
$arrSelectedDeliv = $this->getSelectedDeliv($objCartSess, $deliv_id);
$this->arrPayment = $arrSelectedDeliv['arrPayment'];
$this->arrDelivTime = $arrSelectedDeliv['arrDelivTime'];
$this->img_show = $arrSelectedDeliv['img_show'];
// added
$payment_id = $objFormParam->getValue('payment_id');
if ($payment_id != '') {
// 確認画面から戻った場合、payment_idを戻すため
$objPayment = new SC_Helper_Payment_Ex();
$payments_all = $objPayment->getList();
foreach ($payments_all as $payment) {
if ($payment['payment_id'] == $payment_id) {
$payment_method = $payment['payment_method'];
break;
}
}
foreach ($this->arrPayment as $payment) {
if ($payment['payment_method'] == $payment_method) {
$objFormParam->setValue('payment_id', $payment['payment_id']);
break;
}
}
}
// added
}
break;
/* changed
public function getSelectedDeliv(&$objCartSess, $deliv_id)
changed */
public function getSelectedDeliv(&$objCartSess, $deliv_id, $total=0)
// changed
{
$arrResults = array();
$arrResults['arrDelivTime'] = SC_Helper_Delivery_Ex::getDelivTime($deliv_id);
/* deleted
$total = $objCartSess->getAllProductsTotal($objCartSess->getKey());
deleted */
$payments_deliv = SC_Helper_Delivery_Ex::getPayments($deliv_id);
$objPayment = new SC_Helper_Payment_Ex();
// added
if ($total == 0) {
$payments_total = $objPayment->getList();
$arrPayment = array();
// ここで、同じ名称は、一つにする
foreach ($payments_total as $payment) {
if (in_array($payment['payment_id'], $payments_deliv)) {
$payment_found = false;
foreach ($arrPayment as $payment_exist) {
if ($payment_exist['payment_method'] == $payment['payment_method']) {
$payment_found = true;
break;
}
}
if ($payment_found == false) {
$arrPayment[] = $payment;
}
}
}
$arrResults['arrPayment'] = $arrPayment;
} else {
// added
$payments_total = $objPayment->getByPrice($total);
$arrPayment = array();
foreach ($payments_total as $payment) {
if (in_array($payment['payment_id'], $payments_deliv)) {
$arrPayment[] = $payment;
}
}
$arrResults['arrPayment'] = $arrPayment;
// added
}
// added
$arrResults['img_show'] = $this->hasPaymentImage($arrResults['arrPayment']);
return $arrResults;
}