はじめに
CS-CARTバージョンv4.10の現在でもそうなのですが。
オリコ決済で決済完了後、オリコ画面から、ECサイトへ自動転送されません。
また、コンビニ決済時、コンビニお支払い番号がメールで添付されません。
上記の2つの対応方法です。
本項では、アドオンのソースを直接修正する必要があるため、バージョンアップ時に注意が必要です。
上書きされないよう。元のアドオンをコピーしてアドオンIDを変えて運用するのがおすすめです。
CS-CARTに早く正式対応してほしいですね。
変更方法
下記のファイルを変更します。
\app\addons\oricopp_sw\func.php
fn_oppsw_get_params関数の最後の方に追加します。
AUTO_RETURN_WAITING_TIMEは、即時遷移でない場合、時間が指定できます。今回は即時で対応します
$params['AUTO_RETURN_FLAG'] = 1; #自動遷移 1:即時 2:AUTO_RETURN_WAITING_TIMEによる
// $params['AUTO_RETURN_WAITING_TIME'] = 1; #秒単位
$params['RESPONSE_TYPE'] = 1; #結果メッセージ拡張 1:拡張
次に下記のファイルに追加します。
\jp_extras\oricopp_sw\notify.php
場所はコメント 注文データ内の支払関連情報を取得とある上に下記のコードを追加します。
これは既存のソースを触りたくないので、一度こちらで支払関連情報を読み込み、変更、書き込みを行い、既存の支払関連情報を読み込みをさせます。
ここでは、メッセージを、notes変数に入れて対応します。
// 注文データ内の支払関連情報を取得
$payment_info = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = ?s", $order_id, 'P');
// 注文データ内の支払関連情報が存在する場合
if (!empty($payment_info)) {
if($payment_method_data['processor'] == "OricoPayment Plus(SimpleWeb)" && $payment_method_data['processor_params']['type']== "02") { #オリコでコンビニの場合
$payment_info = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = ?s", $order_id, 'P');
$info['orico_cvs_ReceiptNo'] = $_REQUEST['receiptNo'];
$info['orico_cvs_haraikomiUrl'] = $_REQUEST['haraikomiUrl'];
$timelimit_payment = (int)Registry::get('addons.oricopp_sw.timelimit_payment');
$info['orico_cvs_PayLimit'] = "ご注文日より".$timelimit_payment."日後が期限になります";
$notes = db_get_field("SELECT notes FROM ?:orders WHERE order_id = ?i", $order_id);
$update_order['notes'] = (!empty($notes) ? $notes . "\n" : '') . "コンビニ支払い情報"."\n"."お支払い番号:".$info['orico_cvs_ReceiptNo'] ."\n"."お支払い期限:".$info['orico_cvs_PayLimit']."\n"."お支払方法は下記を参考にしてください"."\n".$info['orico_cvs_haraikomiUrl']."\n";
db_query('UPDATE ?:orders SET ?u WHERE order_id = ?i', $update_order, $order_id);
}
}
さいごに
オリコ決済は、ベリトランスと同様のシステムなのでそのまま使用ができます。
その他、アクセス集中した場合の不具合など、対応もありますが今回は記載はしておりません。
オリコ決済の場合。リンクタイプなので在庫管理を行った場合、在庫独り占め、入荷待ちになってしまいますので、CS-CART管理画面、一般設定、注文ステータスである程度回避することができます。
CS-CARTの注文ステータスでは、ステータスによって在庫の減少、増減が割付できます。
Aステータス減少→Bステータス減少→Cステータス減少とあっても在庫は1度しか減少しません。増加も同様です。
CS-CARTのノーマルなステータスは注文受付→支払い確認済み→配送済みです。この流れにもう1つステータスを追加することで制御できることもあります。ただし 決済などのプラグインを修正する必要があります。
変更は下記の感じで
$force_notification = array();
$force_notification['C'] = false;
$force_notification['A'] = false;
$ret = fn_change_order_status($order_info['order_id'], "A", '', $force_notification);
$current_status = db_get_field("SELECT status FROM ?:orders WHERE order_id = ?i", $order_info['order_id']);
if($current_status == 'B') { #入荷待ちだったらエラーにする
$ret = false;
}
if($ret == false) {
fn_set_notification('E', __('jp_oppsw_error'), $err_msg);
$return_url = fn_oppsw_get_error_return_url();
fn_redirect($return_url, true);
}
上記では入荷待ちをエラーにする処理がありますが、エラーにしたくない場合は必要ありません。