PaymentList.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. namespace addons\JoinPay\common\global_func\payment_list;
  3. use addons\JoinPay\common\enums\JoinPayTypeEnum;
  4. use common\enums\AddonsEnum;
  5. use common\enums\PayTypeEnum;
  6. use common\models\user\User;
  7. class PaymentList
  8. {
  9. public static function getPaymentList($params)
  10. {
  11. $app_platform = $params['app_platform'];
  12. $mall_id = $params['mall_id'];
  13. $req_source = $params['req_source'] ?? 1;
  14. $settings = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_JOIN_PAY, 'basic');
  15. // 判断设备平台是否开启
  16. $platform_open = 0;
  17. $platform_trades = [];
  18. switch ($app_platform) {
  19. case User::PLATFORM_APP:
  20. !empty($settings['joinpay_platform_app_open']) && $platform_open = $settings['joinpay_platform_app_open'];
  21. !empty($settings['joinpay_app_trades']) && $platform_trades = json_decode($settings['joinpay_app_trades'], true);
  22. break;
  23. case User::PLATFORM_H5:
  24. !empty($settings['joinpay_platform_h5_open']) && $platform_open = $settings['joinpay_platform_h5_open'];
  25. !empty($settings['joinpay_h5_trades']) && $platform_trades = json_decode($settings['joinpay_h5_trades'], true);
  26. break;
  27. case User::PLATFORM_WECHAT:
  28. !empty($settings['joinpay_platform_wechat_open']) && $platform_open = $settings['joinpay_platform_wechat_open'];
  29. !empty($settings['joinpay_wechat_trades']) && $platform_trades = json_decode($settings['joinpay_wechat_trades'], true);
  30. break;
  31. case User::PLATFORM_MP_WX:
  32. !empty($settings['joinpay_platform_mp_wx_open']) && $platform_open = $settings['joinpay_platform_mp_wx_open'];
  33. !empty($settings['joinpay_mp_wx_trades']) && $platform_trades = json_decode($settings['joinpay_mp_wx_trades'], true);
  34. break;
  35. }
  36. if (empty($platform_open)) return [];
  37. // 是否添加金额限制支付方式
  38. if (!empty($settings['price_limit_open'])) {
  39. if (!empty($params['pay_money']) && !empty($settings['price_limit_exceed_price']) && $params['pay_money'] >= $settings['price_limit_exceed_price'] && !empty($settings['price_limit_exceed_trades'])) {
  40. $price_limit_trades = json_decode($settings['price_limit_exceed_trades'], true);
  41. }else {
  42. $price_limit_trades = !empty($settings['price_limit_normal_trades']) ? json_decode($settings['price_limit_normal_trades'], true) : ['wechat', 'alipay', 'fastpay', 'unionpay'];
  43. }
  44. }else {
  45. $price_limit_trades = ['wechat', 'alipay', 'fastpay', 'unionpay'];
  46. }
  47. // dd(3333, $settings);
  48. $enable_pay_type = [];
  49. if (!empty($settings['joinpay_status'])) $enable_pay_type[] = 'joinpay';
  50. if (!empty($settings['joinpay_fast_pay_status']) && in_array('fastpay', $price_limit_trades) && in_array('fastpay', $platform_trades)) $enable_pay_type[] = 'joinpay_fast';
  51. $all_payment = JoinPayTypeEnum::allTypeConf();
  52. // dd($all_payment);
  53. $enable_payment = [];
  54. foreach ($enable_pay_type as $pay_type) {
  55. $payment_info = $all_payment[$pay_type] ?? [];
  56. if (empty($payment_info)) continue;
  57. $trade_type = '';
  58. $payment_type = '';
  59. switch ($payment_info['pay_type']) {
  60. case PayTypeEnum::JOINPAY:
  61. $payment_type = PayTypeEnum::JOINPAY;
  62. $trade_type = JoinPayTypeEnum::getTypeByPlatform($app_platform);
  63. if (!empty($trade_type)) {
  64. $name = '汇聚';
  65. if (is_array($trade_type)) {
  66. foreach ($trade_type as $item) {
  67. if (in_array($item, [JoinPayTypeEnum::ALIPAY_H5]) && in_array('alipay', $price_limit_trades)) {
  68. //支付宝支付
  69. $new_pay['name'] = $settings['joinpay_alipay_trade_name'] ?? $name . '-' . '支付宝支付';
  70. $new_pay['img'] = str_replace('joinpay', 'alipay', $payment_info['img']);
  71. $new_pay['pay_type'] = $payment_type;
  72. $new_pay['trade_type'] = $item;
  73. $new_pay['action'] = JoinPayTypeEnum::action($payment_type);
  74. $enable_payment['joinpay'][] = $new_pay;
  75. } elseif (in_array($item, [JoinPayTypeEnum::WEIXIN_H5, JoinPayTypeEnum::WEIXIN_GZH, JoinPayTypeEnum::WEIXIN_APP3, JoinPayTypeEnum::WEIXIN_XCX,
  76. JoinPayTypeEnum::WEIXIN_CJXCX]) && in_array('wechat', $price_limit_trades)) {
  77. //微信支付
  78. $new_pay['name'] = $settings['joinpay_wechat_trade_name'] ?? $name . '-' . '微信支付';
  79. $new_pay['img'] = str_replace('joinpay', 'wechat', $payment_info['img']);
  80. $new_pay['pay_type'] = $payment_type;
  81. $new_pay['trade_type'] = $item;
  82. $new_pay['action'] = JoinPayTypeEnum::action($payment_type);
  83. $enable_payment['joinpay'][] = $new_pay;
  84. } elseif (in_array($item, [JoinPayTypeEnum::UNIONPAY_APP, JoinPayTypeEnum::UNIONPAY_H5]) && in_array('unionpay', $price_limit_trades)) {
  85. //银联云闪付
  86. $new_pay['name'] = $settings['joinpay_unionpay_trade_name'] ?? $name . '-' . '银联云闪付';
  87. $new_pay['img'] = str_replace('joinpay', 'cloud', $payment_info['img']);
  88. $new_pay['pay_type'] = $payment_type;
  89. $new_pay['trade_type'] = $item;
  90. $new_pay['action'] = JoinPayTypeEnum::action($payment_type);
  91. $enable_payment['joinpay'][] = $new_pay;
  92. }
  93. }
  94. } else {
  95. if (in_array($trade_type, [JoinPayTypeEnum::ALIPAY_H5]) && in_array('alipay', $price_limit_trades)) {
  96. $payment_info['img'] = str_replace('joinpay', 'alipay', $payment_info['img']);
  97. $payment_info['name'] = $settings['joinpay_alipay_trade_name'] ?? $name . '-' . '支付宝支付';
  98. } elseif (in_array($trade_type, [JoinPayTypeEnum::WEIXIN_H5, JoinPayTypeEnum::WEIXIN_GZH, JoinPayTypeEnum::WEIXIN_APP3, JoinPayTypeEnum::WEIXIN_XCX,
  99. JoinPayTypeEnum::WEIXIN_CJXCX]) && in_array('wechat', $price_limit_trades)) {
  100. $payment_info['img'] = str_replace('joinpay', 'wechat', $payment_info['img']);
  101. $payment_info['name'] = $settings['joinpay_wechat_trade_name'] ?? $name . '-' . '微信支付';
  102. }
  103. $payment_info['trade_type'] = $trade_type;
  104. $payment_info['action'] = JoinPayTypeEnum::action($payment_type);
  105. $enable_payment[$pay_type] = $payment_info;
  106. }
  107. }
  108. break;
  109. case PayTypeEnum::JOINPAY_FAST_PAY:
  110. // 汇聚快捷支付
  111. $new_pay['name'] = $settings['joinpay_fastpay_trade_name'] ?? '汇聚-快捷支付';
  112. $new_pay['img'] = str_replace('wechat', 'joinpay_fast', $payment_info['img']);
  113. $new_pay['pay_type'] = PayTypeEnum::JOINPAY_FAST_PAY;
  114. $new_pay['trade_type'] = 'joinpay_fast';
  115. $new_pay['action'] = JoinPayTypeEnum::action(PayTypeEnum::JOINPAY_FAST_PAY);
  116. $enable_payment['joinpay_fast'] = $new_pay;
  117. break;
  118. }
  119. }
  120. // dd($enable_payment);
  121. // 支付--汇聚支付渠道,1:商品订单,2:余额充值
  122. $joinpay_trade_channel = json_decode($settings['joinpay_trade_channel'], true);
  123. if(empty($joinpay_trade_channel)) $joinpay_trade_channel = [];
  124. // 提现--汇聚代付支付渠道,1:
  125. $joinpay_alternative_channel = json_decode($settings['joinpay_channel_alternative'], true);
  126. if(empty($joinpay_trade_channel)) $joinpay_alternative_channel = [];
  127. // 汇聚支付的支付渠道为空,不支持汇聚支付
  128. if (empty($joinpay_trade_channel) && empty($joinpay_alternative_channel)) unset($enable_payment['joinpay'], $enable_payment['joinpay_fast']);
  129. if (JoinPayTypeEnum::JOINPAY_CHANNEL_ORDER == $req_source) {
  130. if (!in_array(1, $joinpay_trade_channel)) {
  131. // 商品订单不支持汇聚支付
  132. unset($enable_payment['joinpay'], $enable_payment['joinpay_fast']);
  133. }
  134. } elseif (JoinPayTypeEnum::JOINPAY_CHANNEL_RECHARGE == $req_source) {
  135. if (!in_array(2, $joinpay_trade_channel)) {
  136. // 余额充值不支持汇聚支付
  137. unset($enable_payment['joinpay'], $enable_payment['joinpay_fast']);
  138. }
  139. } elseif (JoinPayTypeEnum::JOINPAY_CHANNEL_ALTERNATIVE_BALANCE == $req_source) {
  140. unset($enable_payment['joinpay']);
  141. if ($settings['joinpay_alternative_status'] != 1 || !in_array(1, $joinpay_alternative_channel)) {
  142. // 余额提现不支持汇聚代付
  143. unset($enable_payment['joinpay_fast']);
  144. }
  145. } elseif (JoinPayTypeEnum::JOINPAY_CHANNEL_ALTERNATIVE_COMMISSION == $req_source) {
  146. unset($enable_payment['joinpay']);
  147. if ($settings['joinpay_alternative_status'] != 1 || !in_array(2, $joinpay_alternative_channel)) {
  148. // 佣金提现不支持汇聚代付
  149. unset($enable_payment['joinpay_fast']);
  150. }
  151. }
  152. if (!empty($enable_payment['joinpay'])) {
  153. $joinpay_info = $enable_payment['joinpay'];
  154. unset($enable_payment['joinpay']);
  155. $arr = JoinPayTypeEnum::getJoinpayTradeMap();
  156. // dd($arr);
  157. if (count($joinpay_info) == count($joinpay_info, 1)) {
  158. // 支付方式开关过滤
  159. if (in_array($arr[$joinpay_info['trade_type']], $platform_trades)) {
  160. $enable_payment[strtolower($joinpay_info['trade_type'])] = $joinpay_info;
  161. }
  162. } else {
  163. foreach ($joinpay_info as $val) {
  164. if (in_array($arr[$val['trade_type']], $platform_trades)) {
  165. $enable_payment[strtolower($val['trade_type'])] = $val;
  166. }
  167. }
  168. }
  169. }
  170. return $enable_payment;
  171. }
  172. public static function getPaymentType($params)
  173. {
  174. $mall_id = $params['mall_id'];
  175. $settings = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_JOIN_PAY, 'basic');
  176. $enable_pay_type = [];
  177. if (!empty($settings['joinpay_status'])){
  178. $enable_pay_type[] = [
  179. "name" => '汇聚支付',
  180. "pay_type" => PayTypeEnum::JOINPAY,
  181. ];
  182. }
  183. if (!empty($settings['joinpay_fast_pay_status'])){
  184. $enable_pay_type[] = [
  185. "name" => '汇聚-快捷支付',
  186. "pay_type" => PayTypeEnum::JOINPAY_FAST_PAY,
  187. ];
  188. }
  189. return $enable_pay_type;
  190. }
  191. }