php请求okx接口获取比特币价格数据、k线数据

2024-01-15 10:59

本文主要是介绍php请求okx接口获取比特币价格数据、k线数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

php请求okx接口获取比特币价格数据

      • 环境
      • 配置请求头、签名
        • 设置签名
        • 配置代理
      • 全部代码

环境

我本地用的是thinkphp框架和guzzle

安装guzzle

composer require guzzlehttp/guzzle 

配置请求头、签名

我们需要准备api_key,secret_key,passphrase

api_key,secret_key,passphrase需要我们自己注册账号去申请

官方文档

这是官方的要求
发起请求
所有REST私有请求头都必须包含以下内容:

OK-ACCESS-KEY字符串类型的APIKey。

OK-ACCESS-SIGN使用HMAC SHA256哈希函数获得哈希值,再使用Base-64编码(请参阅签名)。

OK-ACCESS-TIMESTAMP发起请求的时间(UTC),如:2020-12-08T09:08:57.715Z

OK-ACCESS-PASSPHRASE您在创建API密钥时指定的Passphrase。

所有请求都应该含有application/json类型内容,并且是有效的JSON。

签名
生成签名

OK-ACCESS-SIGN的请求头是对timestamp + method + requestPath + body字符串(+表示字符串连接),以及SecretKey,使用HMAC SHA256方法加密,通过Base-64编码输出而得到的。

如:sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(timestamp + ‘GET’ + ‘/api/v5/account/balance?ccy=BTC’, SecretKey))

其中,timestamp的值与OK-ACCESS-TIMESTAMP请求头相同,为ISO格式,如2020-12-08T09:08:57.715Z。

method是请求方法,字母全部大写:GET/POST。

requestPath是请求接口路径。如:/api/v5/account/balance

body是指请求主体的字符串,如果请求没有主体(通常为GET请求)则body可省略。如:{“instId”:“BTC-USDT”,“lever”:“5”,“mgnMode”:“isolated”}

设置签名
$api_key = "xxxx";$secret_key = "xxxx";$passphrase = "xxxx";// 设置时区为UTCdate_default_timezone_set('UTC');// 获取当前时间的 DateTime 对象$dateTime = new DateTime();// 格式化时间戳为指定的格式(ISO 8601)$timestamp = $dateTime->format('Y-m-d\TH:i:s.u\Z');$url = "";$body = "";$string = $timestamp . "GET" . $url . $body;$signature = base64_encode(hash_hmac('sha256', $string, $secret_key));$headers = ["OK-ACCESS-KEY" => $api_key,"OK-ACCESS-SIGN" => $signature,"OK-ACCESS-TIMESTAMP" => $timestamp,"OK-ACCESS-PASSPHRASE" => $passphrase];
配置代理

请求国外接口需要配置一个代理,我这边本地配置了VPN,所以用的是本地的代理

  		$this->client = new Client(["proxy" => "http://127.0.0.1:23457","headers" => $headers]);

全部代码

Res是一个返回类
res.php

<?php
namespace app\util;class Res{function success($msg,$data){return json(["code"=>200,"msg"=>$msg,"data"=>$data]);}function error($msg){return json(["code"=>400,"msg"=>$msg,"data"=>null]);}
}

okx.php控制器类

<?phpnamespace app\controller;use app\BaseController;
use DateTime;
use think\Request;
use GuzzleHttp\Client;
use app\util\Res;class Okx extends BaseController
{private $client;private $result;public function __construct(\think\App $app){$api_key = "...";$secret_key = "...";$passphrase = "...";// 设置时区为UTCdate_default_timezone_set('UTC');// 获取当前时间的 DateTime 对象$dateTime = new DateTime();// 格式化时间戳为指定的格式(ISO 8601)$timestamp = $dateTime->format('Y-m-d\TH:i:s.u\Z');$url = "";$body = "";$string = $timestamp . "GET" . $url . $body;$signature = base64_encode(hash_hmac('sha256', $string, $secret_key));$headers = ["OK-ACCESS-KEY" => $api_key,"OK-ACCESS-SIGN" => $signature,"OK-ACCESS-TIMESTAMP" => $timestamp,"OK-ACCESS-PASSPHRASE" => $passphrase];$this->result = new Res();$this->client = new Client(["proxy" => "http://127.0.0.1:23457","verify" => false,"headers" => $headers]);}public function getPrice($type){$style = strtoupper($type);$url = "https://www.okx.com/api/v5/public/mark-price?instType=SWAP&instId={$style}-USDT-SWAP";$res = $this->client->get($url)->getBody()->getContents();return $this->result->success("获取数据成功", json_decode($res));}
}

配置路由
route/app.php


Route::group("/okx",function(){Route::get("/price/:type","okx/getPrice");});

返回结果
在这里插入图片描述

其他的接口我们只需要在官方文档中对应即可

这篇关于php请求okx接口获取比特币价格数据、k线数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608665

相关文章

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具