* @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); } }