智谱AI开放平台PHP对接

智谱AI开放平台的SDK只提供了Python和Java版,其它语言比如PHP只能使用HTTP的方式去调用,这就需要自己去实现鉴权和请求的代码。

自己用PHP写了个小demo,先生成jwt token,再拿它发送会话请求。

<?php

    public function zhipu_test()
    {
        $api_key = "your_api_key";
        $api_key = explode(".", $api_key);
        $header = array('alg' => 'HS256', 'sign_type' => 'SIGN');

        $payload = array(
            'api_key' => $api_key[0],
            'exp' => time() * 1000 + 3600 * 1000,
            'timestamp' => time() * 1000
        );

        // 把 header 转换为 JSON 字符串,然后进行 base64 编码
        $header = base64_encode(json_encode($header));
        // 把 payload 转换为 JSON 字符串,然后进行 base64 编码
        $payload = base64_encode(json_encode($payload));

        // 把一些在 URL 参数中可能会出错的字符替换掉
        $header = str_replace(array('+', '/', '='), array('-', '_', ''), $header);
        $payload = str_replace(array('+', '/', '='), array('-', '_', ''), $payload);

        $secretKey = $api_key[1];  // 私钥

        // 使用 HMAC SHA-256 根据 header 和 payload 生成一个签名
        $signature = hash_hmac('sha256', $header . '.' . $payload, $secretKey, true);
        // 把 signature 签名转换为 base64
        $signature = base64_encode($signature);
        // 把一些在 URL 参数中可能会出错的字符替换掉
        $signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature);

        // 拼接 JWT
        $jwtStr = $header . '.' . $payload . '.' . $signature;
        // 输出 JWT
        var_dump($jwtStr);

        // 准备请求数据
        $data = [
            "model" => "glm-4", // 填写需要调用的模型名称
            "messages" => [
                [
                    "role" => "user",
                    "content" => "我是雷军,are you ok?"
                ],
            ]
        ];

        // 发送HTTP请求
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://open.bigmodel.cn/api/paas/v4/chat/completions");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Content-Type: application/json",
            "Authorization: Bearer {$jwtStr}"
        ]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $response = curl_exec($ch);

        //输出错误码
        if (curl_errno($ch)) {
            echo 'Error:' . curl_error($ch);
        }

        curl_close($ch);

        var_dump($response);
    }

更多用法参见官方文档 https://maas.aminer.cn/dev/api#http

Leave a Comment

豫ICP备19001387号-1