api_url = get_option('m2pool_eth_api_url', 'http://localhost:8080'); $this->api_key = get_option('m2pool_eth_api_key', ''); } /** * 生成签名 */ private function generate_sign($timestamp) { if (empty($this->api_key)) { return ''; } return hash('sha256', dechex($timestamp) . $this->api_key); } /** * 发送 HTTP 请求 */ private function request($endpoint, $method = 'GET', $data = array()) { $url = rtrim($this->api_url, '/') . '/' . ltrim($endpoint, '/'); $args = array( 'method' => $method, 'timeout' => 30, 'headers' => array( 'Content-Type' => 'application/json', ), ); if (!empty($data)) { $args['body'] = json_encode($data); } $response = wp_remote_request($url, $args); if (is_wp_error($response)) { return $response; } $body = wp_remote_retrieve_body($response); $code = wp_remote_retrieve_response_code($response); if ($code >= 200 && $code < 300) { $data = json_decode($body, true); return $data; } else { return new WP_Error('api_error', sprintf(__('API 错误: %s', 'm2pool-eth-payment'), $body), array('status' => $code)); } } /** * 创建支付请求 * * 注意:这个方法假设有一个 HTTP API 接口。 * 如果后端系统只支持 RabbitMQ,需要创建一个中间 API 服务。 */ public function create_payment($queue_id, $from_address, $to_address, $amount, $chain = 'ETH', $symbol = 'ETH') { $timestamp = time(); $sign = $this->generate_sign($timestamp); $data = array( 'queue_id' => $queue_id, 'chain' => $chain, 'symbol' => $symbol, 'from_address' => $from_address, 'to_address' => $to_address, 'amount' => $amount, 'fee' => 0, 'timestamp' => $timestamp, 'sign' => $sign, ); // 发送到支付 API // 注意:这里需要根据实际的后端 API 接口调整 // 如果后端只支持 RabbitMQ,需要创建一个中间 API 服务来处理 $result = $this->request('/api/payment/create', 'POST', $data); if (is_wp_error($result)) { return $result; } return $result; } /** * 查询支付状态 */ public function get_payment_status($queue_id) { $result = $this->request('/api/payment/status/' . $queue_id, 'GET'); if (is_wp_error($result)) { return $result; } return $result; } /** * 创建充值监听请求 */ public function create_topup($queue_id, $address, $chain = 'ETH', $symbol = 'ETH') { $timestamp = time(); $sign = $this->generate_sign($timestamp); $data = array( 'queue_id' => $queue_id, 'chain' => $chain, 'symbol' => $symbol, 'address' => $address, 'timestamp' => $timestamp, 'sign' => $sign, ); $result = $this->request('/api/topup/create', 'POST', $data); if (is_wp_error($result)) { return $result; } return $result; } /** * 查询充值状态 */ public function get_topup_status($queue_id) { $result = $this->request('/api/topup/status/' . $queue_id, 'GET'); if (is_wp_error($result)) { return $result; } return $result; } }