123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- <?php
- namespace app\controller\api\v1\order;
- use app\services\order\OtherOrderServices;
- use app\services\pay\OrderPayServices;
- use app\services\pay\PayServices;
- use app\services\pay\YuePayServices;
- use app\services\user\member\MemberCardServices;
- use app\services\user\UserServices;
- use crmeb\services\CacheService;
- use crmeb\services\SystemConfigService;
- use app\Request;
- class OtherOrderController
- {
-
- protected $services;
-
- public function __construct(OtherOrderServices $services)
- {
- $this->services = $services;
- }
-
- public function computed_offline_pay_price(Request $request)
- {
- [$pay_price] = $request->getMore([
- ['pay_price', 0]
- ], true);
- if (!$pay_price || !is_numeric($pay_price)) return app('json')->fail('请输入付款金额');
- $uid = $request->uid();
-
- $userService = app()->make(UserServices::class);
- $user_info = $userService->get($uid, ['is_money_level', 'is_ever_level', 'overdue_time']);
-
- if ($user_info->is_money_level > 0 && $user_info->overdue_time > time()) {
-
-
- $memberCardService = app()->make(MemberCardServices::class);
- $offline_rule_number = $memberCardService->isOpenMemberCardCache('offline');
- if ($offline_rule_number) {
- $pay_price = bcmul($pay_price, bcdiv($offline_rule_number, '100', 2), 2);
- } else {
- $pay_price = 0;
- }
- } else {
- $pay_price = 0;
- }
- return app('json')->successful(['pay_price' => $pay_price]);
- }
-
- public function create(Request $request)
- {
- [$payType, $type, $from, $memberId, $price, $money, $quitUrl] = $request->postMore([
- ['pay_type', 'yue'],
- ['type', 0],
- ['from', 'weixin'],
- ['member_type', ''],
- ['price', 0.00],
- ['money', 0.00],
- ['quitUrl', ''],
- ], true);
- $payType = strtolower($payType);
- if (!(int)$memberId) {
- return app('json')->fail('缺少购买会员类型ID');
- }
- if (in_array($type, [1, 2])) {
-
- $memberCardService = app()->make(MemberCardServices::class);
- $isOpenMember = $memberCardService->isOpenMemberCardCache();
- if (!$isOpenMember) return app('json')->fail('付费会员功能暂未开启!');
- }
- $channelType = $request->user('user_type');
- $uid = (int)$request->uid();
-
- $OtherOrderServices = app()->make(OtherOrderServices::class);
- $order = $OtherOrderServices->createOrder($uid, $memberId, $price, $channelType, $payType, $type);
- if ($order === false) return app('json')->fail('支付数据生成失败');
- $order_id = $order['order_id'];
- $orderInfo = $order->toArray();
- $info = compact('order_id');
- if ($order_id) {
- switch ($payType) {
- case PayServices::WEIXIN_PAY:
- if ($orderInfo['paid']) return app('json')->fail('已支付!');
-
- if (bcsub((string)$orderInfo['pay_price'], '0', 2) <= 0) {
-
- $payPriceStatus = $OtherOrderServices->zeroYuanPayment($orderInfo);
- if ($payPriceStatus)
- return app('json')->status('success', '微信支付成功', $info);
- else
- return app('json')->status('pay_error');
- } else {
-
- $payServices = app()->make(OrderPayServices::class);
- $info['jsConfig'] = $payServices->orderPay($orderInfo, $from);
- if ($from == 'weixinh5') {
- return app('json')->status('wechat_h5_pay', '前往支付', $info);
- } else {
- return app('json')->status('wechat_pay', '前往支付', $info);
- }
- }
- break;
- case PayServices::YUE_PAY:
-
- $yueServices = app()->make(YuePayServices::class);
- $pay = $yueServices->yueOrderPay($orderInfo, $uid);
- if ($pay['status'] === true)
- return app('json')->status('success', '余额支付成功', $info);
- else {
- if (is_array($pay))
- return app('json')->status($pay['status'], $pay['msg'], $info);
- else
- return app('json')->status('pay_error', $pay);
- }
- break;
- case PayServices::ALIAPY_PAY:
- if (!$quitUrl && ($request->isH5() || $request->isWechat())) {
- return app('json')->status('pay_error', '请传入支付宝支付回调URL', $info);
- }
-
- if (bcsub((string)$orderInfo['pay_price'], '0', 2) <= 0) {
-
- $payPriceStatus = $OtherOrderServices->zeroYuanPayment($orderInfo);
- if ($payPriceStatus)
- return app('json')->status('success', '支付宝支付成功', $info);
- else
- return app('json')->status('pay_error');
- } else {
-
- $payServices = app()->make(OrderPayServices::class);
- $info['jsConfig'] = $payServices->alipayOrder($orderInfo, $quitUrl, $request->isRoutine());
- $payKey = md5($orderInfo['order_id']);
- CacheService::set($payKey, ['order_id' => $orderInfo['order_id'], 'other_pay_type' => true], 300);
- $info['pay_key'] = $payKey;
- return app('json')->status(PayServices::ALIAPY_PAY . '_pay', '前往支付', $info);
- }
- break;
- case PayServices::OFFLINE_PAY:
- return app('json')->status('success', '前往支付', $info);
- break;
- default:
- return app('json')->fail('未知支付方式');
- }
- } else return app('json')->fail('订单生成失败!');
- }
-
- public function pay_type(Request $request)
- {
- $payType = SystemConfigService::more(['ali_pay_status', 'pay_weixin_open', 'site_name', 'balance_func_status', 'yue_pay_status']);
- $payType['now_money'] = $request->user('now_money');
- $payType['offline_pay_status'] = true;
- $payType['yue_pay_status'] = (int)($payType['balance_func_status'] ?? 0) && (int)($payType['yue_pay_status'] ?? 0) == 1 ? 1 : 0;
- unset($payType['balance_func_status'], $payType['yue_pay_status']);
- return app('json')->successful($payType);
- }
- }
|