プラグイン その他

その他

  • カスタマイズの利便が要求される幾つかの機能は、execute 型や plugin 型とは別にプラグイン化されています。

決済プラグイン

  • 決済処理用のプラグインです。
    • 決済処理がプラグイン化されていることにより、決済の追加が容易になります。
  • 使用する決済の ID は以下の設定に記載されなければなりません。
$config->{payment}{id_list}
  • $config->{payment}{id_list} を設定しているファイルは以下の通りです。
[Apache_server]
 └ [cgi-bin]
    └ [config]
       └ [common]
          └ config_common.pl
  • 以下は設定の例です。
# 有効にする決済のID
   # 決済処理はモジュールによって実施されます。そのIDを指定してください。
   # 新規に決済を追加するにはモジュールの作成が必要です。
   # [代引決済を有効にする場合]
   # $config->{payment}{id_list} = ['delivery_collect'];
   # [ZEUS決済を追加する場合]
   # $config->{payment}{id_list} = ['delivery_collect','zeus'];
   # 利用できるIDは以下の通りです。
   # delivery_collect : 代金引換
   # bank_transfer : 銀行振込
   # postal_transfer : ゆうちょ銀行払込
   # zeus : ZEUS決済 Link Point 方式
   # ※ ZEUS決済の他の方式について導入されるショップは開発元までご相談
   # ください。
   $config->{payment}{id_list} = ['delivery_collect','bank_transfer','postal_transfer','zeus'];
  • 上の設定の場合、以下の決済プラグインが読み込まれます。
delivery_collect.pl
bank_transfer.pl
postal_transfer.pl
zeus.pl
  • 以上のプラグインのあるディレクトリは以下の通りです。
[Apache_server]
 └ [cgi-bin]
    └ [payment]
  • 以下の plugin は $config->{payment}{id_list} に基づいて決済関連のスキンを読み込みます。
pin_user_cart_step2_payment_lines.pl
  • pin_user_cart_step2_payment_lines.pl が読み込むスキンは例えば以下の通りです。
pin_user_cart_step2_payment_lines_delivery_collect.html
pin_user_cart_step2_payment_lines_delivery_collect_close.html
pin_user_cart_step2_payment_lines_bank_transfer.html
pin_user_cart_step2_payment_lines_postal_transfer.html
pin_user_cart_step2_payment_lines_zeus.html
  • 以下の plugin は、場合によって決済関連のスキンを読み込みます。
pin_user_cart_step5_payment.pl
  • pin_user_cart_step5_payment.pl が読み込むスキンは例えば以下の通りです。
pin_user_cart_step5_zeus.html
  • 決済プラグインを読み込むモジュールは以下の通りです。
    • 決済関連の基本的な処理はフレームワーク化されていますのであまり気にする必要はありません。
cafemilk_basic_pl
  • 決済プラグインはオブジェクト方式で実装されなければなりません。
  • 決済プラグインは package を宣言しなければなりません。
  • 宣言する package 名は以下の通りとなります。
Cafemilk_payment
  • 決済プラグインは以下のサブルーチンを持ちます。
new......................... : オブジェクト作成
payment_ + 決済名 + _account : 費用計算等
payment_ + 決済名 + _tag.... : 決済ページ投入情報作成
  • 以下は決済プラグインの一例です。
################################################################################
# #
# CAFEMILK SHOPPING CART V5 #
# SOHO WORKSHOP CAFEMILK 全権留保 #
# #
################################################################################

use strict;
# use warnings;
use utf8;
# use encoding "utf8";

コーディングルールにより package 名を宣言
package Cafemilk_payment;
オブジェクト作成
変更不可
sub new
 {
 my $class = shift;
 my $argument = shift;
 my $config = $argument->{config};
 my $userdata = $argument->{userdata};
 my $log_error = $argument->{log_error};
 my $log_alert = $argument->{log_alert};
 my $status = $argument->{status};
 my $stock = $argument->{stock};
 if ($stock eq '')
  {
  $stock = 'cart';
  }
 my $self =
  {
  config => $config,
  userdata => $userdata,
  log_error => $log_error,
  log_alert => $log_alert,
  status => $status,
  stock => $stock,
  };
 bless $self, $class;
 }
