我实现了支付系统,这样是这样的正如你所提到的那样拥有基类,但让基类实例化了所需的支付供应商,该供应商扩展了基类。然后,基类是被加载哪些文件,集中控制,记录控制,等等
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也是一样。