php百度云账户余额查询API示例

1、官方文档地址:账户余额查询

请求结构

bash 复制代码
POST /v{version}/finance/cash/balance
HTTP/1.1 
Host: billing.baidubce.com 
ContentType: application/json; charset=utf-8
Content-Length: <Content_Length>
Authorization: authorization string

响应参数

名称 类型 描述
cashBalance BigDecimal 用户余额

PHP完整代码示例:

php 复制代码
<?php
//账户余额查询
class Balance {
    
    private $ak;
    private $sk;
    
    public function __construct($ak, $sk)
    {
        $this->ak = $ak;
        $this->sk = $sk;
    
        if (empty($this->ak) || empty($this->sk)) {
            exit('请配置ak 或者 sk');
        }
    
    }
    
    public function getBalance()
    {
        $data = [];
        $res = $this->getBaiduApi($data);
        if (isset($res['cashBalance'])) {
            $result =  [
                'code' => 200,
                'cashBalance' => $res['cashBalance'],
                'msg' => 'ok'
            ];
        } else {
            $result =  [
                'code' => 10001,
                'msg' => $res['message']
            ];
        }
    
        return $result;
    }
    
    public function getBaiduApi($data = [])
    {
        $host = 'billing.baidubce.com'; // 服务
        $uri = '/v1/finance/cash/balance'; // 接口路径
        $startUtc = gmdate("Y-m-d\TH:i:s\Z");  // utc 时间戳
        $Authorization = $this->getBaiDuAuthorization($startUtc, $uri, $host);
        $url = "https://" . $host . $uri;
        $data = json_encode($data,JSON_UNESCAPED_UNICODE);
        $header = [
            'Authorization:'.$Authorization,
            'Host:'.$host,
            'content-type:application/json',
            'x-bce-date:'.$startUtc,
            'Content-Length:'.strlen($data)
        ];
        
        return $this->getBaiDuPostCurl($url, $data, $header);
    }
    
    public function getBaiDuAuthorization($startUtc, $canonicalUri, $host)
    {
        // 签名有效期 (秒)
        $validity = '1800';
    
        //签名头域(signedHeaders):加入签名算法的HTTP头域列表,为认证字符串的中间部分。
        $signedHeaders = 'host;x-bce-date';
        
        $Host = "host:" . $host;

        $BceDate = "x-bce-date:" . urlencode($startUtc);

        $httpRequestMethod = "POST";
        
        //规范请求(canonicalRequest):经过规范化处理后的请求信息,又称待签名串。
        $canonicalCan = '';
        
        $canonicalRequest = $httpRequestMethod . "\n" . $canonicalUri . "\n" . $canonicalCan . "\n" . $Host . "\n" . $BceDate;
    
        // 1: 前缀字符串  由除sk字段外的签名信息生成
        $authStringPrefix = "bce-auth-v1/" . $this->ak . "/" . $startUtc . "/" . $validity;
        // 2: 派生签名密钥 signingKey  signingKey = HMAC-SHA-256-HEX("sk", authStringPrefix)
        $signingKey = bin2hex(hash_hmac('sha256',  $authStringPrefix, $this->sk, true));
        // 3: 签名摘要 signature  signature = HMAC-SHA-256-HEX(signingKey, canonicalRequest)
        $signature = bin2hex(hash_hmac('sha256',  $canonicalRequest, $signingKey, true));
        // 4: 认证字符串 authorization  Authorization = authStringPrefix/signedHeaders/signature
        $Authorization = $authStringPrefix . '/' . $signedHeaders .'/' . $signature;
        
        return $Authorization;
    }
    
    
    public function getBaiDuPostCurl($url, $data = null, $header = null)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_NOBODY, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        if (!empty($data)) {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }
        if ( !empty($header) ) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        }
        
        $res = curl_exec($ch);
        $errorCode = curl_errno($ch);
        curl_close($ch);
        if(0 !== $errorCode) {
            return false;
        }
        
        return json_decode($res, true);
    }
}

$ak = '109e************************68f1';    //换成自己的Access Key
$sk = 'c5e0*************************e4e';    //换成自己的Secret Key
$balance = new Balance($ak, $sk);
$res = $balance->getBalance();
if ($res['code'] == 200) {
    echo '余额:' . $res['cashBalance'] . '元';
} else {
    echo $res['msg'];
}

?>

如何获取AKSK:如何获取AKSK - 相关参考Reference | 百度智能云文档

相关推荐
Hemy081 小时前
QT_QUICK_BACKEND 环境变量详解(AI生成)
开发语言·qt
艾莉丝努力练剑2 小时前
深入详解C语言的循环结构:while循环、do-while循环、for循环,结合实例,讲透C语言的循环结构
c语言·开发语言·c++·学习
晨非辰3 小时前
#C语言——学习攻略:自定义类型路线--结构体--结构体类型,结构体变量的创建和初始化,结构体内存对齐,结构体传参,结构体实现位段
c语言·开发语言·经验分享·学习·其他·学习方法·visual studio
赵英英俊3 小时前
Python day43
开发语言·python
Warren984 小时前
公司项目用户密码加密方案推荐(兼顾安全、可靠与通用性)
java·开发语言·前端·javascript·vue.js·python·安全
·白小白4 小时前
【数据结构】——栈(Stack)的原理与实现
c语言·开发语言·数据结构
野犬寒鸦5 小时前
Java Stream API 中常用方法复习及项目实战示例
java·服务器·开发语言·数据库
提笔惊蚂蚁5 小时前
Python 高级语法
开发语言·python
q567315235 小时前
使用reqwest+select实现简单网页爬虫
开发语言·爬虫·golang·kotlin
郝学胜-神的一滴6 小时前
C++中的`auto`与`std::any`:功能、区别与选择建议
开发语言·c++·程序人生·算法