integration wordpress
This commit is contained in:
160
integration/wordpress/includes/class-m2pool-eth-api.php
Normal file
160
integration/wordpress/includes/class-m2pool-eth-api.php
Normal file
@@ -0,0 +1,160 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user