You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

213 lines
5.8 KiB

<?php
namespace App\Services;
class UdunWalletService
{
private $merchantId;
private $gateway_address;
private $api_key;
public function __construct()
{
$this->merchantId = config('coin.merchant_number');
$this->gateway_address = config('coin.gateway_address');
$this->api_key = config('coin.api_key');
$this->walletId = config('coin.walletId');
}
// 获取商户支持的币种信息
public function supportCoins($showBalance = true)
{
$body = array(
'merchantId' => $this->merchantId,
'showBalance' => $showBalance
);
$body = json_encode($body);
$timestamp = time();
$nonce = rand(100000, 999999);
$url = $this->gateway_address . '/mch/support-coins';
$key = $this->api_key;
$sign = md5($body . $key . $nonce . $timestamp);
$data = array(
'timestamp' => $timestamp,
'nonce' => $nonce,
'sign' => $sign,
'body' => $body
);
$data_string = json_encode($data);
return json_decode($this->http_post($url, $data_string), true);
}
// 生成地址
public function createAddress($coinType)
{
// 回调
//$callUrl = config('app.url') . '/api/udun/notify';
// $callUrl = env('NOTIFY_URL') . '/api/udun/notify';
$callUrl = 'https://aj.ajcoins.com/api/udun/notify';
$body = array(
'merchantId' => $this->merchantId,
'coinType' => $coinType,
'callUrl' => $callUrl,
'walletId' =>$this->walletId,
);
$body = '[' . json_encode($body) . ']';
$timestamp = time();
$nonce = rand(100000, 999999);
$url = $this->gateway_address . '/mch/address/create';
$key = $this->api_key;
$sign = md5($body . $key . $nonce . $timestamp);
$data = array(
'timestamp' => $timestamp,
'nonce' => $nonce,
'sign' => $sign,
'body' => $body
);
$data_string = json_encode($data);
// var_dump($url);
return json_decode($this->http_post($url, $data_string), true);
}
// 校验地址合法性
public function checkAddress($mainCoinType, $address)
{
$body = array(
'merchantId' => $this->merchantId,
'mainCoinType' => $mainCoinType,
'address' => $address,
);
$body = '[' . json_encode($body) . ']';
$timestamp = time();
$nonce = rand(100000, 999999);
$url = $this->gateway_address . '/mch/check/address';
$key = $this->api_key;
$sign = md5($body . $key . $nonce . $timestamp);
$data = array(
'timestamp' => $timestamp,
'nonce' => $nonce,
'sign' => $sign,
'body' => $body
);
$data_string = json_encode($data);
return json_decode($this->http_post($url, $data_string), true);
}
// 发送提币申请
public function withdraw($mainCoinType, $coinType, $amount, $address, $callUrl, $businessId, $memo)
{
$body = array(
'merchantId' => $this->merchantId,
'mainCoinType' => $mainCoinType,
'address' => $address,
'amount' => $amount,
'coinType' => $coinType,
'callUrl' => $callUrl,
'businessId' => $businessId,
'memo' => $memo
);
$body = '[' . json_encode($body) . ']';
$timestamp = time();
$nonce = rand(100000, 999999);
$url = $this->gateway_address . '/mch/withdraw';
$key = $this->api_key;
$sign = md5($body . $key . $nonce . $timestamp);
$data = array(
'timestamp' => $timestamp,
'nonce' => $nonce,
'sign' => $sign,
'body' => $body
);
$data_string = json_encode($data);
return json_decode($this->http_post($url, $data_string), true);
}
// 代付
public function proxypay($mainCoinType, $coinType, $amount, $address, $callUrl, $businessId, $memo)
{
$body = array(
'merchantId' => $this->merchantId,
'mainCoinType' => $mainCoinType,
'address' => $address,
'amount' => $amount,
'coinType' => $coinType,
'callUrl' => $callUrl,
'businessId' => $businessId,
'memo' => $memo
);
$body = '[' . json_encode($body) . ']';
$timestamp = time();
$nonce = rand(100000, 999999);
$url = $this->gateway_address . '/mch/withdraw/proxypay';
$key = $this->api_key;
$sign = md5($body . $key . $nonce . $timestamp);
$data = array(
'timestamp' => $timestamp,
'nonce' => $nonce,
'sign' => $sign,
'body' => $body
);
$data_string = json_encode($data);
return json_decode($this->http_post($url, $data_string), true);
}
private function http_post($url, $data_string)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
array(
'X-AjaxPro-Method:ShowList',
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($data_string)
)
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
$data = curl_exec($ch);
curl_close($ch);
//var_dump(curl_error($ch));die;
return $data;
}
}