CentOS6のインストールで「GPTブートディスクを非EFI環境のシステムでお使いです」

3TBのHDDを二つ用意してCentOS6.7にRAID1構成でインストールを試みた。

こちらのページを参考にパーティションを構成してインストール作業を進めていくと警告表示される。

-----------------------------------
警告:
GPTブートディスクを非EFI環境のシステムでお使いです。おそらく、これはBIOSがGPTディスクからの起動をサポートしていないため動かないでしょう。
-----------------------------------

GPTブートディスクとは、2TBより容量の多いHDDのことらしく、これまでのBIOSでは扱えないディスクサイズを指すらしい。警告を対して気にも留めずインストール作業を最後まで終え、PCを再起動するとBIOS(UEFI)画面が表示されるだけでCentOSは起動しない。

これの解決策は、DVDドライブにCentOSのインストールディスクを入れてPCをリブート。BIOS画面に入ってブートメニューから「UEFI: DVDドライブ名」を選択してUEFIモードでインストール工程を処理していけばいい。

Sccure boot violationでCentOSがインストールできない時の対処法

新しく購入したPCにCentOS6.7をインストールする際、Sccure boot violationというエラーが出た。

エラーメッセージ
-----------------------------------
The system found unauthorized changes on the firmware, operating system or UEFI drivers.

Press [OK] to run the next boot device, or enter directory to BIOS Setup if there are no other boot devices installed. Go to BIOS Setup > Advanced > Boot and change the current boot device into other secured boot devices.
-----------------------------------

google翻訳
-----------------------------------
システムは、ファームウェア、オペレーティングシステムまたはUEFIドライバに不正な変更を発見しました。

[OK]を押すと次のブートデバイスを実行、またはインストールされない他のブートデバイスがない場合は、BIOSセットアップにディレクトリを入力します。 BIOSセットアップ>詳細設定>ブートに移動し、他のセキュアなブートデバイスに現在のブートデバイスを変更。
-----------------------------------

Sccure bootはPC起動時にOSのデジタル署名をチェックする機能らしく、デジタル署名のないOSは、起動できないらしい。

•Linux OSの場合、ほとんどがSccure bootに対応していないため、エラーが出る模様。

解決策としては、Sccure bootをUEFIで無効にすればいい。

BIOS(UEFI)を起動して「Advanced Mode」 → 「Boot」→ 「Secure Boot」の項目をクリック。「OS Type」のところを「Windows UEFI mode」→「Other OS」に変更すればいい。

【自作PC】ファンの回転数が異常

サーバー用に自作PCを組み立ててBIOSをチェックしたところ、ケース側ファンの回転数がおかしい。数百で回転数が少なすぎて赤字になったり、一万回以上の表示されたりを繰り返して安定しない。

構成
・P100(PCケース)
・H170-PRO(マザーボード)
・Core i3-6100T(CPU)

解決法
P100のファンについている回転数を制御するスイッチを L から H に変えるだけ。とりあえずこれで表示される回転数は異常でなくなった。低回転過ぎたのかな。

【PHP】twilioで電話をかける、SMSを送る

twilioを使って電話をかけたりSMSを送ったときの覚書。言語はPHP。

1.ライブラリのダウンロードと設置

電話をかけるにもSMSを送るにも準備として、twilioのライブラリを設置する必要がある。
TwilioのPHPソースコード(zip)

解凍すると Services というフォルダが入っているのでそれをそのまま自分のサーバーにアップロードする。

ライブラリのインストールとSMS送信サンプルはこちらにもある(公式)

これで下準備完了。

2-1.twilioで電話をかける

次の二つのサンプルコードをアップロードして読み込むとtwilioの番号から電話をかけられる

twilio_call.php
--------------------------------------------------
<?php
require("Services/Twilio.php"); // PHPライブラリ

$sid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // Account Sid
$token = "xxxxxxxxxxxxxxxxxxxxxxxxxx"; // Auth Token
$tel_to = "+8190xxxxxxxx"; // 発信先電話番号
$tel_from = "+81xxxxxxxxxx"; // twilioで取得した発信元電話番号
$twiml = "http://example.com/calling.xml"; // TwiML URL(absolute path)