以下は費用計算等
sub payment_zeus_account
 {
コーディングルールによって義務づけられた各種情報の格納処理
 my $class = shift;
 my $argument = shift;
 my $config = $class->{config};
 my $userdata = $class->{userdata};
 my $log_error = $class->{log_error};
 my $log_alert = $class->{log_alert};
 my $status = $class->{status};
 my $stock = $class->{stock};
決済費用等の取得が行われたことを告知
 $status->{$stock}{payment_cost} = '1';
決済名
 $userdata->{"$stock\_check"}{payment_name} = "ZEUS決済";
決済手数料
 $userdata->{"$stock\_check"}{valid_payment_cost} = 0;
決済手数料 ウェブ等表示用
 $userdata->{"$stock\_check"}{preview_payment_cost} = '0';
決済手数料の表示に続いて注意書き等が必要な場合
 $userdata->{"$stock\_check"}{payment_message_1} = '';
 }
以下は決済ページURLと値の作成
sub payment_zeus_tag
 {
 my $class = shift;
 my $argument = shift;
 my $config = $class->{config};
 my $userdata = $class->{userdata};
 my $log_error = $class->{log_error};
 my $log_alert = $class->{log_alert};
 my $status = $class->{status};
 my $stock = $class->{stock};
 my %parameter;
 # 1
 $parameter{form_action} = "https://linkpt.cardservice.co.jp/cgi-bin/order.cgi?orders";
 # 2
 $parameter{send} = 'mall';
 # 3
 $parameter{clientip} = $config->{payment}{zeus}{ip};
 # 4
 $parameter{money} = $userdata->{"$stock\_check"}{grandtotal};
 # 5
 $parameter{custom} = 'yes';
 # 9
 $parameter{sendid} = "$userdata->{ordercode}";
 %parameter;
 }
最後に何か retern するのが Perl のお約束
1;

アフィリエイトプラグイン

  • アフィリエイトプログラムが要求するコンバージョンコードを用意するプラグインです。
    • 用語は業者によって違っていることがあります。
  • 以下はファンコミュニケーションズの提供するA8.netの場合となります。
  • プログラムIDは以下に記載します。
$config->{affiliate}{a8}{pid}
  • $config->{affiliate}{a8}{pid} を設定しているファイルは以下の通りです。
[Apache_server]
 └ [cgi-bin]
    └ [config]
       └ [common]
          └ config_common.pl
  • 以下は設定の例です。
  # A8.netのプログラムID
   # [A8.netと契約していない場合]
   # $config->{affiliate}{a8}{pid} = '';
   $config->{affiliate}{a8}{pid} = 's0000000000000';
  • 以下のプラグインが読み込まれます。
a8.pl
  • a8.pl のあるディレクトリは以下の通りです。
[Apache_server]
 └ [cgi-bin]
    └ [affiliate]
  • a8.pl を使用するプラグインは以下の通りです。
pin_user_cart_step5_affiliate.pl
  • アフィリエイトプラグインはオブジェクト方式で実装されなければなりません。
  • アフィリエイトプラグインは package を宣言しなければなりません。
  • 宣言する package 名は以下の通りとなります。
Cafemilk_affiliate
  • アフィリエイトプラグインは以下のサブルーチンを持ちます。
new................................. : オブジェクト作成
affiliate_ + アフィリエイト名 + _tag : コンバージョンコード作成
  • a8.pl の内容は以下の通りです。
################################################################################
# #
# CAFEMILK SHOPPING CART V5 #
# SOHO WORKSHOP CAFEMILK 全権留保 #
# #
################################################################################

use strict;
# use warnings;
use utf8;
# use encoding "utf8";

コーディングルールにより package 名を宣言
package Cafemilk_affiliate;
オブジェクト作成
変更不可
sub new
 {
 my $class = shift;
 my $argument = shift;
 my $config = $argument->{config};
 my $userdata = $argument->{userdata};
 my $log_error = $argument->{log_error};
 my $log_alert = $argument->{log_alert};
 my $status = $argument->{status};
 my $stock = $argument->{stock};
 if ($stock eq '')
  {
  $stock = 'cart';
  }
 my $self =
  {
  config => $config,
  userdata => $userdata,
  log_error => $log_error,
  log_alert => $log_alert,
  status => $status,
  stock => $stock,
  };
 bless $self, $class;
 }
