RechargeSubmitForm.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\client\models\v1;
  8. use app\models\AccountLog;
  9. use app\models\Level;
  10. use app\models\MemberUpgradeRecord;
  11. use app\models\Option;
  12. use app\models\Recharge;
  13. use app\models\ReOrder;
  14. use app\models\StoreAliMini;
  15. use app\models\Order;
  16. use app\models\RcCommissionLog;
  17. use app\models\Share;
  18. use app\models\User;
  19. use app\modules\admin\models\AlipayThirdForm;
  20. use app\modules\client\models\ApiModel;
  21. use app\modules\client\models\v1\order\OrderPayDataForm;
  22. //use app\plugins\scanCodePay\models\Order;
  23. use app\utils\Alipay\Alipay;
  24. use app\utils\Alipay\AlipayProfit;
  25. use app\utils\Alipay\alipaySdk\aop\request\AlipaySystemOauthTokenRequest;
  26. use app\utils\OrderNo;
  27. use app\utils\Wechat\WechatNewPay;
  28. use app\utils\Wechat\WechatPay;
  29. use EasyWeChat\Factory;
  30. use Overtrue\Socialite\SocialiteManager;
  31. use yii\helpers\Json;
  32. use app\models\Store;
  33. use app\models\UserShareLog;
  34. use app\models\UserShareMoney;
  35. use app\utils\Adapay\Adapay;
  36. use app\utils\Emoji;
  37. use yii\helpers\ArrayHelper;
  38. use yii\helpers\VarDumper;
  39. /**
  40. * @property User $user
  41. * @property ReOrder $order
  42. */
  43. class RechargeSubmitForm extends ApiModel
  44. {
  45. public $store_id;
  46. public $session_key;
  47. public $recharge_id;
  48. public $pay_price;
  49. public $send_price;
  50. public $send_integral;
  51. public $pay_type;
  52. public $_from;
  53. public $assign_member;
  54. public $level_up;
  55. /* @var Factory $wechatPay */
  56. public $wechatPay;
  57. public $order;
  58. public $user;
  59. public function rules()
  60. {
  61. return [
  62. [['pay_price', 'pay_type'], 'required'],
  63. [['send_price', 'send_integral', 'level_up', 'recharge_id'], 'number'],
  64. [['_from', 'assign_member'], 'string'],
  65. [['pay_type'], 'in', 'range' => [1, 4, Order::PAY_TYPE_WX_B2B, Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY, Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX]],
  66. [['_from'], 'in', 'range' => ['app', 'mini', 'h5', 'official']],
  67. [['session_key'], 'safe'],
  68. ];
  69. }
  70. public function save()
  71. {
  72. $this->wechatPay = self::getWechatPay();
  73. if (!$this->validate()) {
  74. return [
  75. 'code' => 1,
  76. 'msg' => $this->getErrorSummary(false)[0],
  77. ];
  78. }
  79. $order = new ReOrder();
  80. $order->store_id = $this->store_id;
  81. $order->user_id = $this->user->id;
  82. if ($this->send_price != 0 || $this->send_integral != 0) {
  83. $exists = Recharge::find()->where([
  84. 'store_id' => $this->store_id, 'pay_price' => $this->pay_price, 'send_price' => $this->send_price, 'send_integral' => $this->send_integral, 'is_delete' => 0
  85. ])->exists();
  86. if (!$exists) {
  87. return [
  88. 'code' => 1,
  89. 'msg' => '充值失败,请重新充值'
  90. ];
  91. }
  92. }
  93. // TODO 判断用户等级是否可以充值
  94. if (!empty($this->assign_member)) {
  95. $condition = json_decode($this->assign_member, true);
  96. $numeric_array = array_map('intval', $condition);
  97. $levelType = Level::find()->where(['store_id' => get_store_id(), 'is_delete' => Level::NOT_DELETE])->andWhere(['level' => $numeric_array])->asArray()->all();
  98. $user = User::findOne(get_user_id());
  99. if (in_array(0, $numeric_array)) {
  100. } else if (isset($user->level) && in_array($user->level, $numeric_array)) {
  101. } else {
  102. $names = ArrayHelper::getColumn(
  103. $levelType,
  104. function ($item) {
  105. return is_array($item['name']) ? implode(', ', $item['name']) : $item['name'];
  106. }
  107. );
  108. $levelNames = implode(', ', $names);
  109. if (!empty($levelNames)) {
  110. return [
  111. 'code' => 1,
  112. 'msg' => "仅限 {$levelNames} 购买"
  113. ];
  114. }
  115. }
  116. }
  117. // 是否是平台小程序订单
  118. if (is_platform()) {
  119. $order->is_platform = 1;
  120. }
  121. $order->pay_price = $this->pay_price;
  122. $order->send_price = $this->send_price;
  123. $order->send_integral = $this->send_integral;
  124. $order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_RECHARGE);
  125. $order->is_pay = 0;
  126. $order->pay_type = $this->pay_type;
  127. $order->is_delete = 0;
  128. $order->created_at = time();
  129. if (!empty($this->level_up) && !empty($this->recharge_id)) {
  130. $order->recharge_id = $this->recharge_id;
  131. $order->level_up = $this->level_up;
  132. }
  133. // 供应链系统下单时是否使用平台商户号,1使用,0未使用
  134. // if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->store_id)) {
  135. // $order->is_use_platform_mch = 1;
  136. // }
  137. if ($order->save()) {
  138. $this->order = $order;
  139. $body = "充值";
  140. if ($this->pay_type == 1) {
  141. if ($this->_from == OrderPayDataForm::PAY_FROM_APP) {
  142. $order->order_origin = Order::ORDER_SOURCE_APP;
  143. $order->save();
  144. if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->store_id) && self_mini() === false) {
  145. $result = WechatPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, true);
  146. } else {
  147. if (is_profit_pay()) {
  148. $result = WechatNewPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, true);
  149. } else {
  150. $result = WechatPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, true);
  151. }
  152. }
  153. } else {
  154. $is_h5 = false;
  155. if (is_h5()) {
  156. $is_h5 = true;
  157. }
  158. $is_mp = false;
  159. $order->order_origin = $is_h5 ? Order::ORDER_SOURCE_WEB : Order::ORDER_SOURCE_MINI;
  160. if ($this->_from == OrderPayDataForm::PAY_FROM_OFFICIAL) {
  161. $order->order_origin = Order::ORDER_SOURCE_MP;
  162. $is_h5 = false;
  163. $is_mp = true;
  164. }
  165. $order->save();
  166. if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->store_id) && self_mini() === false) {
  167. $result = WechatPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, $is_h5, $is_mp);
  168. } else {
  169. if (is_profit_pay()) {
  170. $result = WechatNewPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, $is_h5, $is_mp);
  171. } else {
  172. $result = WechatPay::orderUnify($order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, $is_h5, $is_mp);
  173. }
  174. }
  175. }
  176. if (isset($result['code']) && $result['code'] == 1) {
  177. return $result;
  178. }
  179. return [
  180. 'code' => 0,
  181. 'msg' => 'success',
  182. 'data' => (object)$result['data'],
  183. 'res' => $result['res'],
  184. 'body' => $body,
  185. ];
  186. } elseif (in_array($this->pay_type, [Order::PAY_TYPE_WX_B2B])) {
  187. $result = \app\modules\admin\models\UserAuditForm::pay($this->session_key, $order,OrderNo::ORDER_RECHARGE, $body);
  188. return $result;
  189. } elseif (in_array($this->pay_type, [Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY])) {
  190. $result = Adapay::create($this->pay_type, $order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, 0, is_h5());
  191. return $result;
  192. } elseif (in_array($this->pay_type, [Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX])) {
  193. $result = \app\utils\Adapay\AdapayV2::create($this->pay_type, $order,OrderNo::ORDER_RECHARGE, $body, 0, false, 0, 0, is_h5());
  194. return $result;
  195. }elseif ($this->pay_type == 4) {
  196. $user = get_user();
  197. if ($this->_from == 'mini') {
  198. if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id) && self_mini() === false) {
  199. $result = Alipay::mini($this->order, '充值', $user, '', '', 0, 0, 0);
  200. } else {
  201. if (is_profit_pay('ali')) {
  202. $result = AlipayProfit::mini($order, '充值', $user, '', '', false, 0, 0, 0);
  203. } else {
  204. $result = Alipay::mini($order, '充值', $user, '', '', 0, 0, 0);
  205. }
  206. }
  207. if (isset($result['code']) && $result['code'] == 1) {
  208. return $result;
  209. }
  210. if (isset($result['data'])) {
  211. $result['data'] = array_merge($result['data'], [
  212. 'is_finish' => 1
  213. ]);
  214. }
  215. return $result;
  216. } else if ($this->_from == 'h5') {
  217. if (\Yii::$app->prod_is_dandianpu() && !Store::hasIncoming($this->order->store_id, 'alipay', is_h5())) {
  218. $result = Alipay::wap($this->order,'充值', 'user/balance/recharge');
  219. } else {
  220. if (is_profit_pay()) {
  221. $result = AlipayProfit::wap($this->order, '充值', 'user/balance/recharge');
  222. } else {
  223. $result = Alipay::wap($this->order, '充值', 'user/balance/recharge');
  224. }
  225. }
  226. if($result['code']){
  227. return $result;
  228. }
  229. return [
  230. 'code' => 0,
  231. 'msg' => 'success',
  232. 'data' => $result
  233. ];
  234. } else {
  235. if (is_profit_pay('ali')) {
  236. $result = AlipayProfit::app($this->order, '充值', $user, '', 0);
  237. } else {
  238. $result = Alipay::app($this->order, '充值', $user, '', 0);
  239. }
  240. if (isset($result['code']) && $result['code'] == 1) {
  241. return $result;
  242. }
  243. return [
  244. 'code' => 0,
  245. 'msg' => 'success',
  246. 'data' => $result,
  247. ];
  248. }
  249. }
  250. } else {
  251. return [
  252. 'code' => 1,
  253. 'msg' => $this->getErrorSummary(false)[0],
  254. ];
  255. }
  256. }
  257. }