PayMentService.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <?php
  2. namespace App\Services;
  3. use App\Http\Controllers\Api\AegPayController;
  4. use App\Http\Controllers\Api\ApcopayController;
  5. use App\Http\Controllers\Api\AppleStorePayController;
  6. use App\Http\Controllers\Api\BetCatPayController;
  7. use App\Http\Controllers\Api\BPayController;
  8. use App\Http\Controllers\Api\CashPayController;
  9. use App\Http\Controllers\Api\ClickPayController;
  10. use App\Http\Controllers\Api\CryptoController;
  11. use App\Http\Controllers\Api\FastPayController;
  12. use App\Http\Controllers\Api\GooglePayController;
  13. use App\Http\Controllers\Api\GoopagoController;
  14. use App\Http\Controllers\Api\HHPayColController;
  15. use App\Http\Controllers\Api\KaroPayController;
  16. use App\Http\Controllers\Api\LQPayController;
  17. use App\Http\Controllers\Api\NicePayController;
  18. use App\Http\Controllers\Api\PagsmileNewPayController;
  19. use App\Http\Controllers\Api\PagsmilePayController;
  20. use App\Http\Controllers\Api\PPayController;
  21. use App\Http\Controllers\Api\RussiaPayController;
  22. use App\Http\Controllers\Api\SitoBankController;
  23. use App\Http\Controllers\Api\SmartFastColController;
  24. use App\Http\Controllers\Api\SmartFastPayController;
  25. use App\Http\Controllers\Api\SmartFastPeruController;
  26. use App\Http\Controllers\Api\StanPayController;
  27. use App\Http\Controllers\Api\StarpagoBDController;
  28. use App\Http\Controllers\Api\TopPayController;
  29. use App\Http\Controllers\Api\WWPayColController;
  30. use App\Http\Controllers\Api\DoPayController;
  31. use App\Http\Controllers\Api\StarpagoController;
  32. use App\Http\Controllers\Api\PKpayController;
  33. use App\Http\Controllers\Api\ALL2payController;
  34. use Illuminate\Support\Facades\DB;
  35. use Illuminate\Support\Facades\Log;
  36. use Illuminate\Support\Facades\Redis;
  37. class PayMentService
  38. {
  39. public static function pay_order($transport = null)
  40. {
  41. switch ($transport) {
  42. // case 'pay4':
  43. // return new PagsmilePayController();
  44. // break;
  45. //
  46. // case 'pay44':
  47. // return new PagsmileNewPayController();
  48. // break;
  49. case 'ClickPay':
  50. return new ClickPayController();
  51. case 'TopPay':
  52. return new TopPayController();
  53. case 'DoPay_EP':
  54. return new DoPayController('EASYPAISA');
  55. case 'DoPay_JC':
  56. return new DoPayController('JAZZCASH');
  57. case 'Starpago_BK':
  58. return new StarpagoBDController('BKASH');
  59. case 'Starpago_NG':
  60. return new StarpagoBDController('NAGAD');
  61. case 'Starpago_EP':
  62. return new StarpagoController('EASYPAISA');
  63. case 'Starpago_JC':
  64. return new StarpagoController('JAZZCASH');
  65. case 'PKpay_EP':
  66. return new PKpayController('EASY');
  67. case 'PKpay_JC':
  68. return new PKpayController('JAZZ');
  69. case 'ALL2pay_EP':
  70. return new ALL2payController('EASYPAISA');
  71. case 'ALL2pay_JC':
  72. return new ALL2payController('JAZZCASH');
  73. case 'KaroPay_EP':
  74. return new KaroPayController('EASYPAISA');
  75. case 'KaroPay_JC':
  76. return new KaroPayController('JAZZCASH');
  77. case 'CashPay':
  78. return new CashPayController();
  79. case 'SitoBank':
  80. return new SitoBankController();
  81. // case 'FastPay':
  82. // return new FastPayController();
  83. // case 'NicePay':
  84. // return new NicePayController();
  85. case 'AegPay':
  86. return new AegPayController();
  87. case 'russiaPay':
  88. return new RussiaPayController();
  89. case 'StanPay':
  90. return new StanPayController();
  91. case 'SmartFastPay':
  92. return new SmartFastPayController();
  93. case 'LQPay':
  94. return new LQPayController();
  95. case 'PPay':
  96. return new PPayController();
  97. case 'SFP_Ecuador_Wallet':
  98. return new SmartFastPeruController("wallet",'EC');
  99. case 'SFP_Ecuador_Bank':
  100. return new SmartFastPeruController("bank_transfer",'EC');
  101. case 'SFP_Ecuador_MobileMoney':
  102. return new SmartFastPeruController("mobile_money",'EC');
  103. case 'SFP_Chile_Wallet':
  104. return new SmartFastPeruController("wallet",'CL');
  105. case 'SFP_Chile_Bank':
  106. return new SmartFastPeruController("bank_transfer",'CL');
  107. case 'SFP_Chile_CreditCard':
  108. return new SmartFastPeruController("credit_card",'CL');
  109. case 'SFP_PeruPay_Wallet':
  110. return new SmartFastPeruController("wallet",'PE');
  111. case 'SFP_PeruPay_Bank':
  112. return new SmartFastPeruController("bank_transfer",'PE');
  113. case 'SFP_PeruPay_CreditCard':
  114. return new SmartFastPeruController("credit_card",'PE');
  115. case 'SFP_PeruPay_CIP':
  116. return new SmartFastPeruController("cip",'PE');
  117. case 'SFP_ColPay_Bank':
  118. return new SmartFastPeruController("bancolombia",'CO');
  119. case 'SFP_ColPay_Efecty':
  120. return new SmartFastPeruController("efecty",'CO');
  121. case 'SFP_ColPay_Nequi':
  122. return new SmartFastColController('nequi');
  123. case 'SFP_ColPay_Transfiya':
  124. return new SmartFastColController('transfiya');
  125. case 'SFP_ColPay_PSE':
  126. return new SmartFastColController('pse');
  127. case 'DCP_Crypto':
  128. return new CryptoController();
  129. case 'HHPay':
  130. return new HHPayColController();
  131. case 'WWPay':
  132. return new WWPayColController();
  133. case 'Apcopay':
  134. return new ApcopayController();
  135. case 'apple':
  136. return new AppleStorePayController();
  137. case 'google':
  138. return new GooglePayController();
  139. default:
  140. throw new \Exception('unknown pay channel:'.$transport);
  141. }
  142. }
  143. /**
  144. * 根据支付方式随机获取充值渠道
  145. * @param $method
  146. * @param $channel
  147. * @return bool|mixed
  148. */
  149. /*public static function getServiceByPayMethod3($method, $channel)
  150. {
  151. // $switch = Redis::get("recharge_config_switch_{$channel}");
  152. // if ($channel && $switch) {
  153. // $services = DB::connection('write')
  154. // ->table('QPPlatformDB.dbo.ChannelOpenRecharge')
  155. // ->join(
  156. // 'agent.dbo.admin_configs',
  157. // 'admin_configs.id',
  158. // '=',
  159. // 'ChannelOpenRecharge.ConfigID'
  160. // )
  161. // ->where('admin_configs.new_pay_type', $method)
  162. // ->where('admin_configs.type', 'pay')
  163. // ->where('admin_configs.status', 1)
  164. // ->where('ChannelOpenRecharge.Status', 1)
  165. // ->where('ChannelOpenRecharge.Channel', $channel)
  166. // ->where('ChannelOpenRecharge.Sort', '>', 0)
  167. // ->selectRaw('admin_configs.config_key, ChannelOpenRecharge.Sort as sort')
  168. // ->get();
  169. // }
  170. $services = DB::table('agent.dbo.admin_configs')->where([
  171. 'new_pay_type' => $method,
  172. 'type' => 'pay',
  173. 'status' => 1,
  174. ])->get();
  175. if (!$services->count()) {
  176. Log::error('支付渠道配置异常', [
  177. 'method' => $method,
  178. ]);
  179. return false;
  180. }
  181. $matrix = [];
  182. foreach ($services as $v) {
  183. for ($i = 0; $i < $v->sort; $i++) {
  184. $matrix[] = $v->config_key;
  185. }
  186. }
  187. $res = $matrix[mt_rand(0, count($matrix)-1)];
  188. return $res;
  189. }*/
  190. /**
  191. * 根据支付方式随机获取充值渠道
  192. * @param $method
  193. * @param $channel
  194. * @return bool|mixed
  195. */
  196. public static function getServiceByPayMethod($method, $channel,$except_channelName="")
  197. {
  198. $except_configKeys=[$except_channelName];
  199. $switch = Redis::get("recharge_config_switch_{$channel}");
  200. if ($channel && $switch) {
  201. $services = DB::connection('write')
  202. ->table('QPPlatformDB.dbo.ChannelOpenRecharge')
  203. ->join(
  204. 'agent.dbo.admin_configs',
  205. 'admin_configs.id',
  206. '=',
  207. 'ChannelOpenRecharge.ConfigID'
  208. )
  209. ->where('admin_configs.new_pay_type', $method)
  210. ->whereNotIn('admin_configs.config_key',$except_configKeys)
  211. ->where('admin_configs.type', 'pay')
  212. ->where('admin_configs.status', 1)
  213. ->where('ChannelOpenRecharge.Status', 1)
  214. ->where('ChannelOpenRecharge.Channel', $channel)
  215. ->where('ChannelOpenRecharge.Sort', '>', 0)
  216. ->selectRaw('admin_configs.config_key, ChannelOpenRecharge.Sort as sort')
  217. ->get();
  218. }
  219. if (!isset($services) || !$services->count()) {
  220. $services = DB::table('agent.dbo.admin_configs')->where([
  221. 'new_pay_type' => $method,
  222. 'type' => 'pay',
  223. 'status' => 1,
  224. ])->get();
  225. if (!$services->count()) {
  226. Log::error('支付渠道配置异常', [
  227. 'method' => $method,
  228. ]);
  229. return false;
  230. }
  231. }
  232. $matrix = [];
  233. foreach ($services as $v) {
  234. for ($i = 0; $i < $v->sort; $i++) {
  235. if(Redis::exists("PayErro_".$v->config_key)) continue;
  236. $matrix[] = $v->config_key;
  237. }
  238. }
  239. if(count($matrix)==0) {
  240. foreach ($services as $v) {
  241. for ($i = 0; $i < $v->sort; $i++) {
  242. $matrix[] = $v->config_key;
  243. }
  244. }
  245. }
  246. $res = $matrix[mt_rand(0, count($matrix)-1)];
  247. return $res;
  248. }
  249. /**
  250. * 根据支付方式随机获取充值渠道
  251. * @param $method
  252. * @param $channel
  253. * @return bool|mixed
  254. */
  255. public static function getServiceByPayCountry($method, $channel,$country,$except_channelName="")
  256. {
  257. $except_configKeys=[$except_channelName];
  258. $switch = Redis::get("recharge_config_switch_{$channel}");
  259. if ($channel && $switch) {
  260. $services = DB::connection('write')
  261. ->table('QPPlatformDB.dbo.ChannelOpenRecharge')
  262. ->join(
  263. 'agent.dbo.admin_configs',
  264. 'admin_configs.id',
  265. '=',
  266. 'ChannelOpenRecharge.ConfigID'
  267. )
  268. ->where('admin_configs.new_pay_type', $method)
  269. ->whereNotIn('admin_configs.config_key',$except_configKeys)
  270. ->where('admin_configs.country', $country)
  271. ->where('admin_configs.type', 'pay')
  272. ->where('admin_configs.status', 1)
  273. ->where('ChannelOpenRecharge.Status', 1)
  274. ->where('ChannelOpenRecharge.Channel', $channel)
  275. ->where('ChannelOpenRecharge.Sort', '>', 0)
  276. ->selectRaw('admin_configs.config_key, ChannelOpenRecharge.Sort as sort')
  277. ->get();
  278. }
  279. if (!isset($services) || !$services->count()) {
  280. $services = DB::table('agent.dbo.admin_configs')->where([
  281. 'new_pay_type' => $method,
  282. 'type' => 'pay',
  283. 'status' => 1,
  284. 'country' => $country,
  285. ])->get();
  286. if (!$services->count()) {
  287. Log::error('支付渠道配置异常', [
  288. 'method' => $method,
  289. ]);
  290. return false;
  291. }
  292. }
  293. $matrix = [];
  294. foreach ($services as $v) {
  295. for ($i = 0; $i < $v->sort; $i++) {
  296. if(Redis::exists("PayErro_".$v->config_key)) continue;
  297. $matrix[] = $v->config_key;
  298. }
  299. }
  300. if(count($matrix)==0) {
  301. foreach ($services as $v) {
  302. for ($i = 0; $i < $v->sort; $i++) {
  303. $matrix[] = $v->config_key;
  304. }
  305. }
  306. }
  307. $res = $matrix[mt_rand(0, count($matrix)-1)];
  308. return $res;
  309. }
  310. }