| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?php
- namespace App\Repositories;
- use App\Models\MerchantModel;
- use App\Models\OrderModel;
- use App\Repositories\Service\CommonService;
- use Carbon\Carbon;
- use Illuminate\Support\Facades\DB;
- use KZ2\Laravel\Repositories\Eloquent\Repository;
- class OrderRepository extends Repository
- {
- public function model()
- {
- return OrderModel::class;
- }
- /**
- * 发送回调信息
- *
- * @param $orderData
- * @return void
- */
- public function sendSuccessCallback($orderSn)
- {
- $orderInfo = OrderModel::query()->where('order_sn', $orderSn)->first();
- if (empty($orderInfo)) {
- logger('订单不存在', [$orderSn]);
- return false;
- }
- // 获取商户信息
- $merchantInfo = MerchantModel::query()->where('uid', $orderInfo->merchant_uid)->first();
- if (empty($merchantInfo)) {
- logger('商户不存在', [$orderSn]);
- return false;
- }
- $sendData = [
- 'merchant_code' => $merchantInfo->merchant_code,
- 'status' => $orderInfo->status == 2 ? 2 : 1,
- 'order_id' => $orderInfo->merchant_order_sn,
- 'trade_no' => $orderInfo->order_sn,
- 'amount' => $orderInfo->order_amount,
- 'real_amount' => $orderInfo->real_amount,
- 'product_name' => $orderInfo->product_name,
- 'notify_url' => $orderInfo->notify_url,
- 'redirect_url' => $orderInfo->redirect_url,
- ];
- $sendData['signature'] = build_sign($sendData, $merchantInfo->key);
- $result = app(CommonService::class)->httpPost($sendData, $orderInfo['notify_url']);
- $upData['callback_sent_times'] = $orderInfo['callback_sent_times'] + 1;
- $res = false;
- if ($result === 'SUCCESS') {
- $upData['notice_status'] = 2;
- $upData['notice_at'] = date('Y-m-d H:i:s');
- $res = true;
- } else {
- logger('回调发送失败:' . $result, [$orderSn]);
- }
- // 增加回调次数
- OrderModel::query()->where('id', $orderInfo['id'])->update($upData);
- return $res;
- }
- /**
- * 回调订单处理
- *
- * @param array $order
- * @param $tradeNo
- * @param $payMoney
- * @return false
- */
- public function doBuy(array $order, $tradeNo, $payMoney)
- {
- try {
- DB::beginTransaction();
- $orderMoney = floatval($order['real_amount']);
- $payMoney = floatval($payMoney);
- $minusMoney = floatval($orderMoney - $payMoney);
- $minusMoney = abs(round($minusMoney, 2));
- if ($minusMoney > 2) {
- logger("只允许订单金额和付款金额相差2元内", $order);
- DB::rollBack();
- return false;
- }
- //修改订单状态
- $updateData = array(
- 'real_amount' => $payMoney,
- 'status' => 2,
- 'pay_at' => Carbon::now()->toDateTimeString(),
- 'trade_no' => $tradeNo,
- );
- $orderRes = OrderModel::query()->where('id', $order['id'])->update($updateData);
- if (!$orderRes) {
- logger("修改订单状态失败", $order);
- DB::rollBack();
- return false;
- }
- // 发送回调
- $this->sendSuccessCallback($order['order_sn']);
- DB::commit();
- return true;
- } catch (\Exception $e) {
- logger($e->getMessage(), $order);
- DB::rollBack();
- return false;
- }
- DB::rollBack();
- return false;
- }
- }
|