我實現了支付系統,這樣是這樣的正如你所提到的那樣擁有基類,但讓基類實例化了所需的支付供應商,該供應商擴展了基類。然後,基類是被加載哪些文件,集中控制,記錄控制,等等
public function loadVendor($vendorName) {
static $validVendors = array('credit_card','paypal');
if (!in_array($vendorName, $validVendors) {
return false;
}
include('/path/to//vendors/'.$vendorName.'.php');
$processor = new $vendorName();
//additional default setup
return $processor
}
因爲所有的廠商有不同的數據提交結構。你的基類應該有一個函數來「加載」數據。這把它放在你的標準格式中。然後,每個支付類將具有「地圖」功能,以將您的結構映射到其結構。例如,將日期分成不同的年份,月份,日期字段。
然後您有一個「提交」功能將數據提交給處理供應商。然後使用「解析響應」功能解析響應並將其放入您想出的標準化響應數據結構中。
爲簡單起見,您可以使用一種方法調用所有三個函數(map-> submit-> map。但是爲了測試,更容易將它們分開。 $ processor-> submit(); $ response = $ processor-> parseResponse();
當然,這並不真正適用於PayPal。貝寶是異步的,你發送用戶到他們的網站。然後Paypal在完成處理後將它們發送回您的網站。 Google checkout也是一樣。