RBridgeFactory.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace rbridge;
  3. require_once(BASE_HELPER_PATH . '/refill_proxy.php');
  4. require_once(BASE_HELPER_PATH . '/rbridge/IBridge.php');
  5. require_once(BASE_HELPER_PATH . '/rbridge/wsd/Bridge.php');
  6. use Exception;
  7. use Log;
  8. class RBridgeFactory
  9. {
  10. private static $stInstance = null;
  11. public static function instance()
  12. {
  13. if (self::$stInstance == null) {
  14. self::$stInstance = new RBridgeFactory();
  15. }
  16. return self::$stInstance;
  17. }
  18. private $mMerchants;
  19. private function __construct()
  20. {
  21. $this->mMerchants = [];
  22. }
  23. public function add($mch_name,$parmas)
  24. {
  25. $bridge = $this->find($mch_name);
  26. if(is_null($bridge)) {
  27. return false;
  28. }
  29. $ret = $bridge->add($parmas);
  30. return $ret;
  31. }
  32. public function notify($mch_name,$parmas)
  33. {
  34. $bridge = $this->find($mch_name);
  35. if(is_null($bridge)) {
  36. return false;
  37. }
  38. $ret = $bridge->notify($parmas);
  39. if($ret) {
  40. return "SUCCESS";
  41. }
  42. else {
  43. return "ERROR";
  44. }
  45. }
  46. private function find($name)
  47. {
  48. try
  49. {
  50. if(array_key_exists($name,$this->mMerchants)) {
  51. return $this->mMerchants[$name];
  52. }
  53. $class = "rbridge\\{$name}\\Bridge";
  54. if(class_exists($class,false)) {
  55. $merchant = new $class();
  56. $this->mMerchants[$name] = $merchant;
  57. return $merchant;
  58. } else {
  59. $error = "Error: class {$class} isn't exists!";
  60. throw new Exception($error);
  61. }
  62. }
  63. catch (Exception $ex)
  64. {
  65. Log::record($ex->getMessage(),Log::ERR);
  66. }
  67. return null;
  68. }
  69. }