recharge_sn = ShopRecharge::snowflake(RechargeSnType::SHOP); $od->seller_id = $seller->id; $od->shop_id = $seller->shop_id; $od->pay_type = $payType; $od->pay_money = $payMoney; $od->pay_state = PayState::UNPAID; $od->save(); return $od; } public function shopRedirectPay(Seller $seller, $rechargeSn) { return 'https:://baidu.com'; } /** * 查询充值订单的充值结果 * @param Customer $customer * @param $rechargeSn * @throws \Throwable */ public function shopRechargeQuery(Customer $customer, $rechargeSn) { /** @var CustomerRecharge $recharge */ $recharge = CustomerRecharge::sn($rechargeSn) ->where('customer_id', $customer->id) ->first(); throw_if(!$recharge, JingCaiException::create('充值单号错误')); // TODO::此处逻辑需要完善 // throw_if($recharge->pay_state == PayState::PENDING, JingCaiException::create('支付成功,订单处理中')); if ($recharge->trade) { return; } try { // $pay = Pay::create($recharge->pay_type); // $tradeInfo = $pay->tradeQuery($recharge->recharge_sn); // throw_if(!$pay->tradeSuccessed($tradeInfo), JingCaiException::create($pay->tradeUnSuccessMessage($tradeInfo))); $tradeInfo = [ 'trade_no' => BaseModel::snowflake('ALIPAY'), 'trade_status' => 'TRADE_SUCCESS', 'out_trade_no' => $recharge->recharge_sn, 'send_pay_date' => date('Y-m-d H:i:s'), 'receipt_amount' => $recharge->pay_money, 'total_amount' => $recharge->pay_money, ]; $recharge->setPending(); event(new PaySuccessEvent($tradeInfo, Trade::ROLE_CUSTOMER, $recharge->pay_type,$rechargeSn)); } catch (PayException $exception) { $code = $exception->getCode() > 0 ? $exception->getCode() : Result::FAILED; JingCaiException::throwJingcai($exception->getMessage(), $code); } } /** * 生成充值订单 * @param Customer $customer * @param $data * @return CustomerRecharge */ public function customerCreateRecharge(Customer $customer, $data) { $payType = Arr::get($data, 'pay_type'); $payChannel = Arr::get($data, 'pay_channel', 1); $payMoney = Arr::get($data, 'pay_money'); $orderSn = Arr::get($data, 'order_sn'); throw_if(!PayType::hasValue($payType), JingCaiException::create('请选择正确的支付方式')); throw_if(!bc_gt($payMoney, 0), JingCaiException::create('充值金额必须大于0')); ThrowException::isTrue(!Arr::get(ShopPayChannel::payChannels(), $payChannel), '支付渠道有误'); $shopPayChannel = ShopPayChannel::where('pay_type', $payType) ->where('shop_id', $customer->shop_id) ->where('pay_channel', $payChannel) ->where('opened', BoolEnum::YES) ->where('state', ShopPayChannel::STATE_SUCCESS) ->first(); ThrowException::isTrue(!$shopPayChannel, '支付渠道不可用,请重新选择支付渠道'); $orderId = 0; if ($orderSn) { $order = Order::sn($orderSn)->first(); throw_if(!$orderSn, JingCaiException::create('订单号有误')); $orderId = $order->id; } $od = new CustomerRecharge(); $od->recharge_sn = CustomerRecharge::snowflake(RechargeSnType::CUSTOMER); $od->customer_id = $customer->id; $od->pay_type = $payType; $od->pay_channel_id = $shopPayChannel->id; $od->pay_money = $payMoney; $od->order_id = $orderId; $od->pay_state = PayState::UNPAID; $od->save(); return $od; } public function customerRedirectPay(Customer $customer, $rechargeSn) { return 'https:://baidu.com'; } /** * 查询充值订单的充值结果 * @param Customer $customer * @param $rechargeSn * @throws \Throwable */ public function customerRechargeQuery(Customer $customer, $rechargeSn) { /** @var CustomerRecharge $recharge */ $recharge = CustomerRecharge::sn($rechargeSn) ->where('customer_id', $customer->id) ->first(); throw_if(!$recharge, JingCaiException::create('充值单号错误')); return $recharge; } }