BalanceOrder.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace app\api\model\user;
  3. use app\api\service\order\PaymentService;
  4. use app\common\enum\order\OrderPayTypeEnum;
  5. use app\common\enum\order\OrderTypeEnum;
  6. use app\common\exception\BaseException;
  7. use app\api\model\user\BalancePlan as PlanModel;
  8. use app\common\model\user\BalanceOrder as BalanceOrderModel;
  9. /**
  10. * 充值模型
  11. */
  12. class BalanceOrder extends BalanceOrderModel
  13. {
  14. /**
  15. * 创建订单
  16. */
  17. public function createOrder($user, $plan_id, $user_money)
  18. {
  19. // 获取订单数据
  20. $data = [
  21. 'order_no' => $this->orderNo(),
  22. 'user_id' => $user['user_id'],
  23. 'app_id' => self::$app_id
  24. ];
  25. if ($plan_id > 0) {
  26. $plan = PlanModel::detail($plan_id);
  27. $data['type'] = 20;
  28. $data['plan_id'] = $plan_id;
  29. $data['pay_price'] = $plan['money'];
  30. $data['give_money'] = $plan['give_money'];
  31. $data['real_money'] = $plan['real_money'];
  32. $this->buildSnapshot($data, $plan);
  33. } else {
  34. $data['type'] = 10;
  35. $data['pay_price'] = $user_money;
  36. // 匹配套餐
  37. $plan = $this->getPlan($user_money);
  38. if($plan != null){
  39. $data['plan_id'] = $plan['plan_id'];
  40. $data['give_money'] = $plan['give_money'];
  41. $data['real_money'] = $user_money + $plan['give_money'];
  42. $this->buildSnapshot($data, $plan);
  43. }else{
  44. $data['real_money'] = $user_money;
  45. }
  46. }
  47. $this->save($data);
  48. return $this['order_id'];
  49. }
  50. /**
  51. * 套餐快照
  52. */
  53. private function buildSnapshot(&$data, $plan){
  54. $data['snapshot'] = json_encode([
  55. 'plan_id' => $plan['plan_id'],
  56. 'plan_name' => $plan['plan_name'],
  57. 'pay_price' => $plan['money'],
  58. 'give_money' => $plan['gift_money'],
  59. 'real_money' => $plan['real_money']
  60. ]);
  61. }
  62. /**
  63. * 自定义金额匹配套餐
  64. */
  65. private function getPlan($user_money){
  66. $list = (new PlanModel())->getList();
  67. $plan = null;
  68. foreach ($list as $item){
  69. if($user_money > $item['money']){
  70. $plan = $item;
  71. }else{
  72. break;
  73. }
  74. }
  75. return $plan;
  76. }
  77. /**
  78. * 待支付订单详情
  79. */
  80. public static function getPayDetail($orderNo)
  81. {
  82. $model = new static();
  83. return $model->where(['order_no' => $orderNo, 'pay_status' => 10])->with(['user'])->find();
  84. }
  85. /**
  86. * 订单详情
  87. */
  88. public static function getUserOrderDetail($order_id, $user_id)
  89. {
  90. $model = new static();
  91. $order = $model->where(['order_id' => $order_id, 'user_id' => $user_id])->find();
  92. if (empty($order)) {
  93. throw new BaseException(['msg' => '订单不存在']);
  94. }
  95. return $order;
  96. }
  97. /**
  98. * 构建支付请求的参数
  99. */
  100. public static function onOrderPayment($user, $order, $payType, $pay_source)
  101. {
  102. //如果来源是h5,首次不处理,payH5再处理
  103. if($pay_source == 'h5'){
  104. return [];
  105. }
  106. if ($payType == OrderPayTypeEnum::WECHAT) {
  107. return self::onPaymentByWechat($user, $order, $pay_source);
  108. }
  109. return [];
  110. }
  111. /**
  112. * 构建微信支付请求
  113. */
  114. protected static function onPaymentByWechat($user, $order, $pay_source)
  115. {
  116. return PaymentService::wechat(
  117. $user,
  118. $order['order_id'],
  119. $order['order_no'],
  120. $order['pay_price'],
  121. OrderTypeEnum::BALANCE,
  122. $pay_source
  123. );
  124. }
  125. }