Codream wordpress外掛報價須知

有鑑於最近網站越來越多人詢問wordpress客製化開發外掛的報價,這邊統一做個說明:

目前我們有在接客製化外掛開發,但我們還是小工作室,僅能以個人名義進行簽約,若有規定要要求公司開立發票,本工作室可委託認識的公司代開發票,但會額外收取8%的處理費用(包含所得稅等等)

訂製須知:

  • 清楚列出外掛該有的需求
  • 若有介面美觀需求需準備圖片及切版素材,若無此需求則使用bootstrap RWD排版幫您製作
  • 請給予三個月以上時間製作,若急單須加錢
  • 若有功能上疑問我方會在開發過程中詢問
  • 外掛開發完成驗收完成後有半年保固期,半年後依據外掛複雜程度收取每年4000~10000維護費用(網站大異動或需要更改、新增需求)則不包含在此費用內
  • 僅接受獨立功能的開發,不接受外掛改寫,若需要改寫外掛費用不會較開發便宜
  • 請提供我方wordpress測試環境以測試外掛在實際環境的運行狀況

wordpress外掛開發 簡易綠界API串接結合自己開發的外掛(進階版+不須另外建立頁面)

閱讀本篇前建議先閱讀

重點概念

1.新建一個class(要被外掛主檔引入)

2.在該支程式__construct()內做網址判斷

這邊假設我希望綠界回傳給我的網址是{Mywebsite_base_Url}/ecpayverify
我的判斷就會如下:

if(strpos($_SERVER['REQUEST_URI'], '/ecpayverify/')===0||strpos($_SERVER['REQUEST_URI'], '/ecpayverify/')>0){

}

3.將要處理的邏輯寫在裡面,處理完後記得要"exit();"避免回傳給綠界資訊時產生多於的程式碼,以下附上範例

<?php
if(!class_exists('onlineScheduleTrans')):

class onlineScheduleTrans{
	public static $_instance=NULL;
	function __construct(){
		global $wpdb;

		add_action('wp_ajax_nopriv_buyService', array($this, 'buyService'));
		add_action('wp_ajax_buyService', array($this, 'buyService'));

		if(strpos($_SERVER['REQUEST_URI'], '/ecpayverify/')===0||strpos($_SERVER['REQUEST_URI'], '/ecpayverify/')>0){
			global $wpdb;
			require_once onlineSchedule_DIR.'/SDK/ECPay.Payment.Integration.php';
			define( 'ECPay_MerchantID', '3145753' );
			define( 'ECPay_HashKey', 'kUMKO4xa8YHtgc1B' );
			define( 'ECPay_HashIV', 'CSZqL9EXECkOMlUt' );
			 
			// 重新整理回傳參數。
			$arParameters = $_POST;
			foreach ($arParameters as $keys => $value) {
			    if ($keys != 'CheckMacValue') {
			        if ($keys == 'PaymentType') {
			            $value = str_replace('_CVS', '', $value);
			            $value = str_replace('_BARCODE', '', $value);
			            $value = str_replace('_CreditCard', '', $value);
			        }
			        if ($keys == 'PeriodType') {
			            $value = str_replace('Y', 'Year', $value);
			            $value = str_replace('M', 'Month', $value);
			            $value = str_replace('D', 'Day', $value);
			        }
			        $arFeedback[$keys] = $value;
			    }
			}
			 
			// 計算出 CheckMacValue
			$CheckMacValue = ECPay_CheckMacValue::generate( $arParameters, ECPay_HashKey, ECPay_HashIV );
			// 必須要支付成功並且驗證碼正確
			if ( $_POST['RtnCode'] =='1' && $CheckMacValue == $_POST['CheckMacValue'] ){
			    // 要處理的程式放在這裡,例如將線上服務啟用、更新訂單資料庫付款資訊等
			    $MerchantTradeNo=$_POST["MerchantTradeNo"];
			    $RtnCode=$_POST["RtnCode"];
			    $TradeAmt=$_POST["TradeAmt"];
			    $CheckMacValue=$_POST["CheckMacValue"];
			    //if success do something
			}
			else{
				//if fail do something
			}
			// 接收到資訊回應綠界
			echo '1|OK';
			exit();
		}
	}

	public static function instance(){
		if(is_null(self::$_instance))self::$_instance=new self();
		return self::$_instance;
	}

}

endif;

這個寫法是正規外掛的寫法,比起基礎版可以省去建立頁面的麻煩,如果本篇教學有幫到你記得幫我點個讚~

(分享) windows 批次(batch)檔 – 將指定格式的檔案編碼轉成 utf-8

各位在做案子的時候不知道有沒有遇過一種狀況,按照廠商方的需求開發完程式了,卻因為要處理的檔案編碼的問題導致又得增加額外的工作量,想要簡單的上網查個現成的轉編碼方式直接套用又總是遇到各種問題,因為每個語言讀入和寫出檔案都有各自的處理方式,所以常常導致最後執行完的結果往往跟想像中的不一樣?

