【PHP】PHPExcelでexcelの出力時に「ファイルがみつかりません」のエラー??

ユーザー一覧をcsvで出したいというクライアントの指示。

よくある指示なので、いつも通りPHPExcelで組んでテスト環境で成功。

よし!!

という事で本番環境に移動してcsvを出そうとすると、なぜか

「ファイルがみつかりません」

という謎のエラー???

なんで??

ファイルが見つからないってどうゆう事だ?

ファイルのパスが間違えているのかと思ったが間違っていない。

試行錯誤するうちに原因特定

PHPExcelの最後の

save(‘php://output’)

が原因でした。

理由はテスト環境はphpのバージョンが5.6

本番環境がphpのバージョンが7という初歩的なミス

どうしようか悩みましたが、今回はこのまま5.6で行く事にして解決!

PHPExcelはphp7では使えないのかな。。?

 

【LINE内アプリ】helloとだけ返す一番簡単なアプリをmessageAPIで作る

 

line内アプリ制作の第一歩として、一番簡単ななんでもメッセージを送ったらhelloと返すアプリを作ってみます。

このアプリを作る事でLINE内アプリの基本的な制作方法を理解出来ると思います。

※LINEの開発者の登録は終っているものとして進めます。

 

1、新しいチャンネルを作る

まずは新しいチャンネルを作ります。

今回はhelloという名前のチャンネルを作ってみます。

create a channel

の中のMessage APIを選びます。

 

 

2、Create a channnelページの必要項目を埋める

・Channel typeをmessage APIにする

・ProviderをCreate a new providerにする

・名前はhelloとする

・Channel icon はアイコン画像はなしでもいいですが、適当に上げてみてもいいです。

・Channel nameをhelloに

・Channel descriptionは適当に

その後のカテゴリーも適当でいいです。

・Email addressも適当に入れて下さい

・Privacy policy URL 、Terms of use URL も空白でいいです。

 

あとは同意にチェックを入れてCREATEです。

 

3、出来たチャンネルに必須項目を入れる

createをするとチャンネルのページに移動します。

messageAPIのタブを選択します。

 

●Webhook URL を入れる

ここにphpファイルを置いたurlを入れます。

※httpsじゃないと出来ません。

 

●アクセストークンをコピペ

ページ一番下の

Channel access token

の「issue」をクリックするとアクセストークンが出てきます。

これは次で使います。

 

4、test.phpファイルを作る

以下のソースをそのままコピペしてphpファイルを作り、webhookのurlに上げて下さい。

/**
なんでもメッセージをもらったらhelloと返す
*/

// access token
$token = ‘[ここにアクセストークンをコピペ]’;

// setteing
$json_string = file_get_contents(‘php://input’);
$json_obj = json_decode($json_string);
$reply_token = $json_obj->{‘events’}[0]->{‘replyToken’};
$type = $json_obj->{‘events’}[0]->{‘type’};
$msg_obj = $json_obj->{‘events’}[0]->{‘message’}->{‘type’};

if($type === ‘message’) {
if($msg_obj === ‘text’) {
$msg_text = $json_obj->{‘events’}[0]->{‘message’}->{‘text’};
$message = array(
‘type’ => ‘text’,
‘text’ => ‘hello’
);
}
}

$post_data = array(
‘replyToken’ => $reply_token,
‘messages’ => array($message)
);

$ch = curl_init(‘https://api.line.me/v2/bot/message/reply’);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ‘POST’);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
‘Content-Type: application/json; charser=UTF-8’,
‘Authorization: Bearer ‘ . $token
));
$result = curl_exec($ch);
curl_close($ch);

 

 

5、最後にQRコードを読み込む

最後にQRコードをスマホのラインで読み込んで友達登録したら完成です!!

ラインの友達登録でQRコードにしてQRコードを読み込んで下さい。

↑このQRコードをスマホで読み込めばhelloとだけ帰って来るアプリが出来ているのを確認出来ます。

【LINE内アプリ】開発を始める準備

今話題のLINE内アプリ。

日本人のほとんどの人がスマホに入れているアプリなので利便性はうなぎ上りです。

LINE内アプリを作る為の準備のご説明をします。

 

1、lineビジネスIDを作る

まずは、lineビジネスIDを作ります。

https://account.line.biz/signup?redirectUri=https%3A%2F%2Fmanager.line.biz%2F

こちらから作ります。

メールアドレスから簡単に作れます。

 

2、LINE developersに登録

line developersに登録します。

https://developers.line.biz/ja/

こちらから。

この時にLINEアカウントとの連携が必要になります。

自分のスマホで使っているLINEアカウントと連携させましょう。

メールアドレスとパスワードでスマホのlineのアカウントでログインするか。

QRコードでログインさせるか選べます。

QRコードでログインするには、スマホの友達追加のQRコードを読み込むで追加出来ます。

 

3、messageAPIを使ってみる

開発者登録が終ってそのまま進むとChannel登録になります。

今はテストなので一番簡単なmessageAPIでやります。

 

とりあえず今はテストなので適当に項目を進めて登録します

 

4、QRコードから作ったアカウントを友達登録

登録が終ると今作ったチャンネルのページに移動します。

そこのタブの中の

Messaging API

の中のQRコードをスマホで友達登録してみて下さい。

今適当に作ったチャンネルと友達登録出来ると思います。

とりあえずここまで出来れば、あとはメッセージを自動で返したり作ってみましょう。

【PHP】Fatal error: Non-abstract method ~~ must contain body

Fatal error: Non-abstract method

このエラーは「この関数は抽象メソッドじゃないですよね?どうして中身ないの?」

というエラーです。

特別に

abstract

を宣言しない限り、関数は基本非抽象メソッドとなります。

私がこのエラー出た時は

public function sample();
{}

のように間違えってをつけてしまっていました。

;つかたからメソッドが終了しちゃってたんですね;;

ですので、このエラーは基本出ないエラーです。

出ちゃった時はメソッドの記述ミスでしょう。

【ペイジェント】洗替(オート)の結果のcsv確認方法

ペイジェントの洗替オートの結果CSVの見方を説明します。

 

洗替オートの結果が出るのはいつ?

洗替オートの結果が出るのは毎月20日くらいです。

担当者宛にペイジェントから

ファイル一括処理完了のお知らせ(受付番号:*******)

というメールが届きます。

このメールの中に受付番号でcsvファイルを落とす事が出来ます。

毎月1日時点のペイジェントに保存してあるカード情報全てが対象となり、20日に全てのカードの結果が出ます。

昔にユーザーが登録したカードの洗替対象となりますので、数はどんどん膨大になっていってしまいます。

出来るだけ、ユーザーが退会したらカード情報も削除するのがいいと思います。

 

洗替の結果はどこから落とす?

洗替のcsvの落とす場所ですが、ペイジェントオンラインから落とす事が出来ます。

洗替のメールが20日にペイジェントから届いたら

ペイジェントオンラインにログインして、右側のメニューからファイル処理を選びます。

ファイル処理をクリックすると、ページ内に

取引結果ファイルダウンロード

の項目があります🔻

この中の

受付番号

にメールで送られてきた受付番号を入れて検索をします。

すると検索結果が出ますので、該当のcsvをダウンロードする事が出来ます。

 

洗替結果CSVの見方

csvを開いて見ると、ただただひたすら数字が羅列してあり意味がわからないと思います。

このcsvは3部構成になっていて

ヘッダー

BODY

フッター

の3つからなります。

 

まずヘッダーの見方です。

ヘッダーはcsvの1行目です。

csv1行目が🔻のようになっていると思います。

1 24 12345 555678 20191201 20191220 0

ヘッダーの説明ですが左から

・レコードID(1固定)

・取引種別(24はファイル決済の事)

・マーチャントID(マーチャントに一意な数字)

・受付ID(受付時に割り振られる数字)

・受付日(毎月1日)

・処理日(毎月20日)

・処理結果(0が成功、1なら失敗、普通は0です)

こうやって見ると、csvファイルの情報をヘッダーに記載してある事がわかります。

 

 

次にBODYの見方

body部ですが、ここは会社によっては数千行になると思います。

ペイジェントに保存してあるカード情報全てが対象となるので、昔のカード情報も全て洗替対象となるのです。

もしカード情報の洗替が全カードやるのがダメな場合は洗替マニュアルでやるしかありません。

洗替オートだと、全カードが対象となります。

 

それではBODY部の見方です。

csvファイルのBODY部は🔻のようになっていると思います。

3 371 44444444 5 0 0
3 397 55555555 4 0 0
3 151 6666666 0 1 1

左から説明します。

・レコードID(3固定、一番左が3ならBODYという事)

・サイトID(複数サイトを登録しているときはここに数字が出ます、サイトが1つの場合は空白)

・顧客ID(ここは店舗毎に自分達で決めた顧客IDが振られます、顧客に番号を振っていればその数字)

・顧客カードID(カード毎にペイジェントが振る番号)

・有効性判定結果(0が有効性OK、1が有効性NG、2がカード会社照合エラー、3が請求停止、4がカード会社契約なし、5が有効性チェック非対応カード会社、9がペイジェント照合エラー)

・カード番号更新サイン(0なら変更なし、1ならカード番号の洗替しましたという意味)

・有効期限更新サイン(0なら変更なし、1ならカードの有効期限を変更しましたという意味)

 

こうやって見ると色々わかってきます。

まず大事なのが左から5番目の

「有効性判定結果」

ここが全部0なのが理想ですが、実際はカード会社によってエラーが出たり、ペイジェント側でエラーが出たりで4と5が多数でます。

9が出る場合はペイジェント側でのエラー

4のエラーは、私が調べた感じだと、楽天カードやオリコカードが多数でした。

会社によって洗替に対応していないのでしょう。

 

一番大事なのは一番左の

「有効期限更新サイン」

ここが1だとガッツポーズして下さい。

顧客のカードの有効期限が自動で延長されたという事です。

カードの期限切れのタイミングでサイトから退会する顧客は多いので、そうゆう退会を防ぐ事が出来たという事です。

 

左から2番目の

「カード番号更新サイン」

ですが、カード番号が変わるとかあるの?と思われるかもしれませんが、カードが盗難とかにあうと番号の末尾2桁だけ変更する事が時々あります。

そのような時にカード番号がかわります。

 

フッターの見方

最後にフッター部の見方です。

フッターはcsvの結果を表示しています。

csvの一番下の行が🔻のようになっていると思います。

4 1550 762 10 778 19 112

左から説明します。

・レコードID(4固定、4ならフッター)

・レコード件数(bodyの全件数、洗替した全件数の事)

・OK件数(有効性判定が0の件数)

・NG(有効性判定が1の件数)

・エラー件数(有効性判定が0と1以外の件数)

・カード番号更新件数(カード番号の洗い替えした件数)

・有効期限更新件数(有効期限を更新した件数!!)

そのまんまですが、今月の洗い替えの結果がフッターに書かれています。

上の例だと、全件数が1550件だけど、今回有効性期限の変更があったのは112件だけだよーという意味になります。

NGやエラー件数も多いですが、この辺は顧客のカードの問題だったり、カード会社の問題だったりなので、こちらとしては何も出来ません。

一番大事なのは有効性期限の更新(洗替)なので、ここの数字が5だったら5人の退会を防いだと言っても過言ではないです。

 

 

結論として、洗替(オート)は神様みたいな便利な機能です!!

自動で顧客のカードの有効期限を更新してくれるので、入れると入れないとでは売上に大きな差が出ます。

世間の会社がほとんどこの洗替を入れていないのが不思議です。。

私個人もカード期限が切れたという通知があったら、そのまま放置して退会する事が多いので、退会するきっかけを顧客に与えない事が大事かなと思います。

【セキュリティ】referer洗浄

このページではrefererの洗浄について説明します。

 

そもそもrefererとは?

refererがわからない方もいると思うので説明します。

refererとは一言で言えば、元サイトのURLです。

例えばあなたがヤフーのトップページから、このサイトにアクセスしたとします。

その場合referer欄には

referer:https://www.yahoo.co.jp/

という情報が載ります。

どのページからきたかの情報がrefererです。

元のページのURLがヘッダー情報として残るのです。

あなたがネットサーフィンで色んなサイトを見て回っている時、本人は気付きませんが実は

自分はどこどこの者でこっちのサイトから飛んできました^^

という情報を持って歩いています。

アクセス解析する上では貴重な情報ですが、悪意ある人に悪用される事もあります。

referer洗浄とは?

referer洗浄というのは、別サイトに飛ぶ時に自サイトのURLをなるべく綺麗にして飛ばさせる事です。

例えば自サイトのURLが

http://sample.com?user_id=999&pass=1234

というセキュリティ的にとんでもないURLのページかもしれません。

このページから他サイトに飛んだ時、referer欄には

http://sample.com?user_id=999&pass=1234

の情報が残ります。

悪意ある人がこのrefererを見たら涎を垂らして喜ぶでしょう。

ですので、こういったrefererを相手サイトに残したくない時にreferer洗浄をします。

このページから外部ページに飛ぶ時に、一旦自サイト内のページを経由して飛ばす事でrefererを綺麗にする事が出来ます。

例えば

http://sample.com?user_id=999&pass=1234

http://sample.com/cussion/

外部サイト

と間にクッションページを入れるのです。

こうすれば相手側のアクセス解析のreferer欄に残るのは

http://sample.com/cussion/

のURLになります。

1番のreferer対策は外部サイトを作らない事です。

自分のサイトから外部へのリンクを貼らない事。

これがセキュリティ的には一番になります。

でもどうしても外部にリンクを貼りたい時は、そのページのURLが外部に漏れる事を想定して下さい。

 

URLに大事な情報を入れない

 

これは当然大事な事になります。

そもそもURLに機密情報が載っている時点で問題があるといえます。

どうしても外部リンクを貼りたい時に必要となるのが

referer洗浄

となります。

referer洗浄方法

自サイトから外部サイトにリンクを貼る時に

クッションページ

を経由させる事でrefererを綺麗に変える事が出来ます。

このリダイレクト用のクッションページですが作る時にいくつか注意点があります。

 

1.ページのスキームを限定する

2.利用者にもメッセージを伝える

3.データベース等に保管してあるURLに飛ばすようにする

 

この3つを守って下さい。

一つ一つ説明します。

 

1.ページのスキームを限定する

スキームとはURLの頭についている

http://

https://

の事です。

これをhttp以外うけつけないように構築して下さい。

理由はhttp以外をURLの頭にくっつけるXSSという攻撃方法から守るためです。

クッションページというのはreferer洗浄には有効ですが、実はハッカーに狙われやすいページになります。

例えばクッションページのURLが

http://sample.com/cussion/

このページで本当にただクッションさせるだけで、例えば

javascript:location.href=悪いサイトURLhttp://sample.com/cussion/

のようなデータも受け取ってしまいます。

スキームをhttpに限定すれば、このような攻撃を無効に出来ます。

 

2.利用者にもメッセージを伝える

クッションページは攻撃者に狙われやすいです。

利用者は気付かない間にクッションページから指定サイトに飛ばしてもいいですが、それよりも

「外部サイトに移動していいですか?」

のようなメッセージを表示して、クリックしたら移動するようにします。

こうする事でクッションページを悪用されにくく出来ます。

どうして悪用されにくくなるのか説明します。

例えば悪い人が、ユーザーを勝手にあるサイトに誘導したいがrefererを洗浄させたい時

 

悪い人のサイト

誘導したいサイト

 

↑これだと誘導したいサイトに悪い人のサイトのrefererが残ってしまいます。

そんな時はどこかのクッションページを利用して

 

悪い人のサイト

クッションページ(気づかずにリダイレクト)

誘導したいサイト

 

↑このように利用されると、誘導先サイトに勝手に移動させてなおかつreferer洗浄も出来る便利なページとして悪い人に利用されます。

ただこの時にクッションページでメッセージが出てクリックしないと先に進めないページなら・・?

 

悪い人のサイト

クッションページ(メッセージが画面に出てリダイレクトはリンククリックが必要)

誘導したいサイト

 

↑これだと誰かが悪い人に勝手にリダイレクトされてても、このクッションページで気付きます。

「あれ?なんだこのぺーじ?

わかんないから戻ろう。」

となるので、悪い人はこのクッションページを利用しようとは思わないでしょう。

 

3.データベース等に保管してあるURLに飛ばすようにする

3つめですが、クッションページは悪用されやすいと説明してきましたが、例えばクッションページのリダイレクトをGETで受け取ったURLに飛ばす仕組みにしている場合

http://sample.com/cussion?url=https://www.yahoo.co.jp/

これでURLを受け取ってヤフーに飛ばすようにしている場合

urlに攻撃者がスクリプトを埋め込んで攻撃出来ます。

http://sample.com/cussion?url=javascript:・・・・

のように

このような攻撃を避けるために、あらかじめこちらで用意してあるURLにしか飛ばないように設計するようにする。

【セキュリティ】WEBページを作る上でのセキュリティのルール

WEBページを作る場合、セキュリティ常に意識して構築する必要があります。

 

ルール1.なるべく外部リンクを入れない

外部リンクを入れてはダメな理由を説明します。

外部をリンクから他のサイトにユーザーをアクセスさせた時、ヘッダー情報にreferer情報がのります。

相手側サイトのアクセス解析でこちらのURLが載る事になります。

トップページ等でしたら問題ありませんが、変数を持ったページだと悪意ある人に狙われます。

どうしても外部ページに飛ばしたい時は、リダイレクト用のクッションページを用意する事でrefererを洗浄する事が出来ます。

 

referer洗浄は↓こちらのページで詳しく書いています。

https://creative-studio.jp/2019/11/20/%e3%80%90%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3%e3%80%91referer%e6%b4%97%e6%b5%84/

ルール2. 綺麗でわかりやすいソースを書く

一見関係ないように感じますが、綺麗なソースを書く事はセキュリティの基本と言ってもいいです。

インデントがずれているとバグが見つけにくいです。

クラスの命名がバラバラだとメンテナンスが難しくなります。

・インデントをしっかりいれる

・余分な空白を入れない

・クラスの命名ルールを統一させる

・長すぎるコードも意味不明な迷宮となります(1万行とか!)

ルール3. PHPDOCをわかりやすく入れる

PHPDOCを全部のクラスやメソッドに入れるのは結構時間もかかりますし、ちょっと直したらphpdocも書き直しになったりして、かなりメンドクサイです。

でも、そのコード3年後に見て自分でわかりますか?

1年後だって怪しい。

構築している時は全部把握しているのでPHPDOCなくても大丈夫ですが、1年後にメンテナンスする事になったらわかりますか?

phpdocは数年後の自分へのメッセージだと思ってわかりやすく書いて下さい。

 

ルール4. エスケープ処理を全部ちゃんと入れる

getとpostをしたらかならずエスケープ処理をしましょう。

数字しか受け取らないのならちゃんと数字だけなのかチェック。

数字の0や空白を許さなないならそれもチェック。

 

【セキュリティ】パケットキャプチャとは?

パケットキャプチャとは?

パケットキャプチャとは、一言で言えばネットを流れている情報の断片を見る事です。

↑これはパケットキャプチャを見る為の一番有名なソフトのWIRESHARKで見たパケットキャプチャです。

パソコンでネットを見る時、このようなパケットが膨大な量でやり取りされています。

その一つ一つのパケットをチェックする事が出来ます。

そもそもパケットがわからない方はこのページを

 

キャプチャという単語は、スマホやパソコンの画面を画像にして友達に送ったりしたりで皆さん聞いた事があると思います。

ネットを飛び交っているデータをキャプチャして静止画のように詳しく見る事が出来るのです。

パケットキャプチャで一つ一つデータを見れば、パソコンとサーバーでどのようなやり取りをしているか確認する事が出来ます。

セキュリティ的に問題なのは、このパケットはハッカーによって改ざん出来てしまう事です。

 

みずほ銀行の法人口座開設

今まで会社の銀行口座は近くの信用金庫の口座を使っていましたが、事務所の引越をしたらその信用金庫が遠くなってしまいました。

信用金庫は町の銀行なのですごく親切にしてくれたのですが、店舗数も少なく引越をすると不便です。。

今後も引越をする事があるかもしれないので、やはり大手の銀行に法人口座を持ちたいと思い申込をしてみました。

ただ、内心はうちみたいな零細企業はメガバンクは相手にしてくれない。。

と思っていたのですが。

結論から言うと、なんと即日開設してくれました!

本当によかった!!

 

みずほ銀行の法人口座開設はネットから出来ます。

実際やってみて、ネットで申し込んでよかったと思いました。

ネットで申し込んだ後、実際に窓口で色々書類を書くのですが、その時にネットで入力した内容が全部書類に記載されているので、記入が少なく本当楽でした!

 

流れとしては

1.ネットから法人口座開設申し込み

https://ebiz.mizuhobank.co.jp/Front/index.php

 

2.一次審査

この一次審査で落とされる事があるらしいのですが、うちは特に問題もなかったようで、窓口での申し込みの案内メールがきました。

 

3.窓口での申し込み

窓口の申し込みの時に4つ持っていくものがあります。

・履歴事項全部証明書

・印鑑証明書

・身分証明書(免許証)

・印鑑

他にも最初に口座にお金を入金する必要があるといわれるので適当に1万円。

その他に手続き手数料に1100円かかりました。

 

4.口座開設!

全部の書類を書き終えると、なんと1時間ほどで開設出来ますとの事。

え!?

と少しビックリしたのですが、近くのカフェで時間潰して、1時間後には本当に開設出来てて、その場で通帳貰って帰りました!

 

正直、内心相手にされないと思っていたし。

書類記入してから1か月くらいなんやかんやでかかると思っていたので、本当にビックリ。

ダメ元でやってみてよかったです!!