Payment.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace addons\JoinPay\common\global_func\payment;
  3. use addons\JoinPay\common\enums\JoinPayTypeEnum;
  4. use addons\JoinPay\common\models\JoinPayUserBankcard;
  5. use common\enums\AddonsEnum;
  6. use common\enums\PayTypeEnum;
  7. use common\enums\StatusEnum;
  8. use common\helpers\Url;
  9. use common\models\common\PaymentTrade;
  10. use common\models\common\PaymentTradeOrder;
  11. use common\models\common\PaymentTradeGroupOrder;
  12. class Payment
  13. {
  14. public static function pay($params)
  15. {
  16. if(empty($params['action'])||empty($params['trade_type'])||empty($params['trade']) || !in_array($params['pay_type'],[7,8])){
  17. return [];
  18. }
  19. $action = $params['action'];
  20. $trade = $params['trade'];
  21. $trade_type = $params['trade_type'];
  22. if(!method_exists(self::class,$action)) return [];
  23. return self::$action($trade,$trade_type,$params);
  24. }
  25. /**
  26. * 汇聚聚合支付
  27. * @param PaymentTrade $trade
  28. * @param $tradeType
  29. * @param array $params
  30. * @return array|mixed
  31. * @throws \Exception
  32. */
  33. public static function joinpay(PaymentTrade $trade, $tradeType, $params = [], $extra_config = [])
  34. {
  35. $pay_type = \addons\JoinPay\common\enums\JoinPayTypeEnum::action(\addons\JoinPay\common\enums\JoinPayTypeEnum::JOINPAY);
  36. $order = [
  37. 'title' => $trade->title,
  38. 'order_no' => $trade->out_trade_no,
  39. 'amount' => $trade->getOnlinePayFee(),
  40. 'mall_id' => $trade->mall_id,
  41. // 'notify_url' => Url::toApi(['notify/' . $pay_type], TRUE),
  42. 'notify_url' => \Yii::$app->request->hostInfo . '/join-pay/notify/joinpay',
  43. 'type' => $tradeType,
  44. 'open_id' => $params['openid'] ?? ''
  45. ];
  46. $config =self::getConfig($trade->mall_id, $pay_type);
  47. if (!empty($extra_config)) {
  48. foreach ($extra_config as $config_key => $config_value) {
  49. isset($config[$config_key]) && $config[$config_key] = $config_value;
  50. }
  51. }
  52. // dd($config);
  53. $pay = \Yii::$app->payment->joinpay($config);
  54. $res = $pay->pay($order);
  55. // 给前端返回订单号和订单金额
  56. // 增加组合支付判断
  57. if(!empty($trade->is_pay_group)){
  58. $paymentOrderObj = PaymentTradeGroupOrder::class;
  59. }else{
  60. $paymentOrderObj = PaymentTradeOrder::class;
  61. }
  62. $trade_order = $paymentOrderObj::findOne(['trade_id' => $trade->id]);
  63. $res['order_no'] = $trade_order->order_no;
  64. $res['amount'] = $trade->getOnlinePayFee();
  65. // dd(33333, $res);
  66. return $res;
  67. }
  68. /**
  69. * 汇聚快捷支付
  70. * @param PaymentTrade $trade
  71. * @param $tradeType
  72. * @param array $params
  73. * @return bool
  74. * @throws Exception
  75. */
  76. public static function joinpay_fast(PaymentTrade $trade, $tradeType, $params = [])
  77. {
  78. $order = [
  79. 'order_no' => $trade->out_trade_no,
  80. 'sms_code' => $params['sms_code'],
  81. 'created_at' => $trade->created_at
  82. ];
  83. $pay_type = \addons\JoinPay\common\enums\JoinPayTypeEnum::action(\addons\JoinPay\common\enums\JoinPayTypeEnum::JOINPAY_FAST_PAY);
  84. $config = self::getConfig($trade->mall_id, $pay_type);
  85. $pay = \Yii::$app->payment->joinpayFastPay($config);
  86. return $pay->pay($order);
  87. }
  88. /**
  89. * 获取商城支付配置
  90. * @param $mall_id
  91. * @param $pay_type
  92. * @return array|mixed
  93. * @throws
  94. */
  95. public static function getConfig($mall_id, $pay_type)
  96. {
  97. if ($mall_id) {
  98. $config = \Yii::$app->services->setting->mall->get($mall_id, 'pay.' . $pay_type, true);
  99. } else {
  100. //获取系统配置
  101. $config = \Yii::$app->services->setting->platform->get($pay_type,true);
  102. }
  103. if (empty($config)) {
  104. throw new \Exception('查询不到对应的支付配置');
  105. }
  106. return $config && is_string($config) ? json_decode($config, true) : $config;
  107. }
  108. }