$value) { $signStr .= $key . '=' . $value . '&'; } $signStr .= 'key=' . self::$secret; return strtoupper(md5($signStr)); } private static function getBaseParams() { self::boot(); return [ 'mch_id' => self::$mchId, 'timestamp' => time(), ]; } public static function payOrderTest($orderNo, $userId, $amount, $userAgent, $allId, $payType) { return http_post('192.168.1.21:8080/api/delay', [ 'callbacks' => 'CODE_SUCCESS', 'order_sn' => uuid(), 'out_trade_no' => "{$orderNo}-{$userId}", 'pay_time' => time(), 'sign' => '', 'total' => $amount ]); } public static function payOrder($orderNo, $userId, $amount, $userAgent, $allId, $payType) { $payConfig = (new CommonInfo())->getByCode(926)['value'] ?? '0'; if ($payConfig !== '1') { throw new SysException('暂无支付渠道'); } $params = self::getBaseParams(); $params['type'] = '6001'; $params['is_code'] = '1'; $params['out_trade_no'] = "{$orderNo}-{$userId}"; $params['total'] = $amount; $params['notify_url'] = self::$notifyUrl; $params['sign'] = self::getParamsSign($params); if ($payType === 'h5') { $params['return_url'] = self::$h5BaseUrl . $allId; } return self::requestPost(self::$payUrl, $params, $userAgent); } /** * 发起 POST 请求 * @param string $url 请求地址 * @param array $params 请求参数 * @param string $userAgent User-Agent * @return array|null */ private static function requestPost(string $url, array $params, string $userAgent): ?array { Log::info("[支付]请求地址:{$url},请求参数:".json_encode($params).",User-Agent:{$userAgent}"); $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_HTTPHEADER => [ 'User-Agent: ' . $userAgent, 'Content-Type: application/x-www-form-urlencoded', // 'Content-Type: application/json', ] ]); $response = curl_exec($curl); curl_close($curl); Log::info("[支付]返回结果:{$response}"); return json_decode($response, true); } public static function queryExtractOrder($outOrderNo, $userId, $isUser, $amount) { $params = self::getBaseParams(); $params['out_trade_no'] = sprintf('%s-%s:%s', $outOrderNo, $userId, $isUser ? 'us' : 'dl'); $params['total'] = $amount; $params['sign'] = self::getParamsSign($params); return self::requestPost(self::$extractUrl, $params, 'WuYouPay'); } public static function extractOrder($isAliPay, $outOrderNo, $userId, $amount, $isUser, $account, $userName, $bankName, $province, $city, $bankBranch) { $params = self::getBaseParams(); $params['out_trade_no'] = sprintf('%s-%s:%s', $outOrderNo, $userId, $isUser ? 'us' : 'dl'); $params['total'] = $amount; $params['bank_card'] = $account; $params['bank_account_name'] = $userName; if ($isAliPay) { $params['bank_name'] = '1'; $params['bank_branch'] = '1'; $params['province'] = '1'; $params['city'] = '1'; } else { $params['bank_name'] = $bankName; $params['bank_branch'] = !empty($bankBranch) ? $bankBranch : '1'; $params['province'] = !empty($province) ? $province : '1'; $params['city'] = !empty($city) ? $city : '1'; } $params['notify_url'] = self::$extractNotifyUrl; $params['sign'] = self::getParamsSign($params); $params['business_type'] = 0; if ($isAliPay) { $params['business_attr'] = 'alipay'; } else { $params['business_attr'] = 'unionpay'; } // 发送请求(POST) return self::requestPost(self::$extractUrl, $params, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'); } public static function queryOrder($trade_no, $user_id, string $amount, string $string) { $params = self::getBaseParams(); $params['out_trade_no'] = "{$trade_no}-{$user_id}"; $params['total'] = $amount; $params['sign'] = self::getParamsSign($params); return self::requestPost(self::$queryUrl, $params, 'WuYouPay'); } }