コンバージョンコードの発行
sub affiliate_a8_tag
 {
 my $class = shift;
 my $argument = shift;
 my $config = $class->{config};
 my $userdata = $class->{userdata};
 my $log_error = $class->{log_error};
 my $log_alert = $class->{log_alert};
 my $status = $class->{status};
 my $stock = $class->{stock};
 my %parameter;
 $parameter{form_action} = "https://px.a8.net/cgi-bin/a8fly/sales";
 $parameter{pid} = "$config->{affiliate}{a8}{pid}";
 $parameter{so} = "$userdata->{ordercode}";
 foreach (0 .. ($userdata->{$stock}{stack} - 1))
  {
  my $number = $_;
  my $price = $userdata->{"$stock\_check"}{price}[$number];
  my $quantity = $userdata->{$stock}{"quantity_$number"};
  my $total = $userdata->{"$stock\_check"}{get_price}[$number];
  my $id = $userdata->{$stock}{"id_$number"};
  if ($userdata->{"$stock\_check"}{option_number}[$number] ne '')
   {
   $id .= "-".$userdata->{"$stock\_check"}{option_number}[$number];
   }
  $parameter{sis} .= "\&si=$price\.$quantity\.$total\.$id";
  }
 $parameter{ts}
  = "$status->{datetime}{year}$status->{datetime}{month}"
  . "$status->{datetime}{day}$status->{datetime}{hour}"
  . "$status->{datetime}{min}$status->{datetime}{sec}";
 my $parameter
  = "<img src='$parameter{form_action}\?pid=$parameter{pid}\&so=$parameter{so}$parameter{sis}\&ts=$parameter{ts}' width='1' height='1' border='0'>";
 $parameter;
 }
最後に何か retern するのが Perl のお約束
1;

レコードプラグイン

  • レコードプラグインは受注の情報などを CSV などのレコードの形にして出力するプラグインです。
  • 以下は標準伝票レコードの場合となります。
  • 標準伝票レコードのレコード名は以下のようになります。
package
  • ファイル名は以下のようになります。
package.pl
  • package.pl のあるディレクトリは以下の通りです。
[Apache_server]
 └ [cgi-bin]
    └ [record]
  • package.pl を使用するプラグインは以下の通りです。
pin_mail_cart_record.pl
  • plugin 型プラグイン mail_cart_record (pin_mail_cart_record.pl) を呼び出すプラグインタグにはオプションにレコード名がついていなければなりません。
  • 標準伝票レコードを呼び出すプラグインタグは以下の通りです。
<#####mail_cart_record:package#####>
  • pin_mail_cart_record.pl の内容は以下の通りとなります。
################################################################################
# #
# CAFEMILK SHOPPING CART V5 #
# SOHO WORKSHOP CAFEMILK 全権留保 #
# #
################################################################################

use strict;
# use warnings;
use utf8;
# use encoding "utf8";

コーディングルールにより package 名を宣言
package Cart_plugin;
以下はウェブ処理用
sub mail_cart_record_html
 {
 # none
 }
以下はメール処理用
sub mail_cart_record_mail
 {
コーディングルールによって義務づけられた各種情報の格納処理
 my $package = shift;
 my $argument = shift;
 my $config = $argument->{config};
 my $userdata = $argument->{userdata};
 my $log_error = $argument->{log_error};
 my $log_alert = $argument->{log_alert};
 my $status = $argument->{status};
オプションにて指定されたレコード名の取得
 my $target = $argument->{values}[0];
準備
 my $source;
内容のチェック
 if (($target ne '' )
 and (-e "./record/$target.pl"))
  {
該当のレコードプラグインを呼び出し
  require "./record/$target.pl";
オブジェクトの作成
  my $record = Cafemilk_record->new
   ({
   config => $config,
   userdata => $userdata,
   log_error => $log_error,
   log_alert => $log_alert,
   status => $status,
   });
レコードの取得
  my $name = "record_$target";
  $source = $record->$name();
  }
レコードを return
 $source;
 }
最後に何か retern するのが Perl のお約束
1;
  • レコードプラグインはオブジェクト方式で実装されなければなりません。
  • レコードプラグインは package を宣言しなければなりません。
  • 宣言する package 名は以下の通りとなります。
Cafemilk_record
  • レコードプラグインは以下のサブルーチンを持ちます。
new................. : オブジェクト作成
record_ + レコード名 : レコード作成
  • package.pl の内容は一部以下の通りです。
################################################################################
# #
# CAFEMILK SHOPPING CART V5 #
# SOHO WORKSHOP CAFEMILK 全権留保 #
# #
################################################################################

use strict;
# use warnings;
use utf8;
# use encoding "utf8";

コーディングルールにより package 名を宣言
package Cafemilk_record;
オブジェクト作成
sub new
 {
 my $class = shift;
 my $argument = shift;
 my $config = $argument->{config};
 my $userdata = $argument->{userdata};
 my $log_error = $argument->{log_error};
 my $log_alert = $argument->{log_alert};
 my $status = $argument->{status};
 my $self =
  {
  config => $config,
  userdata => $userdata,
  log_error => $log_error,
  log_alert => $log_alert,
  status => $status,
  };
 bless $self, $class;
 }
