# モジュール宣言/変数初期化 use strict; my %cf; #┌───────────────────────────────── #│ WEB MART : init.cgi - 2016/05/08 #│ http://www.kent-web.com/ #└───────────────────────────────── $cf{version} = 'Web Mart v6.03'; #┌───────────────────────────────── #│ [注意事項] #│ 1. このプログラムはフリーソフトです。このプログラムを使用した #│ いかなる損害に対して作者は一切の責任を負いません。 #│ 2. 設置に関する質問はサポート掲示板にお願いいたします。 #│ 直接メールによる質問は一切お受けいたしておりません。 #└───────────────────────────────── #=========================================================== # ■ 基本設定 #=========================================================== # テストモード(イオン接続) $cf{test_mode} = 0; # 管理用パスワード $cf{password} = 'milktea88'; # 消費税方式 # 0 : 内税方式 # 0以外 : 外税方式にて%単位で指定 $cf{tax_per} = 0; # 暗号化キー(適当な英数字を指定) # → 注文者情報をクッキー保存する際の暗号化キー $cf{passphrase} = "passphrase"; # 管理者アドレス $cf{master} = 'a-mama@qc5.so-net.ne.jp'; # sendmailパス【サーバパス】 $cf{sendmail} = '/usr/sbin/sendmail'; # sendmailの -fオプション (0=no 1=yes) # → サーバ仕様として必要な場合 $cf{sendm_f} = 0; # 買物プログラムURL 【URLパス】 $cf{mart_cgi} = './mart.cgi'; # 注文プログラムURL【URLパス】 $cf{order_cgi} = './order.cgi'; # 検索プログラムURL【URLパス】 $cf{find_cgi} = './find.cgi'; # 管理プログラムURL 【URLパス】 $cf{admin_cgi} = './admin.cgi'; # データファイル【サーバパス】 $cf{datfile} = './data/mart.dat'; # 注文番号ファイル【サーバパス】 $cf{numfile} = './data/num.dat'; # 特商法データファイル【サーバパス】 $cf{lawfile} = './data/law.dat'; # ログディレクトリ【サーバパス】 $cf{logdir} = './data/log'; # 一時ファイル $cf{tmpdir} = './data/tmp'; # 共用ディレクトリ 【URLパス】 $cf{cmnurl} = './cmn'; # 在庫管理を行う (0=no 1=yes) $cf{stock} = 1; # 在庫ファイル【サーバパス】 $cf{stkfile} = './data/stock.dat'; # テンプレートディレクトリ【サーバパス】 $cf{tmpldir} = "./tmpl"; # クッキー(顧客情報)をSSL対応 (0=no 1=yes) # → SSL配下でクッキー(顧客情報)を使う場合secure属性を付加 $cf{ssl_cookie} = 0; # 戻り先URL【URLパス】 $cf{home} = "/"; # 都道府県 # → 県別に送料を指定する時はコンマの後に送料を指定 # → 送料が不要な場合は送料部分を 0 とする $cf{pref} = [ '', '北海道,1364', '青森県,1034', '岩手県,1034', '宮城県,924', '秋田県,1034', '山形県,924', '福島県,924', '茨城県,924', '栃木県,924', '群馬県,924', '埼玉県,924', '千葉県,924', '東京都,924', '神奈川県,924', '新潟県,924', '富山県,924', '石川県,924', '福井県,924', '山梨県,924', '長野県,924', '岐阜県,924', '静岡県,924', '愛知県,924', '三重県,924', '滋賀県,1034', '京都府,1034', '大阪府,1034', '兵庫県,1034', '奈良県,1034', '和歌山県,1034', '鳥取県,1144', '島根県,1144', '岡山県,1144', '広島県,1144', '山口県,1144', '徳島県,1144', '香川県,1144', '愛媛県,1144', '高知県,1144', '福岡県,1364', '佐賀県,1364', '長崎県,1364', '熊本県,1364', '大分県,1364', '宮崎県,1364', '鹿児島県,1364', '沖縄県,1364', ]; # 送料の無料サービスの合計金額 # → 一定金額以上の場合に送料を無料 # → この機能を使用しない場合は 0 にする $cf{cari_serv} = 11000; # 宅配便 $cf{cari_serv2} = 3180; # メール便 # 配送方法の選択 $cf{ship} = ['宅配便', 'メール便']; # 支払方法の指定(複数指定可) # → 支払い別に手数料を指定する時はコンマの後に送料を指定 # → 手数料が不要な場合は手数料部分を 0 とする $cf{payment} = [ '銀行振込,0', '郵便振替,0', '代金引換,330', ]; # メール便送料 $cf{mail_bin} = 185; # 支払手数料は税込み (0=no 1=yes) $cf{paym_tax} = 1; # 配達時間の選択 $cf{deli} = ['午前中', '12-14時', '14-16時', '16-18時', '18-20時', '20-21時']; # 商品の属性情報(複数指定可) # → 買物カゴで指定するname値とその呼称をコンマで区切る # → name値は英数字、アンダーのみ使用可 $cf{options} = [ "size,サイズ", "color,カラー", "present,プレゼント", "length,前髪の長さ", "downy,産毛&もみあげの有無", "all,安心オールセットの希望", # 'color_size,カラーxサイズ', # 'length,前髪の長さ', # 'select1,選択品1', # 'select2,選択品2', # 'straight,ストレート処理', ]; # 外税・内税の表記(検索画面) # → 順に、内税、外税 $cf{tax_class} = ['税込み', '税別']; # 商品の属性情報の正当性をチェックする # → 管理画面で入力する属性情報の正当性を、購入時にチェックする # → 0=no 1=yes $cf{chk_ops} = 0; # クッキーID # → 順に、買物データ、住所氏名情報、検索時戻り先 $cf{cookie_cart} = 'wmart_cart'; $cf{cookie_cust} = 'wmart_cust'; $cf{cookie_find} = 'wmart_find'; # ホスト取得方法 # 0 : gethostbyaddr関数を使わない # 1 : gethostbyaddr関数を使う $cf{gethostbyaddr} = 0; # 管理画面のページ当り商品表示件数 $cf{pageLog} = 20; # 買物カゴの中身画面での数量調節の範囲(プルダウン式) # → 必ず 1 以上の値にすること $cf{max_select} = 10; # 1度の投稿で受理できる最大サイズ (bytes) # → 1024Byte = 100KB $cf{maxdata} = 307200; # --- [ ここより下は検索画面の設定 ] # 検索結果の一画面表示数 $cf{pg_max} = 10; # 画像ファイルの拡張子 # → ドットは書かない $cf{img_ext} = 'jpg'; # 画像ファイルのディレクトリ # → 順に、サーバパス、URLパス $cf{imgdir} = "./img"; $cf{imgurl} = "./img"; # --- [ ここより下はゼウス (ZEUS) クレジット決済の設定 ] # # [ イオンサービスを利用する ] # 0 : しない # 1 : する $cf{zeus_serv} = 1; # ゼウス契約NO (クレジット決済用IPコード) # → $cf{zeus_serv} が 1, 2, 3, 4 の場合必須 $cf{zeus_num} = '2achipap'; # 成功/失敗/キャンセルURL $cf{suc_url} = 'https://www.attipapa.net/'; $cf{fai_url} = 'https://www.attipapa.net/'; $cf{can_url} = 'https://www.attipapa.net/'; #=========================================================== # ■ 設定完了 #=========================================================== # 再定義 if ($cf{zeus_serv} >= 1) { push(@{$cf{payment}},"クレジット [連携して決済します],0"); } #if ($cf{zeus_serv} == 2 or $cf{zeus_serv} == 4) { push(@{$cf{payment}},"銀行決済 [連携して決済します],0"); } #if ($cf{zeus_serv} >= 3) { push(@{$cf{payment}},"コンビニ決済 [連携して決済します],0"); } # 接続先 if ($cf{test_mode} != 1) { # 本番 $cf{aeon_url} = 'https://www.payment.aeon.co.jp/online/arg0000.do'; } else { # テスト $cf{aeon_url} = 'https://www-t.payment.aeon.co.jp/online/arg0000.do'; } # 設定内容を返す sub set_init { return %cf; } #----------------------------------------------------------- # フォームデコード #----------------------------------------------------------- sub parse_form { my $cgi = shift; my %in; foreach ( $cgi->param() ) { my $val = $cgi->param($_); if ($_ ne 'upfile') { # 変換 $val =~ s/&/&/g; $val =~ s//>/g; $val =~ s/"/"/g; $val =~ s/'/'/g; $val =~ s/-/-/g; $val =~ s/~/~/g; $val =~ s/\r\n/\t/g; $val =~ s/[\r\n]/\t/g; } $in{$_} = $val; } return %in; } #----------------------------------------------------------- # 特定商取引法 #----------------------------------------------------------- sub law_data { open(IN,"$cf{lawfile}") or error("open err: $cf{lawfile}"); my @log = ; close(IN); open(IN,"$cf{tmpldir}/law.html") or error("open err: law.html"); my $tmpl = join('', ); close(IN); $tmpl =~ s/!cmnurl!/$cf{cmnurl}/g; my ($head,$loop,$foot) = $tmpl =~ m|(.+)(.+)(.+)|s ? ($1,$2,$3) : error('bad template'); print "Content-type: text/html; charset=utf-8\n\n"; print $head; for (@log) { chomp; my ($no,$key,$val) = split(/\t/); my $tmp = $loop; $tmp =~ s/!key!/$key/; $tmp =~ s/!val!/$val/; print $tmp; } print $foot; exit; } #----------------------------------------------------------- # エラー処理 #----------------------------------------------------------- sub error { my $msg = shift; open(IN,"$cf{tmpldir}/error.html") or die; my $tmpl = join('', ); close(IN); $tmpl =~ s/!cmnurl!/$cf{cmnurl}/g; $tmpl =~ s/!(\w+_cgi)!/$cf{$1}/g; $tmpl =~ s/!message!/$msg/g; print "Content-type: text/html; charset=utf-8\n\n"; print $tmpl; exit; } #----------------------------------------------------------- # フッター #----------------------------------------------------------- sub footer { my $foot = shift; # 著作権表記(削除・改変禁止) my $copy; if ($foot =~ /(.+)(<\/body[^>]*>.*)/si) { print "$1$copy$2\n"; } else { print "$foot$copy\n"; print "\n"; } exit; } #----------------------------------------------------------- # back属性チェック #----------------------------------------------------------- sub chk_back { my $back = shift; if ($back !~ /^https?:\/\/[\w-.!~*'();\/?:\@&=+\$,%#]+$/i) { error("BACK属性が不正です"); } } #----------------------------------------------------------- # 商品データ認識 #----------------------------------------------------------- sub get_data { my %cart; open(IN,"$cf{datfile}") or error("open err: $cf{datfile}"); while () { chomp; my ($code) = (split(/<>/))[0]; $cart{$code} = $_; } close(IN); return %cart; } #----------------------------------------------------------- # コンマ区切 #----------------------------------------------------------- sub comma { local($_) = @_; 1 while s/(.*\d)(\d\d\d)/$1,$2/; $_; } #----------------------------------------------------------- # 消費税 #----------------------------------------------------------- sub tax_per { my $all = shift; my $kei = $all; my $tax; if ($cf{tax_per} != 0) { $tax = int($all * $cf{tax_per} / 100); $all += $tax; } return ($kei,$tax,$all); } 1;