get('area_id', $this->user->register_area_id); $money = $request->get('money'); $recharge_configuration_id = $request->get('config_id', 0); $config = []; $setting = false; if ($recharge_configuration_id) { //参与活动 $setting = $rechargeConfigurationRepository->byIdGetActiveModel($recharge_configuration_id); if (bccomp($money, $setting->recharge_money, 0) !== 0) { $money = $setting->recharge_money; } } else { $setting = $rechargeConfigurationRepository->byMoneyGetActiveModel($money,$area_id); } if ($setting) { if ((int)$setting->area_id !== (int)$area_id) { return $this->errorNoValidation('该区域暂不支持此活动'); } $config = $setting->only(['id', 'recharge_money', 'give_money', 'discount', 'area_id', 'name']); // if (bccomp($setting->discount, 1.00, 2) < 0) { // // 有折扣 // } } $data = [ 'area_id' => $area_id, 'recharge_money' => $money, 'preferential_money' => 0.00, 'total_money' => $money, 'pay_money' => $money, 'user_id' => $this->user->id, 'no' => RechargeOrder::makeNo(), 'pay_status' => RechargeOrder::PAY_STATUS_NO, 'pay_type' => RechargeOrder::PAY_TYPE_WECHAT, 'recharge_config' => php2js($config) ]; $order = RechargeOrder::create($data); $this->dispatch(new CloseOrderJob($order, Carbon::now()->addMinutes(30))); $payment = app('wechat.payment'); // 微信支付 $auth = $this->user->auth; $result = $payment->order->unify([ 'body' => "用户余额充值-" . config('app.name', '未来bike'), 'out_trade_no' => $order->no, 'trade_type' => 'JSAPI', // 必须为JSAPI 'openid' => $auth['credential'], // 这里的openid为付款人的openid 'total_fee' => wechat_fee($order->pay_money), // 总价 'attach' => makeNoTag(RechargeOrder::NO_TAG) ]); // 如果成功生成统一下单的订单,那么进行二次签名 if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') { // 二次签名的参数必须与下面相同 $params = [ 'appId' => $auth['identifier'], 'timeStamp' => time(), 'nonceStr' => $result['nonce_str'], 'package' => 'prepay_id=' . $result['prepay_id'], 'signType' => 'MD5', ]; // config('wechat.payment.default.key')为商户的key $params['paySign'] = generate_sign($params, config('wechat.payment.default.key')); return $this->response->array($params); } return $this->errorNoValidation('下单失败'); } catch (\Exception $exception) { return $this->errorNoValidation($exception->getMessage()); } } }