* @license GPL https://xxx.com * @link https://xxx.com * @ctime: 2020/5/19 9:33 */ namespace App\Http\Controllers\V1; use App\Http\Requests\PunishmentOrderRequest; use App\Models\PunishmentOrder; use App\Repositories\PunishmentOrderRepository; use App\Transformers\PunishmentOrdersTransformer; use App\Transformers\PunishmentOrderTransformer; use function EasyWeChat\Kernel\Support\generate_sign; class PunishmentOrderController extends BaseController { public function index(PunishmentOrderRepository $punishmentOrderRepository) { try { $user_id = $this->user->id; $punishmentOrders = $punishmentOrderRepository->getAllByUserId($user_id); return $this->response->paginator($punishmentOrders, PunishmentOrdersTransformer::class); } catch (\Exception $e) { return $this->errorNoValidation($e->getMessage()); } } public function show(PunishmentOrderRequest $punishmentOrderRequest, PunishmentOrderRepository $punishmentOrderRepository) { try { $no = $punishmentOrderRequest->get('no'); $punishmentOrder = $punishmentOrderRepository->getModelByNo($no); if (empty($punishmentOrder)) return $this->errorNoValidation('找不到该罚单'); return $this->response->item($punishmentOrder, PunishmentOrderTransformer::class); } catch (\Exception $e) { return $this->errorNoValidation($e->getMessage()); } } public function pay(PunishmentOrderRequest $punishmentOrderRequest, PunishmentOrderRepository $punishmentOrderRepository) { try { $no = $punishmentOrderRequest->get('no'); $punishmentOrder = $punishmentOrderRepository->getModelByNo($no); if (empty($punishmentOrder)) return $this->errorNoValidation('找不到该罚单'); $payOk = $punishmentOrderRepository->isPay($no); if (!empty($payOk)) return $this->errorNoValidation('此罚单已支付'); $user = $this->user(); $payment = app('wechat.payment'); // 微信支付 // $username = $user->truename; $auth = $user->auth; $result = $payment->order->unify([ 'body' => "用户支付罚单-" . config('app.name', '未来bike'), 'out_trade_no' => $punishmentOrder->no, 'trade_type' => 'JSAPI', // 必须为JSAPI 'openid' => $auth['credential'], // 这里的openid为付款人的openid 'total_fee' => wechat_fee($punishmentOrder->pay_money), // 总价 'attach' => makeNoTag(PunishmentOrder::NO_TAG) ]); if ($result['return_code'] === 'FAIL') return $this->errorNoValidation('下单失败'); // 如果成功生成统一下单的订单,那么进行二次签名 if ($result['result_code'] === 'FAIL') { //判断是否重复下单 if ($result['err_code'] === 'INVALID_REQUEST') { $punishmentOrder->no = PunishmentOrder::makeNo(); $punishmentOrder->save(); $result = $payment->order->unify([ 'body' => "用户支付罚单-" . config('app.name', '未来bike'), 'out_trade_no' => $punishmentOrder->no, 'trade_type' => 'JSAPI', // 必须为JSAPI 'openid' => $auth['credential'], // 这里的openid为付款人的openid 'total_fee' => wechat_fee($punishmentOrder->pay_money), // 总价 'attach' => makeNoTag(PunishmentOrder::NO_TAG) ]); } else { return $this->errorNoValidation('下单失败'); } } // 二次签名的参数必须与下面相同 $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')); $response = $params; $response['order_no'] = $punishmentOrder->no; return $this->response->array($response); } catch (\Exception $exception) { return $this->errorNoValidation($exception->getMessage()); } } }