DepositOrder.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace app\api\model\supplier;
  3. use app\common\model\supplier\DepositOrder as DepositOrderModel;
  4. use app\api\service\order\paysuccess\type\CashPaySuccessService;
  5. use app\common\enum\order\OrderTypeEnum;
  6. use app\common\enum\order\OrderPayTypeEnum;
  7. use app\api\service\order\PaymentService;
  8. /**
  9. * 押金订单模型类
  10. */
  11. class DepositOrder extends DepositOrderModel
  12. {
  13. /**
  14. * 创建订单
  15. */
  16. public function createOrder($user, $supplier, $pay_type,$pay_source)
  17. {
  18. if($supplier['status'] != 20){
  19. $this->error = '您已支付保证金';
  20. return false;
  21. }
  22. $price = $supplier['category']['deposit_money'];
  23. // 余额支付标记订单已支付
  24. if ($pay_type == OrderPayTypeEnum::BALANCE) {
  25. // 验证余额支付时用户余额是否满足
  26. if ($user['balance'] < $price) {
  27. $this->error = '用户余额不足,无法使用余额支付';
  28. return false;
  29. }
  30. }
  31. $orderInfo = $this->where('user_id', '=', $user['user_id'])
  32. ->where('pay_status', '=', 10)->find();
  33. if($orderInfo){
  34. $order_no = $this->orderNo();
  35. $status = $this->where('order_id', $orderInfo['order_id'])->update(['order_no' =>$order_no]);
  36. $this['order_id'] = $orderInfo['order_id'];
  37. $this['order_no'] = $order_no;
  38. $this['pay_price'] = $price;
  39. }else{
  40. // 获取订单数据
  41. $data = [
  42. 'order_no' => $this->orderNo(),
  43. 'user_id' => $user['user_id'],
  44. 'pay_price' => $price,
  45. 'app_id' => self::$app_id,
  46. 'pay_source' => $pay_source
  47. ];
  48. $status = $this->save($data);
  49. }
  50. // 余额支付标记订单已支付
  51. if ($status && $pay_type == OrderPayTypeEnum::BALANCE) {
  52. $this->onPaymentByBalance($this['order_no']);
  53. }
  54. return $this['order_id'];
  55. }
  56. /**
  57. * 待支付订单详情
  58. */
  59. public static function getPayDetail($orderNo)
  60. {
  61. $model = new static();
  62. return $model->where(['order_no' => $orderNo, 'pay_status' => 10])->with(['user'])->find();
  63. }
  64. /**
  65. * 余额支付标记订单已支付
  66. */
  67. public function onPaymentByBalance($orderNo)
  68. {
  69. // 获取订单详情
  70. $PaySuccess = new CashPaySuccessService($orderNo);
  71. // 发起余额支付
  72. $status = $PaySuccess->onPaySuccess(OrderPayTypeEnum::BALANCE);
  73. if (!$status) {
  74. $this->error = $PaySuccess->getError();
  75. }
  76. return $status;
  77. }
  78. /**
  79. * 构建支付请求的参数
  80. */
  81. public static function onOrderPayment($user, $order, $payType, $pay_source)
  82. {
  83. //如果来源是h5,首次不处理,payH5再处理
  84. if($pay_source == 'h5'){
  85. return [];
  86. }
  87. if ($payType == OrderPayTypeEnum::WECHAT) {
  88. return self::onPaymentByWechat($user, $order, $pay_source);
  89. }
  90. return [];
  91. }
  92. /**
  93. * 构建微信支付请求
  94. */
  95. protected static function onPaymentByWechat($user, $order, $pay_source)
  96. {
  97. return PaymentService::wechat(
  98. $user,
  99. [$order],
  100. OrderTypeEnum::CASH,
  101. $pay_source
  102. );
  103. }
  104. }