OtherOrderController.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\api\controller\v1\order;
  12. use app\services\order\OtherOrderServices;
  13. use app\services\pay\OrderPayServices;
  14. use app\services\pay\PayServices;
  15. use app\services\pay\YuePayServices;
  16. use app\services\user\member\MemberCardServices;
  17. use app\services\user\UserServices;
  18. use app\Request;
  19. /**
  20. * Class OtherOrderController
  21. * @package app\api\controller\v1\order
  22. */
  23. class OtherOrderController
  24. {
  25. /**
  26. * @var OtherOrderServices
  27. */
  28. protected $services;
  29. protected $channelType = ['weixin' => 'wechat', 'weixinh5' => 'weixinh5', 'routine' => 'routine'];
  30. /**
  31. * OtherOrderController constructor.
  32. * @param OtherOrderServices $services
  33. */
  34. public function __construct(OtherOrderServices $services)
  35. {
  36. $this->services = $services;
  37. }
  38. /**
  39. * 计算会员线下付款金额
  40. * @param Request $request
  41. * @return mixed
  42. */
  43. public function computed_offline_pay_price(Request $request)
  44. {
  45. list($pay_price) = $request->getMore([['pay_price', 0]], true);
  46. $old_price = $pay_price;
  47. if (!$pay_price || !is_numeric($pay_price)) return app('json')->fail(410190);
  48. $uid = $request->uid();
  49. /** @var UserServices $userService */
  50. $userService = app()->make(UserServices::class);
  51. $user_info = $userService->get($uid, ['is_money_level']);
  52. //会员线下享受折扣
  53. if ($user_info->is_money_level > 0) {
  54. //看是否开启线下享受折扣
  55. /** @var MemberCardServices $memberCardService */
  56. $memberCardService = app()->make(MemberCardServices::class);
  57. $offline_rule_number = $memberCardService->isOpenMemberCard('offline');
  58. if ($offline_rule_number) {
  59. $pay_price = bcmul($pay_price, bcdiv($offline_rule_number, '100', 2), 2);
  60. }
  61. }
  62. $show = true;
  63. if ($old_price == $pay_price) $show = false;
  64. return app('json')->success(['pay_price' => $pay_price, 'show' => $show]);
  65. }
  66. /**
  67. * @param Request $request
  68. * @return mixed
  69. * @throws \think\db\exception\DataNotFoundException
  70. * @throws \think\db\exception\DbException
  71. * @throws \think\db\exception\ModelNotFoundException
  72. */
  73. public function create(Request $request)
  74. {
  75. $uid = (int)$request->uid();
  76. /** @var OtherOrderServices $OtherOrderServices */
  77. $OtherOrderServices = app()->make(OtherOrderServices::class);
  78. /** @var UserServices $userServices */
  79. $userServices = app()->make(UserServices::class);
  80. [$payType, $type, $from, $memberType, $price, $money, $quitUrl, $mcId] = $request->postMore([
  81. ['pay_type', 'yue'],
  82. ['type', 0],
  83. ['from', 'weixin'],
  84. ['member_type', ''],
  85. ['price', 0.00],
  86. ['money', 0.00],
  87. ['quitUrl', ''],
  88. ['mc_id', 0]
  89. ], true);
  90. if ($money <= 0.00) return app('json')->fail(410191);
  91. $payType = strtolower($payType);
  92. if (in_array($type, [1, 2])) {
  93. /** @var MemberCardServices $memberCardService */
  94. $memberCardService = app()->make(MemberCardServices::class);
  95. $isOpenMember = $memberCardService->isOpenMemberCard();
  96. if (!$isOpenMember) return app('json')->fail(410192);
  97. }
  98. $channelType = $userServices->getUserInfo($uid)['user_type'];
  99. $order = $OtherOrderServices->createOrder($uid, $channelType, $memberType, $price, $payType, $type, $money, $mcId);
  100. if ($order === false) return app('json')->fail(410193);
  101. $order_id = $order['order_id'];
  102. $orderInfo = $OtherOrderServices->getOne(['order_id' => $order_id]);
  103. if (!$orderInfo) return app('json')->fail(410194);
  104. $orderInfo = $orderInfo->toArray();
  105. $info = compact('order_id');
  106. $payType = app()->make(OrderPayServices::class)->getPayType($payType);
  107. //支付金额为0
  108. if (bcsub((string)$orderInfo['pay_price'], '0', 2) <= 0) {
  109. //创建订单jspay支付
  110. $payPriceStatus = $OtherOrderServices->zeroYuanPayment($orderInfo);
  111. if ($payPriceStatus)//0元支付成功
  112. return app('json')->status('success', 410217, $info);
  113. else
  114. return app('json')->status('pay_error');
  115. }
  116. if ($order_id) {
  117. switch ($payType) {
  118. case PayServices::YUE_PAY:
  119. /** @var YuePayServices $yueServices */
  120. $yueServices = app()->make(YuePayServices::class);
  121. $pay = $yueServices->yueOrderPay($orderInfo, $uid);
  122. if ($pay['status'] === true)
  123. return app('json')->status('success', 410197, $info);
  124. else {
  125. if (is_array($pay))
  126. return app('json')->status($pay['status'], $pay['msg'], $info);
  127. else
  128. return app('json')->status('pay_error', $pay);
  129. }
  130. case PayServices::OFFLINE_PAY:
  131. return app('json')->status('success', 410196, $info);
  132. default:
  133. $payServices = app()->make(OrderPayServices::class);
  134. $payInfo = $payServices->beforePay($order->toArray(), $payType, ['quitUrl' => $quitUrl]);
  135. return app('json')->status($payInfo['status'], $payInfo['payInfo']);
  136. }
  137. } else return app('json')->fail(410200);
  138. }
  139. /**
  140. * 线下支付方式
  141. * @return mixed
  142. */
  143. public function pay_type(Request $request)
  144. {
  145. $payType['ali_pay_status'] = sys_config('ali_pay_status', '0') != '0';
  146. $payType['pay_weixin_open'] = sys_config('pay_weixin_open', '0') != '0';
  147. $payType['site_name'] = sys_config('site_name');
  148. $payType['now_money'] = $request->user('now_money');
  149. $payType['offline_pay_status'] = true;
  150. $payType['yue_pay_status'] = (int)sys_config('balance_func_status') && (int)sys_config('yue_pay_status') == 1 ? 1 : 0;//余额支付 1 开启 2 关闭
  151. return app('json')->success($payType);
  152. }
  153. }