以下はレコードの作成
sub record_package
 {
コーディングルールによって義務づけられた各種情報の格納処理
 my $class = shift;
 my $argument = shift;
 my $config = $class->{config};
 my $userdata = $class->{userdata};
 my $log_error = $class->{log_error};
 my $log_alert = $class->{log_alert};
 my $status = $class->{status};
コーディングルールにより %input_values にリクエストされた各情報を格納
 my %input_values;
 my @list =
  qw(
  input_1_name_sei input_1_name_mei
  input_1_name_kana_sei input_1_name_kana_mei input_1_company_name
  input_1_company_name_kana input_1_zipcode_1 input_1_zipcode_2
  input_1_address_1 input_1_address_2 input_1_address_3 input_1_address_4
  input_1_address_5 input_1_phone_1 input_1_phone_2 input_1_email_1
  input_1_email_2 input_1_email_3 input_1_email_4 input_2_name_sei
  input_2_name_mei input_2_name_kana_sei input_2_name_kana_mei
  input_2_company_name input_2_company_name_kana input_2_zipcode_1
  input_2_zipcode_2 input_2_address_1 input_2_address_2 input_2_address_3
  input_2_address_4 input_2_address_5 input_2_phone_1
  );
 foreach (@list)
  {
  $input_values{$_} = $userdata->{request_values}{$_}[0];
  }
WORDLIST 型スキンを読み込み
 my @word_list = Cafemilk_basic::get_wordlist
  ({
  config => $config,
  userdata => $userdata,
  log_error => $log_error,
  log_alert => $log_alert,
  status => $status,
  filename => "./$config->{path}{skin}/user/cgi/$config->{default}{user_type}/$userdata->{device_type}/$userdata->{language_type}/$userdata->{currency_type}/$userdata->{template_type}/list_prefecture.txt",
  });
 if ($input_values{input_1_address_1})
  {
  $input_values{input_1_address_1} = $word_list[$input_values{input_1_address_1}];
  }
 if ($input_values{input_2_address_1})
  {
  $input_values{input_2_address_1} = $word_list[$input_values{input_2_address_1}];
  }
レコードの作成の準備
 my %parameter;
 # A
 # 01 mode
 $parameter{mode} = "1";
 # 02 1_zipcode_1
 $parameter{'1_zipcode_1'} = $input_values{input_1_zipcode_1};
 # 03 1_zipcode_2
 $parameter{'1_zipcode_2'} = $input_values{input_1_zipcode_2};
 # 04 1_address_1
 $parameter{'1_address_1'} = $input_values{input_1_address_1};
 # 05 1_address_2
 $parameter{'1_address_2'} = $input_values{input_1_address_2};
 # 06 1_address_3
 $parameter{'1_address_3'} = $input_values{input_1_address_3};
 # 07 1_address_4
 $parameter{'1_address_4'} = $input_values{input_1_address_4};
 # 08 1_address_5
 $parameter{'1_address_5'} = $input_values{input_1_address_5};
 # 09 1_name_sei
 $parameter{'1_name_sei'} = $input_values{input_1_name_sei};
 # 10 1_name_mei
 $parameter{'1_name_mei'} = $input_values{input_1_name_mei};

中略

 # D
 # 01 year
 $parameter{year} = $status->{datetime}{year};
 # 02 month
 $parameter{month} = $status->{datetime}{month};
 # 03 day
 $parameter{day} = $status->{datetime}{day};
 # 04 ordercode
 $parameter{ordercode} = $userdata->{ordercode};
 # 05 payment_name
 $parameter{payment_name} = $userdata->{cart_check}{payment_name};
 # 06 user_name
 $parameter{user_name} = $userdata->{user_registry_values}{user_name};
 # 07 get_point
 $parameter{get_point} = $userdata->{cart_check}{get_point};
 # 08 total_point
 $parameter{total_point} = $userdata->{cart_check}{total_point};
レコードの仕上げと return
 # encode & pair
 my @pair;
 foreach (keys %parameter)
  {
  my $key = $_;
  my $encode = Cafemilk_basic::url_encode
   ({
   config => $config,
   userdata => $userdata,
   log_error => $log_error,
   log_alert => $log_alert,
   status => $status,
   text => $parameter{$key},
   });
  my $pair = "$key=$encode";
  push (@pair,$pair);
  }
 my $record = join("&",@pair);
 }
お約束
1;
最終更新:2009年09月25日 13:40
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。