OrderService.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace backend\modules\mall\services;
  3. use common\enums\PayTypeEnum;
  4. use common\models\common\PaymentTrade;
  5. use common\models\order\Order;
  6. use Yii;
  7. use common\enums\StatusEnum;
  8. use common\models\order\OrderExpress;
  9. /**
  10. * 订单
  11. * @package backend\modules\mall\services
  12. */
  13. class OrderService extends BaseService
  14. {
  15. /**
  16. * 管理员支付
  17. *
  18. * @param array $data
  19. * @return boolean
  20. */
  21. public function adminPay(array $data)
  22. {
  23. $db = Yii::$app->db->beginTransaction();
  24. try {
  25. $order_id = $data['id'];
  26. $order = Order::findOne($order_id);
  27. $trade = [
  28. 'mall_id' => $this->mall_id,
  29. 'user_id' => $order->user_id,
  30. 'out_trade_no' => PaymentTrade::createOutTradeNo(),
  31. 'pay_fee' => $order->pay_money,
  32. 'total_fee' => $order->goods_price,
  33. 'rand_fee' => 0, // 不需要记录
  34. 'title' => mb_convert_encoding(mb_substr('订单后台支付', 0, 32),'UTF-8'),
  35. 'return_url' => '',
  36. 'is_pay' => 1,
  37. 'pay_type' => PayTypeEnum::OFFLINE,
  38. ];
  39. //正则过滤除了汉字字母数字的其它字符
  40. $trade['title'] = preg_replace('#[^\x{4e00}-\x{9fa5}A-Za-z0-9]#u','',$trade['title']);
  41. $paymentTrade = new PaymentTrade();
  42. $paymentTrade->attributes = $trade;
  43. if (!$paymentTrade->save()) {
  44. throw new \Exception($paymentTrade->getErrorMessage());
  45. }
  46. $res = Order::pay($data, PayTypeEnum::OFFLINE, $paymentTrade->out_trade_no);
  47. if ($res === false) {
  48. throw new \Exception(Order::getStaticError());
  49. }
  50. $db->commit();
  51. } catch (\Exception $e) {
  52. $db->rollBack();
  53. return $this->error($e->getMessage());
  54. }
  55. return true;
  56. }
  57. /**
  58. * 当前express_no是否已经发货
  59. *
  60. * @param array $params
  61. *
  62. * @return bool
  63. */
  64. public function checkOrderExpressNo(array $params)
  65. {
  66. return OrderExpress::find()->where([
  67. 'order_id' => $params['id'],
  68. 'express_no' => $params['express_no'],
  69. 'status' => StatusEnum::ENABLED
  70. ])->exists();
  71. }
  72. }