123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794 |
- <?php
- /**
- *
- * @author: xaboy<365615158@qq.com>
- * @day: 2017/11/23
- */
- namespace crmeb\services;
- /**
- * Class ZtPayService
- * @package crmeb\services
- *
- * 转出通知
- *
- *
- *
- *
- * 交易转出通知示例
- *
- *
- *
- * 收到通知后需要输出 success 或 SUCCESS 表示正确收到这笔交易信息,否则系统会连续通知三次,三次后不再主动通知。
- *
- * 注意:数据采用 POST 方式发送。
- *
- * 如需验证通知数据安全性,可以将 通知数据中的 data 值 按安全签名 方式进行签名,然后和通知数据中的 sign值对比。
- * 1.{
- * 2. "appid": "应用Appid",
- * 3. "name": "币种名称",
- * 4. "name_alias": "代币名称,可用此参数区分是否为代币,如ERC20",
- * 5. "time": "当前时间",
- * 6. "sign": "data内容签名,可验证此参数确认数据是否安全",
- * 7. "data": {
- * 8. "appid": "应用Appid",
- * 9. "hash": "交易记录唯一值",
- * 10. "from": "发送方",
- * 11. "to": "接收方",
- * 12. "amount": "交易数量",
- * 13. "fee_amount": "交易手续费",
- * 14. "memo": "交易备注/标签",//此字段为 EOS 和 XRP 使用
- * 15. "add_time": "交易记录时间",
- * 16. "type": 2,//1=转入记录 2=转出记录 3=测试记录
- * 17. "state": "交易状态" //1=交易成功 2=交易失败
- * 18. }
- * 19.}
- *
- * 转入通知
- *
- *
- *
- *
- * 交易转入通知示例
- *
- *
- *
- * 收到通知后需要输出 success 或 SUCCESS 表示正确收到这笔交易信息,否则系统会连续通知三次,三次后不再主动通知。
- *
- * 注意:数据采用 POST 方式发送。
- *
- * 如需验证通知数据安全性,可以将 通知数据中的 data 值 按安全签名 方式进行签名,然后和通知数据中的 sign值对比。
- * 1.{
- * 2. "appid": "应用Appid",
- * 3. "name": "币种名称",
- * 4. "name_alias": "代币名称,可用此参数区分是否为代币,如ERC20",
- * 5. "time": "当前时间",
- * 6. "sign": "data内容签名,可验证此参数确认数据是否安全",
- * 7. "data": {
- * 8. "appid": "应用Appid",
- * 9. "hash": "交易记录唯一值",
- * 10. "from": "发送方",
- * 11. "to": "接收方",
- * 12. "amount": "交易数量",
- * 13. "fee_amount": "交易手续费",
- * 14. "memo": "交易备注/标签",//此字段为 EOS 和 XRP 使用
- * 15. "add_time": "交易记录时间",
- * 16. "type": 1,//1=转入记录 2=转出记录 3=测试记录
- * 17. "state": "交易状态" //1=交易成功 2=交易失败
- * 18. }
- * 19.}
- *
- * 交易审核通知
- *
- *
- *
- *
- * 交易审核通知示例
- *
- *
- *
- * 收到通知后需要输出 success 或 SUCCESS 表示正确收到这笔交易信息,否则系统会返回通知失败。
- *
- * 注意:数据采用 POST 方式发送。
- * 1.{
- * 2. "audit_trading": 1,//存在此字段表示为交易审核通知
- * 3. "audit_time":"2019-01-01 00:00:00",//交易的审核时间
- * 4. "appid": "应用Appid",
- * 5. "number": "审核记录编号,提交交易时会返回这个参数值",
- * 6. "hash": "审核通过后的交易hash值,可通过此值查询交易信息",
- * 7. "state": '1',//1=审核通过,2=取消审核(交易不上链)
- * 8.}
- */
- class ZtPayService
- {
- const API_URL = 'https://sapi.ztpay.org/api/v2';//接口地址
- private static $app_id = '';
- private static $app_secret = '';
- /**
- * 实例化
- * @return ZtPayService
- */
- public static function instance()
- {
- $instance = new self();
- $instance::$app_id = sys_config('zt_appid', '');
- $instance::$app_secret = sys_config('zt_appsecret', '');
- return $instance;
- }
- /**
- * 获取签名
- * @param $data
- * @return string
- */
- private static function getSign($data)
- {
- $signPars = "";
- ksort($data);
- foreach ($data as $k => $v) {
- if ("sign" != $k && "" != $v && $v != "0") {
- $signPars .= $k . "=" . $v . "&";
- }
- }
- $signPars .= "key=" . self::$app_secret;
- return strtoupper(md5($signPars));
- }
- /**
- * 通用请求
- * @param $data
- * @return bool|false|string
- */
- private static function request($data)
- {
- $data['sign'] = self::getSign($data);
- return json_decode(do_request(self::API_URL, $data), true);
- }
- /**
- * 创建地址
- * @param string $coin_type 创建地址的币种名称
- * 如:BTC,ETH
- * 代币填写方式: 币名称_代币标识 ,如 USDT_ERC20
- * @return bool|false|string
- * 返回示例
- * 1.{
- * 2. "code": 0,
- * 3. "message": "地址信息获取成功",
- * 4. "data": {
- * 5. "address": "0x634853***158d2abbba4c1", //创建的地址
- * 6. "name": "ETH", //请求的币种名称
- * 7. "time": "2019-01-0100:00:00"
- * 8. }
- * 9.}
- */
- public static function get_address($coin_type)
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'get_address',
- 'name' => $coin_type,
- ];
- //var_dump($data);
- return self::request($data);
- }
- /**
- * 导入地址
- * @param $coin_type
- * @param $privatekey
- * @return bool|false|string
- * 目前该接口支持: ETH 、 USDT_ERC20 、 XRP 、 EOS 币种的地址导入。
- */
- public static function import_address($coin_type, $privatekey)
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'import_address',
- 'name' => $coin_type,
- "privatekey" => $privatekey,
- ];
- return self::request($data);
- }
- /**
- * 获取私钥
- * @param $coin_type
- * @param string $address 获取私钥的地址
- * @param string $security_pwd 账号安全密码
- * @return bool|false|string
- * 返回示例
- * 1.{
- * 2. "code": 0,
- * 3. "message": "私钥信息获取成功",
- * 4. "data": {
- * 5. "address": "0x634853***158d2abbba4c1",//获取私钥的地址
- * 6. "privatekey": "f07b92caf7****e1e83a32f4e65",//获取到的私钥
- * 7. "name": "ETH",//获取私钥的币种名称
- * 8. "time": "2019-01-0100:00:00"
- * 9. }
- * 10.}
- */
- public static function get_privatekey($coin_type, $address, $security_pwd)
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'get_privatekey',
- 'name' => $coin_type,
- 'address' => $address,
- 'security_pwd' => $security_pwd,
- ];
- return self::request($data);
- }
- /**
- * 校验地址
- * 此接口有两个功能:
- * 1、校验地址格式是否正确。
- * 2、检查地址是否属于当前账号,如果是检查地址是否属于当前账号请按指定格式传入地址: address=ztpay:要校验的地址 。可以考虑在将地址展示给用户的时候校验地址是否安全。
- * @param $coin_type
- * @param $address
- * @return bool|false|string
- * 返回示例:
- * 1.{
- * 2. "code": 0,
- * 3. "message": "地址校验成功",
- * 4. "data": [],
- * 5. "time": "2019-01-0100:00:00"
- * 6.}
- */
- public static function check_address($coin_type, $address)
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'check_address',
- 'name' => $coin_type,
- 'address' => $address,
- ];
- return self::request($data);
- }
- /**
- * 余额查询
- * @param $coin_type
- * @param $address
- * @return bool|false|string
- * 返回示例:
- * 1.{
- * 2. "code": 0,
- * 3. "message": "余额信息获取成功",
- * 4. "data": {
- * 5. "ETH": "0.00000000",
- * 6. "USDT": "0.000000"
- * 7. },
- * 8. "time": "2019-01-0100:00:00"
- * 9.}
- */
- public static function get_balance($coin_type, $address)
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'get_balance',
- 'name' => $coin_type,
- 'address' => $address,
- ];
- return self::request($data);
- }
- /**
- * @param string $coin_type 转账的币种名称
- * @param string $from 转出地址(此地址必须在 ztPay 存在)
- * 转出地址 from 必须在 ztPay 平台存在,该地址可以是导入的地址和创建的地址!
- * @param string $to 收款地址
- * 收款地址 to 请检查该地址是否是想要收款的地址,以免造成资金丢失!!
- * @param string $amount 提币数量
- * FIL 请求示例
- * 1.{
- * 2. "appid": "Appid", //应用Appid
- * 3. "method": "transfer",
- * 4. "sign": "签名串",
- * 5. "name": "FIL",
- * 6. "from": "转出地址",
- * 7. "to": "收款地址",
- * 8. "amount": "转账数量",
- * 9.}
- * @param string $change_address 找零地址 找零地址 change_address 值默认为 转出地址 from 。
- * @param float $fee_amount 自定义矿工费 交易可以自定义矿工费 fee_amount 。
- * 矿工费过低会导致交易失败或确认过慢!
- * BTC / BCH / LTC 请求示例
- * 1.{
- * 2. "appid": "Appid", //应用Appid
- * 3. "method": "transfer",
- * 4. "sign": "签名串",
- * 5. "name": "币种名称", //BTC / BCH / LTC
- * 6. "from": "转出地址",
- * 7. "to": "收款地址",
- * 8. "amount": "转账数量",
- * 9. "change_address": "找零地址", //值选填
- * 10. "fee_amount": "自定义矿工费" //值选填
- * 11.}
- * @param int $nonce 交易序号
- * ERC20 的矿工费只能扣除 转出地址 上的 ETH币,如果没有则要转 ETH币 到 ERC20地址上,才能进行提币或转出。
- * ETH / ERC20 请求示例
- * 1.{
- * 2. "appid": "Appid", //应用Appid
- * 3. "method": "transfer",
- * 4. "sign": "签名串",
- * 5. "name": "ETH", //ETH 或 ERC20代币 如:USDT_ERC20
- * 6. "from": "转出地址",
- * 7. "to": "收款地址",
- * 8. "amount": "转账数量",
- * 9. "gas": "Gas限制",
- * 10. "gasPrice": "Gas价格",
- * 11. "nonce": "交易序号", //选填
- * 12.}
- * @param string $fee_address
- * 在币种 USDT-OMNI 下创建一个地址,作为USDT-OMNI交易时的矿工费扣除地址。如果不指定旷工费地址则 转出地址 上必须要有足够的 BTC币。
- * USDT-OMNI交易可以自定义矿工费数量 fee_amount ,建议将矿工费设置在 0.0001 以上。
- * 每一笔USDT交易都会有 0.00000546 BTC 一并发送到收款地址上,这 0.00000546 BTC 是必须存在的,如果地址上没有这 0.00000546 BTC 则无法进行交易转出,注意这和矿工费不一样。
- * USDT-OMNI 请求示例
- * 1.{
- * 2. "appid": "Appid", //应用Appid
- * 3. "method": "transfer",
- * 4. "sign": "签名串",
- * 5. "name": "USDT_OMNI",
- * 6. "from": "转出地址",
- * 7. "to": "收款地址",
- * 8. "amount": "转账数量",
- * 9. "fee_address": "矿工费扣除地址", //值选填,默认为转出地址
- * 10. "fee_amount": "自定义矿工费" //值选填
- * 11.}
- * @param string $memo 交易备注
- * 大多数交易平台在转入EOS时都需要填写 memo ,在转账时请仔细确认.
- * EOS 请求示例
- * 1.{
- * 2. "appid": "Appid", //应用Appid
- * 3. "method": "transfer",
- * 4. "sign": "签名串",
- * 5. "name": "EOS",
- * 6. "from": "转出地址",
- * 7. "to": "收款地址",
- * 8. "amount": "转账数量",
- * 9. "memo": "交易备注", //值选填
- * 10.}
- *
- * XRP 矿工费过低会导致交易失败或确认过慢,建议将矿工费设置为 0.005-0.01 XRP
- * XRP 交易标签 memo 只能为数字 0 - 4294967295
- * XRP 请求示例
- * 1.{
- * 2. "appid": "Appid", //应用Appid
- * 3. "method": "transfer",
- * 4. "sign": "签名串",
- * 5. "name": "XRP",
- * 6. "from": "转出地址",
- * 7. "to": "收款地址",
- * 8. "amount": "转账数量",
- * 9. "fee_amount": "自定义旷工费", //值选填
- * 10. "memo": "交易备注", //值选填
- * 11.}
- * TRX / TRC20 转账金额必须 >= 0.0001。
- * TRC20 提币请保证转出地址上有 3TRX 才能进行 TRC20 转出!
- * TRX 提币如果收款地址未激活,那么转出地址必须保留 1TRX 作为矿工费!
- * @return bool|false|string
- * 正常提币返回示例
- * 1.{
- * 2. "code": 0,
- * 3. "message": "交易发送成功,请等待广播确认",
- * 4. "data": {
- * 5. "audit": 0,
- * 6. "hash": "****", //交易hash值,可在区块浏览器查询
- * 7. "from": "****", //转出地址
- * 8. "to": "****", //接收地址
- * 9. "amount": "0.00001", //交易数量
- * 10. "fee_amount": "0.000003" //交易矿工费
- * 11. },
- * 12. "time": "2019-01-0100:00:00"
- * 13.}
- * 交易进入审核流程返回示例
- * 1.{
- * 2. "code": 0,
- * 3. "message": "交易已发送至审核列表",
- * 4. "data": {
- * 5. "audit": 1,
- * 6. "number": "****" //审核记录编号
- * 7. },
- * 8. "time": "2019-01-0100:00:00"
- * 9.}
- * 触发交易防护的交易流程
- *
- * 提交交易
- *
- * 当交易触发防护后返回数据包含 audit 和 number 两个数据:
- * audit=1 表示交易进入交易审核列表。
- * number 则是交易进入审核后的唯一单号。
- * 提交易交易后请将 audit 和 number 保存。
- *
- * 开始审核交易
- *
- * 控制器管理审核记录:https://console.ztpay.org/merchants/trading/audit
- *
- * 审核记录分为三种:
- * 待审核:表示这些交易需要审核。
- * 已审核:表示这些交易已发出上链并返回了交易的hash值。
- * 已取消:表示取消这笔交易发出或者交易在发出时因其他原因发出失败。
- *
- * 选择待审核交易:
- * 确认交易:表示该审核数据无误可发出,在确认后系统会将该笔交易推送上链(可能会因为矿工费等原因导致交易推送失败,失败后可再次发送)。
- * 取消交易:表示取消这笔交易的审核,不会上链。
- *
- * 交易审核后回调
- *
- * 交易在审核后会发出审核回调数据
- * 1.{
- * 2. "audit_trading": 1,//存在此字段表示为交易审核通知
- * 3. "audit_time":"2019-01-01 00:00:00",//交易的审核时间
- * 4. "appid": "应用Appid",
- * 5. "number": "审核记录编号,提交交易时会返回这个参数值",
- * 6. "hash": "审核通过后的交易hash值,可通过此值查询交易信息",
- * 7. "state": '1',//1=审核通过,2=取消审核(交易不上链)
- * 8.}
- *
- *
- * 其中 number 字段等于在提交交易时返回的 number 。
- *
- * 如果交易上链了审核通知会包含 hash 字段,该字段值为该笔交易的区块链hash。
- *
- * 交易上链后成功或失败的回调
- *
- * 交易上链后无论是成功还是失败,系统都会向回调地址发送交易数据。
- * https://www.ztpay.org/docs/5912069.html
- *
- * 该数据中包含了 hash 字段,此字段值与交易审核后的回调数据中 hash 值一样。
- */
- public static function transfer($coin_type, $from, $to, $amount,
- $change_address = '', $fee_amount = 0.00,//BTC/USDT-OMNI/XRP 用
- $nonce = 0,//ETH / ERC20 用
- $fee_address = '',//USDT-OMNI 用
- $memo = ''//EOS/XRP 用
- )
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'get_balance',
- 'name' => $coin_type,
- 'from' => $from,
- 'to' => $to,
- 'amount' => $amount,
- ];
- if ($coin_type = "BTC" || $coin_type = "BCH" || $coin_type = "LTC") {
- if ($change_address) $data['change_address'] = $change_address;
- if ($fee_amount > 0) $data['fee_amount'] = $fee_amount;
- }
- if ($coin_type = "ETH" || explode('_', $coin_type)[1] == "ERC20" || explode('_', $coin_type)[1] == "TRC20") {
- if ($coin_type = 'ETH') {
- $gas = 30000;
- } else {
- $gas = 70000;
- }
- $gasPrice = self::get_eth_gasprice();
- if ($gasPrice['code'] != 0) {
- return $gasPrice;
- } else {
- $gasPrice = $gasPrice['data']['fastest'];
- }
- $data['gas'] = $gas;
- $data['gasPrice'] = $gasPrice;
- if ($nonce > 0) $data['nonce'] = $nonce;
- }
- if ($coin_type = "USDT_OMNI") {
- if ($fee_address) $data['fee_address'] = $fee_address;
- if ($fee_amount > 0) $data['fee_amount'] = $fee_amount;
- }
- if ($coin_type = "EOS") {
- if ($memo) $data['memo'] = $memo;
- }
- if ($coin_type = "XRP") {
- if ($memo) $data['memo'] = $memo;
- if ($fee_amount > 0) $data['fee_amount'] = $fee_amount;
- }
- return self::request($data);
- }
- /**
- * 以太坊网络Gas价格
- * @return bool|false|string
- * 返回示例
- * 1.{
- * 2. "code": 0,
- * 3. "message": "gasPrice获取成功",
- * 4. "data": {
- * 5. "safeLow": "30.0", //动态值
- * 6. "standard": "30.0", //动态值
- * 7. "fast": "35.0", //动态值
- * 8. "fastest": "40.0", //动态值
- * 9. "from": "https://www.etherchain.org/api/gasPriceOracle"
- * 10. },
- * 11. "time": "2020-05-1414:32:39"
- * 12.}
- */
- public static function get_eth_gasprice()
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'get_eth_gasprice',
- ];
- return self::request($data);
- }
- /**
- * ERC20委托交易
- * 假设:A账号有 10000 个ERC20代币,B账号没有ERC20代币,C账号也没有ERC20代币。
- * 那么:A账号 委托 B账号 转给 C账号 100个ERC20代币 就属于委托交易。
- * @param $coin_type
- * @param $approve_from
- * 委托地址必须是在 ztPay 里面存在的地址。
- * @param $approve_amount
- * @param int $nonce
- * @return bool|false|string
- */
- public static function erc20_approve($coin_type, $approve_from, $approve_amount, $nonce = 0)
- {
- $gasPrice = self::get_eth_gasprice();
- if ($gasPrice['code'] != 0) {
- return $gasPrice;
- } else {
- $gasPrice = $gasPrice['data']['fastest'];
- }
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'erc20_approve',
- 'name' => $coin_type,
- 'approve_from' => $approve_from,
- 'approve_amount' => $approve_amount,
- 'gasPrice' => $gasPrice,
- ];
- if ($nonce) $data['nonce'] = $nonce;
- return self::request($data);
- }
- /**
- * ERC20查询委托
- * @param $coin_type
- * @param $approve_from
- * @return bool|false|string
- * 1.{
- * 2. "code": 0,
- * 3. "message": "委托查询成功",
- * 4. "data": {
- * 5. "approve_from": "****", //委托地址
- * 6. "approve_to": "****", //被委托地址 此地址为 平台固定地址
- * 7. "approve_amount": "0.00001", //委托剩余数量
- * 8. "approve_name": "币名称" //委托的ERC20代币名称
- * 9. },
- * 10. "time": "2019-01-0100:00:00"
- * 11.}
- */
- public static function erc20_allowance($coin_type, $approve_from)
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'erc20_allowance',
- 'name' => $coin_type,
- 'approve_from' => $approve_from,
- ];
- return self::request($data);
- }
- /**
- * ETH批量转账(付费接口)
- * 仅适用于 ETH
- * 由于接口限制,批量转账每笔需要 0.01ETH 的合约费用(如果交易失败不会扣这个费用)。
- * @param $coin_type
- * @param $from
- * @param $batch_address
- * @param float $token_fee
- * 合约费用为每次交易固定 “0.01ETH”,所以转出地址 from 里面除了要有足够的ETH支付矿工费还有有多余的 “0.01ETH” 支付合约费用。
- * @param int $nonce
- * @return bool|false|mixed|string
- */
- public static function eth_batch_transfer($coin_type, $from, $batch_address, $token_fee = 0.01, $nonce = 0)
- {
- $gasPrice = self::get_eth_gasprice();
- if ($gasPrice['code'] != 0) {
- return $gasPrice;
- } else {
- $gasPrice = $gasPrice['data']['fastest'];
- }
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'eth_batch_transfer',
- 'name' => $coin_type,
- 'from' => $from,
- 'batch_address' => is_array($batch_address) ? json_encode($batch_address) : $batch_address,
- 'token_fee' => $token_fee,
- 'gasPrice' => $gasPrice,
- ];
- if ($nonce) $data['nonce'] = $nonce;
- return self::request($data);
- }
- /**
- * ERC20批量转账(付费接口)
- * 仅适用于 ERC20代币
- * ERC20代币批量转账条件 【重要】
- * 例如:A账号 需要进行批量转出交易,那么 A账号 需要调用 委托接口 进行委托授权(已委托过且还有委托金额则不必在委托),委托金额必须 ≥ 要批量和转出的金额总和。
- * 例如:A账号 对 B账号转出10个ERC20代币 对 C账号转出5个ERC20代币,那么 A账号的委托的金额必须还剩 ≥15个,否则转账失败。
- * 委托可以一次性委托较大的金额,然后后面转出时就可以不必在委托。
- * 也可以每次批量转出前都进行一次委托。
- * @param $coin_type
- * @param $from
- * @param $batch_address
- * @param float $token_fee
- * @param int $nonce
- * @return bool|false|mixed|string
- */
- public static function erc20_batch_transfer($coin_type, $from, $batch_address, $token_fee = 0.01, $nonce = 0)
- {
- $gasPrice = self::get_eth_gasprice();
- if ($gasPrice['code'] != 0) {
- return $gasPrice;
- } else {
- $gasPrice = $gasPrice['data']['fastest'];
- }
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'erc20_batch_transfer',
- 'name' => $coin_type,
- 'from' => $from,
- 'batch_address' => is_array($batch_address) ? json_encode($batch_address) : $batch_address,
- 'token_fee' => $token_fee,
- 'gasPrice' => $gasPrice,
- ];
- if ($nonce) $data['nonce'] = $nonce;
- return self::request($data);
- }
- /**
- * 获取交易日志
- * @param string $coin_type 指定币种
- * @param string $from 指定转出地址
- * @param string $to 指定收款地址
- * @param int $transaction_page 获取页码,默认为1
- * @param int $transaction_pagesize 每页获取数量,最大100条
- * @param int $transaction_type 日志类型:0-全部 1-转入 2-转出
- * 此参数用于筛选交易类型
- * 0-全部记录
- * 1-转入记录
- * 2-转出记录
- * 3-测试记录
- * @param string $transaction_time 按时间区间查询
- * 此参数用于筛选指定时间区间的交易
- * 时间格式:开始时间/结束时间
- * 请求示例:2019-01-01 00:00:00/2020-01-01 00:00:00
- * 参数注意:结束时间必须大于开始时间,两个时间之间使用 / 分割。
- * @return bool|false|string
- * 返回示例
- * 1.{
- * 2. "message": "接口获取成功",
- * 3. "data": {
- * 4. "code": 0,
- * 5. "message": "交易日志获取成功",
- * 6. "data": {
- * 7. "transaction_page": 1,
- * 8. "transaction_pagesize": 1,
- * 9. "transaction_count": 1, //总数量
- * 10. "transaction_list": [
- * 11. {
- * 12. "appid": "zttx****yzym", //应用Appid
- * 13. "member_id": "000000", //会员ID
- * 14. "hash": "0x31b875***232b100", //交易hash
- * 15. "from": "0xd18e0f****90174ba70ecd", //转出地址
- * 16. "to": "0x6348532****58d2abbba4c1", //收款地址
- * 17. "memo": "", //交易备注或标签,仅EOS,XRP存在数据
- * 18. "amount": "180.00000000", //交易数量
- * 19. "fee_amount": "0.00007992", //交易矿工费
- * 20. "add_time": "2019-10-2210:24:03", //记录时间
- * 21. "data": "",
- * 22. "type": 1, //1=转入,2=转出
- * 23. "state": 1, //1=成功,2=失败
- * 24. "name": "", //币种名称
- * 25. "name_alias": "", //代币表示,如 ERC20
- * 26. }
- * 27. ]
- * 28. }
- * 29. },
- * 30. "time": "2019-01-0100:00:00"
- * 31.}
- */
- public static function transaction_logs($coin_type = '', $from = '', $to = '', $transaction_page = 0, $transaction_pagesize = 0, $transaction_type = 0, $transaction_time = "")
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'transaction_logs',
- ];
- if ($coin_type) $data['name'] = $coin_type;
- if ($from) $data['from'] = $from;
- if ($to) $data['to'] = $to;
- if ($transaction_page) $data['transaction_page'] = $transaction_page;
- if ($transaction_pagesize) $data['transaction_pagesize'] = $transaction_pagesize;
- if ($transaction_type) $data['transaction_type'] = $transaction_type;
- if ($transaction_time) $data['transaction_time'] = $transaction_time;
- return self::request($data);
- }
- /**
- * @param $coin_type
- * @param $hash
- * @param int $tr_native
- * tr_native = 1 表示获取平台已存储的数据,该数据和交易通知收到的数据一样;
- * tr_native = 0 表示获取区块链交易的原生数据,该数据未经过过滤处理,存在许多不同的字段数据;
- * @return bool|false|string
- */
- public static function transaction_detail($coin_type, $hash, $tr_native = -1)
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'transaction_detail',
- 'hash' => $hash,
- 'name' => $coin_type,
- ];
- if ($tr_native != -1) $data['tr_native'] = $tr_native;
- return self::request($data);
- }
- /**
- * 币币行情
- * @return bool|false|string
- * 返回示例
- * 1.{
- * 2. "code": 0,
- * 3. "message": "行情获取成功",
- * 4. "data": {
- * 5. "btc": {
- * 6. "gains": "-0.90", //涨幅百分比
- * 7. "cny": "56078.68", //折合人民币价格
- * 8. "usd": 7918.48, //折合美元的价格
- * 9. "high": 7998.8, //24小时美元最高价格
- * 10. "high_cny": "56647.50", //24小时人民币最高价
- * 11. "low": 7869.9, //24小时美元最低价
- * 12. "low_cny": "55734.63" //24小时人民币最低价
- * 13. },
- * 14. "usdt": {
- * 15. "gains": "0.01",
- * 16. "cny": "7.09",
- * 17. "usd": 1.0011,
- * 18. "high": 1.0011,
- * 19. "high_cny": "7.09",
- * 20. "low": 1.0008,
- * 21. "low_cny": "7.09"
- * 22. }
- * 23. },
- * 24. "time": "2019-01-0100:00:00"
- * 25.}
- */
- public static function market()
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'market',
- ];
- return self::request($data);
- }
- /**
- * EOS获取账号信息
- * @param string $con_type 币种名称
- * @param string $eos_account_name EOS账号
- * @return bool|false|string
- */
- public static function eos_get_account($con_type, $eos_account_name)
- {
- $data = [
- 'appid' => self::$app_id,
- 'method' => 'eos_get_account',
- 'name' => $con_type,
- 'eos_account_name' => $eos_account_name,
- ];
- return self::request($data);
- }
- }
|