$client = new Services_Twilio($sid, $token);
$call = $client->account->calls->create($tel_from, $tel_to, $twiml);
?>
--------------------------------------------------

calling.xml(この音声が読み上げられる)
--------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say language="ja-jp">Twilioへようこそ。</Say>
</Response>
--------------------------------------------------
このサンプルコードはこちらのまま

2-2.twilioでSMSを送る

次のサンプルコードをアップロードして読み込むとtwilioの番号からSMSが送れる

--------------------------------------------------
<?php

require "Services/Twilio.php"; // PHPライブラリ

//set our AccountSid and AuthToken from www.twilio.com/user/account
$AccountSid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$AuthToken = "xxxxxxxxxxxxxxxxxxxxxxxxxx";

//instantiate a new Twilio Rest Client
//新しいクライアント オブジェクトのインスタンスを生成
$client = new Services_Twilio($AccountSid, $AuthToken);

//送信先の配列をつくる
//送信先電話番号 => 相手の名前
$people = array(
"+8190xxxxxxxx => "tarou",
"+8190xxxxxxxx => "hanako",
);

//Loop over all our friends. $number is a phone number above, and
//$name is the name next to it
foreach ($people as $number => $name) {

$sms = $client->account->messages->sendMessage(

//twilioから購入したSMS送信可能な電話番号
"+160xxxxxxxx",

// the number we are sending to - Any phone number
$number,

// the sms body
"このメッセージちゃんと届いてるか?"
);

// PC画面に表示されるメッセージ
echo $name . "にメッセージを送ったよ";
}

?>
--------------------------------------------------
このサンプルコードは公式のまま

paypalのエクスプレスチェックアウトを利用した定期支払いの導入

paypalのエクスプレスチェックアウトを利用した定期支払いの導入にはこちらのページが大変参考になった。

上記ページのサンプル

請求金額や請求頻度は、CreateRecurringPaymentsProfile APIで設定する。paypalfunctions.php 内にある次のパラメーターで指定できる。

----------------------------------
//定期支払いの請求開始日
"&PROFILESTARTDATE=".date("Y-m-d",strtotime("now"))."T0:0:0";

//30日ごとに請求
"&BILLINGPERIOD=Day";
"&BILLINGFREQUENCY=30";

//これだと5ヶ月ごとに請求
"&BILLINGPERIOD=Month";
"&BILLINGFREQUENCY=5";

//日本円で1,500円
"&AMT=1,500";
"&CURRENCYCODE=JPY";
----------------------------------

paypalのStart Date should be greater than current dateエラーの対処法

エクスプレスチェックアウトで定期支払いを実装したときに以下のエラーが出た

エラー内容
----------------------------------------------
GetExpressCheckoutDetails API call failed. Detailed Error Message: Subscription start date should be greater than current dateShort Error Message: Start Date should be greater than current dateError Code: 11505Error Severity Code: Error
----------------------------------------------

これは paypalfunctions.php 内の profilestartdate(定期支払いの請求開始日) に過去の日付が入っている場合に出る。現在か未来の時間に書き換えてやればok。

現在の時間を取得して入れる
----------------------------------------------
PROFILESTARTDATE=".date("Y-m-d",strtotime("now"))."T0:0:0";
----------------------------------------------

【paypal】エクスプレスチェックアウトの支払いページの社名を変更する

支払いページの社名をサービス名に変更したときの覚書。

支払いページの社名を変更する方法のひとつとしてlogo画像に置き換えるという手段がある。

[ツール]-[ビジネス設定]-(買い手の手続きを)[カスタマイズする]-会社のロゴの追加の[作成]から、logo画像を指定したページスタイルをメインにするだけ。

しかしこの方法だと、スマホから見た場合にlogo画像は表示されず、以前の社名のまま。スマホにはlogo画像は表示しない仕様ということかな。

他の方法を探してみると、SetExpressCheckout API のパラメーターに情報を追加することで可能らしい。

関連パラメーター
-----------------------------------------------
//logo画像を指定
$nvpstr = $nvpstr . "&LOGOIMG=" . urlencode('http://example.com/paypal_logo_img.gif');

