161 lines
4.1 KiB
PHP
161 lines
4.1 KiB
PHP
<?php
|
||
/**
|
||
* M2Pool ETH API 客户端
|
||
*/
|
||
|
||
if (!defined('ABSPATH')) {
|
||
exit;
|
||
}
|
||
|
||
class M2Pool_ETH_API {
|
||
|
||
/**
|
||
* API 基础 URL
|
||
*/
|
||
private $api_url;
|
||
|
||
/**
|
||
* API 密钥
|
||
*/
|
||
private $api_key;
|
||
|
||
/**
|
||
* 构造函数
|
||
*/
|
||
public function __construct() {
|
||
$this->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;
|
||
}
|
||
}
|
||
|