支持TRC20与Polygon链收款
兼容wyx/v2board、Xboard(未测试)
后端为beusdt开源地址为:点击直达
后端搭建教程查看上述开源地址
相较于 epusdt省去redis与mysql的支持P链收款
演示效果:
发起支付:
收款:
回调:
支付插件:
在网站根目录下创建/app/Payments/EpusdtPay.php
写入如下代码即可
<?php
namespace App\Payments;
use \Curl\Curl;
class EpusdtPay {
public function __construct($config)
{
$this->config = $config;
}
public function form()
{
return [
'epusdt_pay_url' => [
'label' => 'API 地址',
'description' => '您的 EpusdtPay API 接口地址 (例如: https://epusdt-pay.xxx.com)',
'type' => 'input',
],
'epusdt_pay_apitoken' => [
'label' => 'API Token',
'description' => '您的 EpusdtPay API Token',
'type' => 'input',
],
'trade_type' => [
'label' => '支付方式',
'description' => '请输入支付方式 (usdt.trc20, tron.trx, usdt.polygon)',
'type' => 'input',
],
];
}
public function pay($order)
{
$params = [
"address" => "", // 可留空,或根据实际情况传入收款地址
"trade_type" => $this->config['trade_type'] ?? 'usdt.trc20', // 默认 usdt.trc20
"order_id" => $order['trade_no'],
"amount" => round($order['total_amount'] / 100, 2),
"notify_url" => $order['notify_url'],
"redirect_url" => $order['return_url'],
];
$params['signature'] = $this->sign($params);
$curl = new Curl();
$curl->setUserAgent('EpusdtPay');
$curl->setOpt(CURLOPT_SSL_VERIFYPEER, 0);
$curl->setOpt(CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$curl->post($this->config['epusdt_pay_url'] . '/api/v1/order/create-transaction', json_encode($params));
$result = $curl->response;
$curl->close();
if (!isset($result->status_code) || $result->status_code != 200) {
abort(500, "Failed to create order. Error: " . ($result->message ?? 'Unknown error'));
}
return [
'type' => 1, // 0: qrcode, 1: url
'data' => $result->data->payment_url ?? '',
];
}
public function notify($params)
{
if ($params['status'] != 2) {
die('failed');
}
if (!$this->verify($params)) {
die('cannot pass verification');
}
return [
'trade_no' => $params['order_id'],
'callback_no' => $params['trade_id'],
'custom_result' => 'ok',
];
}
public function verify($params) {
return $params['signature'] === $this->sign($params);
}
protected function sign(array $params)
{
ksort($params);
reset($params);
$sign = '';
foreach ($params as $key => $val) {
if ($val == '' || $key == 'signature') continue;
$sign .= "$key=$val&";
}
$sign = rtrim($sign, '&');
return md5($sign . $this->config['epusdt_pay_apitoken']);
}
}
评论