這個是我自己後來最常用的解決方法,只要在自己原本要執行的程式執行前先呼叫此執行檔進行要處理的文件編碼,即可正常執行,這邊提供兩個版本一個是轉成UTF-8 with BOM,一個是轉成utf-8,裡面都有文字檔可以設定要轉檔的路徑(循環往下讀入)及要轉檔的檔案格式

如果這邊文章讓你少繞了很多路或是您覺得好用的話動動小手點讚一下給個支持吧!

轉成 UTF8( no BOM ) :
https://drive.google.com/file/d/1ycanhBFOS5XcB1L0_m7aKtUMk-rLn2mN/view?usp=sharing

轉成 UTF8( with BOM ) :
https://drive.google.com/file/d/1ycanhBFOS5XcB1L0_m7aKtUMk-rLn2mN/view?usp=sharing

WordPress外掛提交流程

  1. 前往 https://wordpress.org/plugins/developers/
  2. 點選 Submit your plugin for review

3.上傳你開發好的外掛zip檔
※外掛除了可運行的程式還會要求在根目錄要有readme.txt※
如果不清楚格式可到 https://generatewp.com/plugin-readme/ 自動生成
若要在描述的部分新增可點選的網址請按照此格式,不然會被當成純文字處理:
[要顯示的名稱](網址)
example: [Google](https://www.google.com/)

提交之後就等待wordpress他們的人員幫你審查,審查完後他們會寄信跟你說有那些問題,修改完後你再以github或是google雲端的方式告知他們程式碼已修正就好,反正就是能讓他們載的到你的程式就OK,接下來就是修正->審核->修正->審核的過程

以下講講我自己外掛被審出的需要修改的地方,有些真的是沒碰過不會發現有問題,但我覺的wordpress方也蠻用心地都有明確指出哪邊有哪個類型的錯誤,也有說明錯誤在哪支程式哪一行

插件名稱問題

大意是說你一開始取的外掛名稱不符合規範,他們會給你一個他們建議的名稱,照著改就好,記得要改readme.txt跟你外掛主代碼的外掛描述(如下圖)

插件包含多餘資料夾

開發的時候如果我們有引用第三方套件,常常都會將整包檔案放進程式裡,但這接第三方套件裡常常都包含如demo,example,doc等外掛並不需要使用到的部分,wordpress會要求您將這些非必要的部分移除外掛

插件呼叫遠程文件

開發外掛的時候為求方便有時候會直接call CDN , wordpress會要求可以下載到本地端做呼叫的檔案盡量下載到本地端,真的沒辦法本地呼叫的(如:googlemap相關的套件),可以允許遠端呼叫

插件必須驗證數據

我猜是因為安全性的考量,wordpress會要求您的後端程式碼在接收前端的數據時要做過驗證,這部分一開始我搞不太懂,想說我有對數據做檢查他怎麼還是回信說有問題
https://developer.wordpress.org/plugins/security/securing-input/
wordpress有提供蠻多現成的函式來讓開發者做數據驗證及清理,如果你接收的資料想要自定義(簡單來講不是像email這種有標準格式的),使用GET或POST接收前端數據的時候建議就使用sanitize_text_field這個函式,他主要是可以過濾使用者惡意插入的html tag

有興趣的可以自行搜尋: XSS攻擊

插件中含有通用的函式名稱

簡單來說就是你外掛中的function取的名字太通用了不夠有區別性,因wordpress上會同時掛載多個外掛,所以官方要確保你function的名字獨特才不會跟別的外掛相互影響

全部修正完之後官方就會給你一個svn網址讓你更新跟管理你的外掛,要進行第一次上傳之後你的外掛才會變為公開,這點請注意,至於如何使用svn就留待下一篇詳解吧!

wordpress本機基礎測試環境架設

開發外掛的過程一定會遇到很多不可預期的狀況,如果是接案的狀況再更改設定或外掛不小心玩壞了要修復也是件挺令人擔心的事情,所以這篇主要教大家如何在本地端架出wordpress的環境,出了問題也能夠比較好理解問題在哪哦!

首先先下載XAMPP

https://www.apachefriends.org/zh_tw/download.html

下載完之後進行安裝,預設安裝完的路徑會在C:\xampp

xampp下有個資料夾叫做htdocs是網站的根目錄

在htdocs下放一包wordprss(記得解壓縮)

https://drive.google.com/file/d/1XxxI75FTbDfuiOiX-cYWnnMu0emns3TY/view?usp=sharing

放好之後打開xampp程式

打開Apache跟MySQL

按下MySQL右邊的Admin
先建一個要給wordpress用的資料庫

打開網頁,輸入 http://localhost/wordpress/ ,會出現這個畫面

點擊開始安裝

資料庫名稱填上剛剛建的資料庫名稱,然後設定使用者名稱跟密碼,xampp的mysql預設的帳號密碼是root跟空白,基本上主機位置跟資料表前置詞可以用預設就好,輸入無誤後按傳送

點選執行安裝程式

輸入完畢後點選安裝Wordpress

完成啦!!!可以開始盡情的玩囉~

如果真的遇到玩壞了不知道該怎麼修復的情況,只要把wordpress刪掉重新安裝一次就可以了