//header画像を指定
$nvpstr = $nvpstr . "&HDRIMG=" . urlencode('http://example.com/header_img.gif');

//ページスタイルを指定
//上の二つはページスタイルを指定して変更される点と同じ。だからページスタイルが設定してあればこの一行でもいいし、設定画面でメインスタイルに指定していればなくてもいい。
//$nvpstr = $nvpstr . "&PAGESTYLE=mystyle";

//これがスマホ支払いページの社名を書き換えるパラメーター
$nvpstr = $nvpstr . "&BRANDNAME=サービス名";
-----------------------------------------------
青文字の部分は環境に合わせる

パラメーターを追記する場所は、paypalfunctions.php 内にある。

paypalfunctions.php の中を抜粋
-----------------------------------------------
function CallShortcutExpressCheckout( $paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL)
{
//------------------------------------------------------------------------------------------------------------------------------------
// Construct the parameter string that describes the SetExpressCheckout API call in the shortcut implementation

$nvpstr="&PAYMENTREQUEST_0_AMT=". $paymentAmount;
$nvpstr = $nvpstr . "&PAYMENTREQUEST_0_PAYMENTACTION=" . $paymentType;
$nvpstr = $nvpstr . "&RETURNURL=" . $returnURL;
$nvpstr = $nvpstr . "&CANCELURL=" . $cancelURL;
$nvpstr = $nvpstr . "&PAYMENTREQUEST_0_CURRENCYCODE=" . $currencyCodeType;

//ここら辺に追記すれば SetExpressCheckout API にパラメーターが渡る。

-----------------------------------------------

SetExpressCheckout API で使用できるパラメーター(公式)

パラーメータについて全部でないけど日本語でまとめてあるページ

【paypal】本番環境でだけAPIのエラーが出る

sandbox環境では問題ないのに本番環境だとエラーが出る。

エラー内容
--------------------------------------------
SetExpressCheckout API call failed. Detailed Error Message: Security header is not validShort Error Message: Security errorError Code: 10002Error Severity Code: Error
--------------------------------------------

APIの認証がうまくいっていないらしい。

対処法
paypalfunctions.phpを開いてSandboxFlag を false に書き換える。

書き換え内容
--------------------------------------------
//$SandboxFlag = true; //sandbox用
$SandboxFlag = false; //本番用
--------------------------------------------

paypal での支払い実装いろいろ

paypal での支払い実装方法いろいろ

1.定期購読

定期購読するだけならボタンを作成のみでok。sandbox でも可。

ボタン作成の過程はこちらが分かりやすい。

2.API でエクスプレスチェックアウト

PayPal Integration Wizardから順番に行えばいい。修正すべき点もあるが、こちらを参考にした。
ためしにやるなら参考ページと同じファイル名にすること。ファイル名変えて少しはまった。
IPN についても上記ページを参考に実装できる。

paypalのテスト環境(sandbox)の作り方

paypalでテスト環境を作るには、sandboxと呼ばれる開発用テストツールを利用する

sandboxとは
--------------------------------------
サンドボックスとは、保護された領域内でプログラムを動作させることで、その外へ悪影響が及ぶのを防止するセキュリティモデル。「子供を砂場(サンドボックス)の外で遊ばせない」という言葉が語源だと言われている。
--------------------------------------
引用元 e-Words

1.ビジネスアカウントで Developer ページにログインして、Dashborard(2016年4月現在、画面下部)の Sandbox accounts からテスト用アカウントを作る。
テスト用アカウントの造り方はこちら(公式)

このとき作るアカウントはテスト用のビジネスアカウント(売り手)とテスト用のパーソナルアカウント(買い手)それぞれひとつずつ。計ふたつ。

ここで登録するメールアドレスは存在しないものでいいし、金額(持ち金)も適当に多く設定しておけばいい。あくまでシミュレーションなので実際にお金が動くわけでない。

2.sandboxのトップページからビジネスアカウントでログインして、本番と同じようにページに paypal を仕込んで、パーソナルアカウントで買い物をする。

ログインするアドレスはこちら https://www.sandbox.paypal.com/jp/
sandbox(テスト環境)のトップページからログインする。テストアカウントで通常のログインできないので注意!