开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术
AR与VR
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
信息服务
智能园区
AI市场

    AI市场API使用说明

    简述

    本文将快速引导您调用AI市场中在线售卖的API服务。您需要完成如下步骤:
    1、在线购买API
    2、创建应用APP
    3、鉴权认证
    4、调用API

    其中应用APP与API的关系如下:

    • 一个应用APP可以具有多个API服务的权限,同时一个API服务可被赋权给多个应用。
    • 应用App 想调用某个 API 需要具有该 API 的权限,这个权限通过创建或编辑应用时勾选API的方式来实现。
    • 应用APP作为您调用API时的身份,相关凭证“AppID、API Key、Secret Key”用于验证您的身份。

    第一步:在线购买API

    通过浏览API服务的产品详情与API生产信息等内容,确定服务商提供的API服务满足您的业务需求。
    点击立即购买按钮,下单并支付。支付完成后,进入“管理控制台“即"AI市场买家版",您将在那里看到您所购买的API服务。

    第二步:创建应用APP

    点击AI市场买家版的左侧导航中"应用管理",进入应用列表页面,并点击”创建应用“按钮,完成应用的创建。
    其中,主要的填写项目如下:
    应用名称: 必填项,用于标识您所创建的应用的名称,支持中英文、数字、下划线及中横线。
    应用类型: 必填项,根据您的应用的适用领域,在下拉列表中选取一个类型。
    接口选择: 必填项,您所有购买的API服务都会展示在列表中,通过勾选的方式为该应用赋权,从而使应用可以请求已购的API服务。
    应用描述: 必填项,对此应用的业务场景进行简单描述。

    以上内容根据您的需要,填写完毕后,即可点击”立即创建“,完成应用的创建。应用创建完毕后,您可以在应用列表中点击"管理",查看应用详情。

    如您对于APP内容需要调整,尤其是需要进行应用权限调整时,请在应用详情页面点击"编辑",从而对应用进行更新。

    第三步:鉴权认证

    在您创建完毕应用后,AI市场将会分配给您此应用的相关凭证,即:AppID、API Key、Secret Key。以上三个信息是进行鉴权认证的重要信息,每个应用之间各不相同,请您妥善保管。下图为示例内容:

    您需要使用AppID、API Key及Secret Key,进行Access Token(用户身份验证和授权的凭证)的生成,具体方法如下,同时我们为您准备了几种常见语言的请求示例代码。
    请一定注意:Access Token的有效期为30天(以秒为单位),请您集成时注意在程序中定期请求新的token。

    请求说明

    向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:

    • grant_type: 必须参数,固定为client_credentials
    • client_id: 必须参数,应用的API Key
    • client_secret: 必须参数,应用的Secret Key

    例如:

    https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&

    获取access_token示例代码

    #!/bin/bash
    curl -i -k 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】'
    <?php
    function request_post($url = '', $param = '') {
            if (empty($url) || empty($param)) {
                return false;
            }
            
            $postUrl = $url;
            $curlPost = $param;
            $curl = curl_init();//初始化curl
            curl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页
            curl_setopt($curl, CURLOPT_HEADER, 0);//设置header
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
            curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
            curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
            $data = curl_exec($curl);//运行curl
            curl_close($curl);
            
            return $data;
        }
    
    	$url = 'https://aip.baidubce.com/oauth/2.0/token';
        $post_data['grant_type']       = 'client_credentials';
        $post_data['client_id']      = '你的 Api Key';
        $post_data['client_secret'] = '你的 Secret Key';
        $o = "";
        foreach ( $post_data as $k => $v ) 
        {
        	$o.= "$k=" . urlencode( $v ). "&" ;
        }
        $post_data = substr($o,0,-1);
        
        $res = request_post($url, $post_data);
    
        var_dump($res);
    
    ?>
    package com.baidu.ai.aip.auth;
    
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 获取token类
     */
    public class AuthService {
    
        /**
         * 获取权限token
         * @return 返回示例:
         * {
         * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
         * "expires_in": 2592000
         * }
         */
        public static String getAuth() {
            // 官网获取的 API Key 更新为你注册的
            String clientId = "百度云应用的AK";
            // 官网获取的 Secret Key 更新为你注册的
            String clientSecret = "百度云应用的SK";
            return getAuth(clientId, clientSecret);
        }
    
        /**
         * 获取API访问token
         * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
         * @param ak - 百度云官网获取的 API Key
         * @param sk - 百度云官网获取的 Securet Key
         * @return assess_token 示例:
         * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
         */
        public static String getAuth(String ak, String sk) {
            // 获取token地址
            String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
            String getAccessTokenUrl = authHost
                    // 1. grant_type为固定参数
                    + "grant_type=client_credentials"
                    // 2. 官网获取的 API Key
                    + "&client_id=" + ak
                    // 3. 官网获取的 Secret Key
                    + "&client_secret=" + sk;
            try {
                URL realUrl = new URL(getAccessTokenUrl);
                // 打开和URL之间的连接
                HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
                connection.setRequestMethod("GET");
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.err.println(key + "--->" + map.get(key));
                }
                // 定义 BufferedReader输入流来读取URL的响应
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String result = "";
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
                /**
                 * 返回结果示例
                 */
                System.err.println("result:" + result);
                JSONObject jsonObject = new JSONObject(result);
                String access_token = jsonObject.getString("access_token");
                return access_token;
            } catch (Exception e) {
                System.err.printf("获取token失败!");
                e.printStackTrace(System.err);
            }
            return null;
        }
    
    }
    # encoding:utf-8
    import requests 
    
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
    response = requests.get(host)
    if response:
        print(response.json())
    #include <iostream>
    #include <curl/curl.h>
    #include <json/json.h>
    #include "access_token.h"
    // libcurl库下载链接:https://curl.haxx.se/download.html
    // jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
    // 获取access_token所需要的url
    const std::string access_token_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials";
    // 回调函数获取到的access_token存放变量
    // static std::string access_token_result;
    /**
     * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在result中
     * @param 参数定义见libcurl库文档
     * @return 返回值定义见libcurl库文档
     */
    static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
        // 获取到的body存放在ptr中,先将其转换为string格式
        std::string s((char *) ptr, size * nmemb);
        // 开始获取json中的access token项目
        Json::Reader reader;
        Json::Value root;
        // 使用boost库解析json
        reader.parse(s,root);
        std::string* access_token_result = static_cast<std::string*>(stream);
        *access_token_result = root["access_token"].asString();
        return size * nmemb;
    }
    
    /**
     * 用以获取access_token的函数,使用时需要先在百度云控制台申请相应功能的应用,获得对应的API Key和Secret Key
     * @param access_token 获取得到的access token,调用函数时需传入该参数
     * @param AK 应用的API key
     * @param SK 应用的Secret key
     * @return 返回0代表获取access token成功,其他返回值代表获取失败
     */
    int get_access_token(std::string &access_token, const std::string &AK, const std::string &SK) {
        CURL *curl;
        CURLcode result_code;
        int error_code = 0;
        curl = curl_easy_init();
        if (curl) {
            std::string url = access_token_url + "&client_id=" + AK + "&client_secret=" + SK;
            curl_easy_setopt(curl, CURLOPT_URL, url.data());
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
            std::string access_token_result;
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &access_token_result);
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
            result_code = curl_easy_perform(curl);
            if (result_code != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n",
                        curl_easy_strerror(result_code));
                return 1;
            }
            access_token = access_token_result;
            curl_easy_cleanup(curl);
            error_code = 0;
        } else {
            fprintf(stderr, "curl_easy_init() failed.");
            error_code = 1;
        }
        return error_code;
    }
    using System;
    using System.Collections.Generic;
    using System.Net.Http;
    
    namespace com.baidu.ai
    {
    	public static class AccessToken
    
    	{
    	    // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
    	    // 返回token示例
    		public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";
    
            // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
    		private static String clientId = "百度云应用的AK";
    		// 百度云中开通对应服务应用的 Secret Key
    		private static String clientSecret = "百度云应用的SK";
    
    		public static String getAccessToken() {
    			String authHost = "https://aip.baidubce.com/oauth/2.0/token";
    			HttpClient client = new HttpClient();
    			List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
    			paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
    			paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
    			paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));
    
    			HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
    			String result = response.Content.ReadAsStringAsync().Result;
    			Console.WriteLine(result);
    			return result;
    		}
    	}
    }
    var https = require('https');
    var qs = require('querystring');
    
    const param = qs.stringify({
        'grant_type': 'client_credentials',
        'client_id': '您的 Api Key',
        'client_secret': '您的 Secret Key'
    });
    
    https.get(
        {
            hostname: 'aip.baidubce.com',
            path: '/oauth/2.0/token?' + param,
            agent: false
        },
        function (res) {
            // 在标准输出中查看运行结果
            res.pipe(process.stdout);
        }
    );

    返回说明

    • access_token: 要获取的Access Token;
    • expires_in: Access Token的有效期(秒为单位,一般为1个月);
    • 其他参数忽略,暂时不用;

    例如:

    {
      "refresh_token": "25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074",
      "expires_in": 2592000,
      "scope": "public wise_adapt",
      "session_key": "9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI",
      "access_token": "24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074",
      "session_secret": "dfac94a3489fe9fca7c3221cbf7525ff"
    }

    若请求错误,服务器将返回的JSON文本包含以下参数:

    • error: 错误码;关于错误码的详细信息请参考下方鉴权认证错误码。
    • error_description: 错误描述信息,帮助理解和解决发生的错误。

    例如认证失败返回:

    {
        "error": "invalid_client",
        "error_description": "unknown client id"
    }

    鉴权认证错误码

    error error_description 解释
    invalid_client unknown client id API Key不正确
    invalid_client Client authentication failed Secret Key不正确

    第四步:调用API

    通过以上步骤,您已经获得了access_token这一重要参数。

    请前往您所购买的API服务商品详情页中,在请求示例代码中选择合适的语言,点击右上角icon复制代码。 代码中,有一个重要参数即为access_token,请将您在第三步获得的参数填入。同时参照请求参数要求,将示例代码中请求参数替换为您实际业务需要的参数,发起调用。

    如果您返回结果与正常返回示例相同,则您成功地实现了一次调用;
    如果您返回结果失败,请对照服务商提供的错误码表进行排查。如果排查完毕后仍然无法调用,请在买家中心的已购服务详情中,找到服务商联系方式,与服务商尽快取得联系。

    您在与服务商沟通过程中,有任何不满意请向AI市场投诉,投诉的邮箱地址为AImarket@baidu.com。

    下一篇
    买家常见问题