config('dgpay.app_id'), 'app_secret' => config('dgpay.app_secret'), 'merchant_no' => config('dgpay.merchant_no'), 'notify_url' => config('dgpay.notify_url'), 'return_url' => config('dgpay.return_url'), 'is_sandbox' => config('dgpay.is_sandbox'), 'gateway' => config('dgpay.is_sandbox') ? config('dgpay.sandbox_gateway') : config('dgpay.gateway'), ); BsPay::init($config); } /** * 创建支付订单 * * @param string $orderNo 商户订单号 * @param float $amount 支付金额 * @param string $subject 商品标题 * @param string $payType 支付方式:ALIPAY_H5/WECHAT_H5等 * @return array */ public function createOrder(string $orderNo, float $amount, string $subject, string $payType): array { try { $request = match ($payType) { 'ALIPAY_H5', 'WECHAT_H5' => new V2TradePaymentWappayRequest(), 'ALIPAY_JSAPI', 'WECHAT_JSAPI' => new V2TradePaymentJspayRequest(), 'ALIPAY_NATIVE', 'WECHAT_NATIVE' => new V2TradePaymentScanpayRequest(), default => throw new \InvalidArgumentException('Unsupported pay type: ' . $payType), }; $request->setOutOrderNo($orderNo); $request->setTransAmt($amount); $request->setGoodsDesc($subject); $request->setPayType($payType); $response = BsPay::request($request); if ($response->isSuccess()) { return [ 'success' => true, 'data' => $response->getData() ]; } return [ 'success' => false, 'message' => $response->getMsg() ]; } catch (\Exception $e) { Log::error('DgPay create order error: ' . $e->getMessage()); return [ 'success' => false, 'message' => $e->getMessage() ]; } } /** * 查询订单 * * @param string $orderNo 商户订单号 * @return array */ public function queryOrder(string $orderNo): array { try { $request = new V2TradePaymentQueryRequest(); $request->setOutOrderNo($orderNo); $response = BsPay::request($request); if ($response->isSuccess()) { return [ 'success' => true, 'data' => $response->getData() ]; } return [ 'success' => false, 'message' => $response->getMsg() ]; } catch (\Exception $e) { Log::error('DgPay query order error: ' . $e->getMessage()); return [ 'success' => false, 'message' => $e->getMessage() ]; } } /** * 退款 * * @param string $orderNo 商户订单号 * @param string $refundNo 退款单号 * @param float $amount 退款金额 * @return array */ public function refund(string $orderNo, string $refundNo, float $amount): array { try { $request = new V2TradePaymentRefundRequest(); $request->setOutOrderNo($orderNo); $request->setOutRefundNo($refundNo); $request->setRefundAmt($amount); $response = BsPay::request($request); if ($response->isSuccess()) { return [ 'success' => true, 'data' => $response->getData() ]; } return [ 'success' => false, 'message' => $response->getMsg() ]; } catch (\Exception $e) { Log::error('DgPay refund error: ' . $e->getMessage()); return [ 'success' => false, 'message' => $e->getMessage() ]; } } /** * 验证签名 * * @param array $data * @return bool */ public function verifySign(array $data): bool { try { return BsPay::verifySign($data); } catch (\Exception $e) { Log::error('DgPay verify sign error: ' . $e->getMessage()); return false; } } }