あった印房:Yahoo!ショッピング:サイト説明更新

 「あった!」がうれしい、ネット版印鑑タワー「あった印房」は登録件数十二万七千件!
 お名前を検索して書体を確認してからご注文いただけます。 特殊な文字(異体字・旧字体)にも対応しています。
 ふりがな指定の“有料オプション”を準備中です。 希望する“読み”が未登録の場合は、お手数ですが注文前にご連絡ください。

https://store.shopping.yahoo.co.jp/atta-inbou/

あった印房:Twitter:自己紹介更新

印影を確認してから注文できる、認印専門「あった印房」 です。
6mm:780円(込858円)・10/9mm:920円(込1012円)
14時までのご注文で即日発送。
神奈川県横浜市緑区からお届けします。

未登録の名前があれば、是非教えてください。
実在・非実在(漫画・アニメ・VTuber等)不問

https://x.com/atta_inbou

開発の覚え書き

色々構築していると、微妙に手続きがバラバラだったりしていけませんね。
メモしておきましょう(こればっか)
とりあえずPHPで思うことを。

コントローラ単体で完結させない
基幹クラスはシステム・ユーザ・管理を必ず分離する
DB処理は共通化する
ログは基幹クラスで取る
コントローラから直接ログは叩かないようにする

課題
エラースローの作り方教えて…
クラスのerrを監視するやり方から抜け出せない…

更新:「Amazon Pay」の支払手続きをTampermonkeyで自動承認するスクリプト

AmazonPayの承認画面が変更になり、従来のスクリプトでは動かなくなりました。
通常のフォームタグではなく、疑似要素を使用したものになり、時間差で内容が更新されるなど、よくわからない仕様になっています。
いろいろ眺めていたのですが、埒が明かなかったのでAIに丸投げしました。
以下のコードで承認を自動化できます。

// ==UserScript==
// @name         クリックポスト(AmazonPay):step2:決済(AmazonPay側)
// @namespace    http://tampermonkey.net/
// @version      2026-05-30
// @description  「続行」テキストの外側にあるrole="button"を自動でクリックします
// @author       You
// @match        https://*.amazon.co.jp/checkout/*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    // クリック処理を実行する関数
    function tryClickContinue() {
        // 画面上のすべての role="button" を取得
        const buttons = document.querySelectorAll('[role="button"]');

        for (const button of buttons) {
            // ボタンのテキスト、または子要素のテキストに「続行」が含まれているか確認
            if (button.textContent && button.textContent.includes('続行')) {
                // すでに非表示、または無効化されている場合はスキップ
                if (button.offsetWidth === 0 || button.offsetHeight === 0) continue;

                console.log('「続行」ボタンを検出しました。クリックイベントを発火します。', button);

                // クリックイベントの生成と発火(React等のフレームワークによる制御に対応するためバブリングを有効化)
                const clickEvent = new MouseEvent('click', {
                    bubbles: true,
                    cancelable: true,
                    view: window
                });
                button.dispatchEvent(clickEvent);

                // 1度実行したらこの周期のループは抜ける(必要に応じて監視を止める場合は observer.disconnect() を実行)
                break;
            }
        }
    }

    // Next.jsなどのダイナミックレンダリングに対応するため、定期的にDOMを確認
    const intervalId = setInterval(() => {
        tryClickContinue();
    }, 500); // 0.5秒ごとにチェック

    // ページ遷移等で無限に動き続けるのを防ぐため、一定時間(例: 30秒)で監視をクリアすることも可能
    setTimeout(() => {
        clearInterval(intervalId);
    }, 30000);
})();

クリックポストの支払いで使用していますが、理論上は他のシステム経由でも動くとおもいます。

更新:クリックポストで「Amazon Pay」の支払手続きをTampermonkeyで自動実行するスクリプト(AmazonPayサイト)

AmazonPay側にてアクセス毎に異なるHTMLコードが出力されることを確認しましたので把握したものを追加しました。
form外にsubmitボタンを置くとか正気ですか?
以下のものに差し替えてください。

// ==UserScript==
// @name         クリックポスト:支払手続き完了(Amazon Pay)
// @namespace    http://tampermonkey.net/
// @version      2026-01-19
// @description  支払手続き完了を実行します。
// @author       penlabo
// @match        https://clickpost.jp/amazon_pay/confirm?*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var target = document.querySelector('#payment_buttons > form input[type="submit"]');
    if (target) target.click();
    var target2 = document.querySelector('#continue-button input[type="submit"]');
    if (target2) target2.click();
})();

更新:クリックポストで「Amazon Pay」の支払手続きをTampermonkeyで自動実行するスクリプト

前の記事から更新しました。
2026年より(?)HTMLコードが変更になっていますので、対応させました。
1つ目は変更無しです。
2つ目と3つ目を更新してください。

// ==UserScript==
// @name         クリックポスト:一時保存(Amazon Pay)
// @namespace    http://tampermonkey.net/
// @version      2023-05-01
// @description  “内容品”が「/skip」ではないお届け先の“支払手続き”を自動で実行します。
// @author       penlabo
// @match        https://clickpost.jp/packages/list
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    onload = function (){
        var line = 1;
        while (1) {
            var elmTarget = document.getElementById('AmazonPayCV2Button' + line);
            if (!elmTarget) return false;
            var elmParent = elmTarget.parentNode;
            var elmPrevious = elmParent.previousElementSibling;
            var elmText = elmPrevious.innerText;
            if (elmText != '/skip') {
                elmTarget.click();
                return false;
            }
            elmParent.style.backgroundColor = 'lightgrey';
            line++;
        }
    };
})();

その後の手続きを実行するものも追記しておきます。

// ==UserScript==
// @name         クリックポスト:決済(Amazon Pay)
// @namespace    http://tampermonkey.net/
// @version      2026-01-06
// @description  決済を実行します。
// @author       penlabo
// @match        https://payments.amazon.co.jp/checkout?*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var target = document.querySelector('#continue-button > span > input');
    target.click();
})();

// ==UserScript==
// @name         クリックポスト:支払手続き完了(Amazon Pay)
// @namespace    http://tampermonkey.net/
// @version      2026-01-06
// @description  支払手続き完了を実行します。
// @author       penlabo
// @match        https://clickpost.jp/amazon_pay/confirm?*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var target = document.querySelector('#payment_buttons > form input[type="submit"]');
    target.click();
})();

これで全自動で処理が進みます。

POASの稼働環境がすべてPHP7に

昨日の更新で、POASがすべてPHP7の環境下での稼働に切り替わりました。
数年前の脱PHP5を考えていた頃に、CentOSが(いろいろな意味で)使えなくなる騒動があり、様子を見ている間に凄い年月が経ってしまっていました。
現在はAlmaLinuxが安心だということで、サーバを切り替えている途中でして、これでやっと一段落です。

POASとはPrintOrderAdministrationSystemの略で、要は印刷注文システムです。
更新停滞気味のサイトも用意しております。
※たまにサイトが移動します。どちらかでアクセスできるはずです。
印刷業者や新規参入の方、印刷注文のウェブ受注を始めたいと興味を持たれた場合はご連絡ください。

現時点の開発環境では、PHPのバージョンを5か7かを判定する分岐が残っていますので、これをすべてPHP7ように最適化してPHP5までのコードを完全に削除される予定です。
他にも色々最適化は行っており、運営しながらあーでもない・こーでもないとシステムを弄りまくっておりますので、更新のたびに不具合が直ったり逆に増えたりするかもしれません。