PHP单文件接入

PHP USDT充提单文件介入教程,可复制此文件代码或者参考接入

<?php
namespace app\home\controller;
use think\Controller;
use app\home\model\Member;
use think\Db;
/**
 * 通知处理控制器
 */
class Usdtpay extends Controller{      
    public $appid='***';
    public $appsecret='***';
        //主域名接口
    public $apiurl='http://www.ethtronusdt.com/api/v1';

    /*
    *    获取币种行情价格
    *
    */
    public function get_symbol_price($symtol)
    {
        $data=array(
        'appid'=>trim($this->appid),
        'symbol'=>$symtol,
        'signtime'=>time()
        );
        $sign=$this->getSign($data,$this->appsecret);
        $data['sign']=$sign;
        $res=$this->request_post($this->apiurl.'/get_symbol_price',$data);
        //code等于1  正确获取价格
        if($res['code']==1){
            return $res['data']['cny'];
        }else{
            //返回错误信息
            return $res['msg'];
        }
    }
    /*
     *
     *    创建ETH新地址
     *
    */
    public function get_address()
    {
        $data=array(
        'appid'=>trim($this->appid),
        'symbol'=>'ETH',
        'signtime'=>time()
        );
        $sign=$this->getSign($data,$this->appsecret);
        $data['sign']=$sign;
        $res=$this->request_post($this->apiurl.'/get_address',$data);
        //var_dump($res);
        return json_encode($res);
    }
/*
     *
     *    获取地址的余额
     *
    */
    public function get_balance($address)
    {
        $data=array(
        'appid'=>trim($this->appid),
        'symbol'=>'USDT_ERC20',
        'address'=>$address,
        'signtime'=>time()
        );
        $sign=$this->getSign($data,$this->appsecret);
        $data['sign']=$sign;
        $res=$this->request_post($this->apiurl.'/get_balance',$data);     
        return json_encode($res);
    }
     /*
     *
     *    会员提现
     *
    */
    public function transfer($symbol,$address,$value)
    {
        $data=array(
            'appid'=>trim($this->appid),
            'signtime'=>time(),
            'symbol'=>$symbol,
            'address'=>trim($address),
            'value'=>trim($value),
        );
        $sign=$this->getSign($data,$this->appsecret);
        $data['sign']=$sign;
        $res=$this->request_post($this->apiurl.'/transfer',$data);
        return json_encode($res);
    }
    /*
     *
     *    充值回调处理
     *
    */
    public function notify()
    {
                //记录请求时间  可使用txt文本记录请求日志
                //记录请求参数
                //通知
        $data=$_POST;
        if(!isset($data['sign'])){
                    echo 'no sign';exit;
                }
        //获取传输的签名值
        $sign=$data['sign'];
        //dump($sign);
        //根据数据算出签名值
        $mysign=$this->getSign($data['data'],$this->appsecret);
        //dump($appsecret);
        //dump($mysign);
        if($sign==$mysign){
            
            //这里可以编写业务,给与会员充值和添加会员的充值记录
            $czdata=$data['data'];
            //var_dump($czdata);
            $status=$czdata['send_status'];//用户充值状态
            if($status==1){
                
                $token_name=$czdata['send_symbol'];//用户充值币种
                $token_value=$czdata['send_value'];//用户充值金额
                $useradress=$czdata['to_adress'];//用户充值地址
                                $hax=$czdata['hax'];//交易哈希值(唯一)
//注意  这里的哈希值首先要与数据库中对比,防止给与会员重复充值
    


                //币种换算成人民币
                //给对应的会员地址充值对应的金额
                $issuccess=Db::table('tb_member')->where('eth_address',$useradress)->setInc('money',$token_value);
                if($issuccess){
                    //会员充值记录存入数据库
    
                    //回调成功,返回success
                    exit('success');
                }else{
                    return $issuccess;
                }
            }
            
        }
    }

/*
     *
     *    手动归集接口
     *
    */
    public function transfer_collect($address)
    {
        $data=array(
        'appid'=>trim($this->appid),
        'symbol'=>'USDT_ERC20',
        'address'=>$address,
        'signtime'=>time()
        );
        $sign=$this->getSign($data,$this->appsecret);
        $data['sign']=$sign;
        $res=$this->request_post($this->apiurl.'/transfer_collect',$data);     
        return json_encode($res);
    }
    /**
     * 业务处理
     * @return Boolean true表示业务处理成功 false表示处理失败
     */
    public function handle($data)
    {
        
        
    }
    /**
     * 生成签名
     * @param $data 待签名数据
     * @param $appsecret 应用Appsecret
     * @return string
     */
    function getSign($data,$appsecret) {
        $signPars = "";
        ksort($data);
        foreach($data as $k => $v) {
            if("sign" != $k && "" != $v && $v!="0") {
                $signPars .= $k . "=" . $v . "&";
            }
        }
        $signPars .= "key=" . $appsecret;
        return strtoupper(md5($signPars));
    }
    /**
     * 使用curl发送
     * @param string $url
     * @param string $param
     * @return bool|mixed
     */
    function request_post($url = '', $param = '') {
        if (empty($url) || empty($param)) {
            return false;
        }
    
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSLVERSION, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
        $data = curl_exec($ch);
        curl_close($ch);
        //dump($data);
        return json_decode($data,true);
    }}