# 批量转换teamPlayerId

#### 功能介绍

华为开发者联盟上的游戏从一个账号转移到另一个账号进行维护，该游戏资产归属于转入方。

转出方/转入方可以调用此接口，向华为服务器批量提交转让前游戏关联的玩家标识teamPlayerId等信息，批量获取游戏转让后对应的teamPlayerId等信息。

#### 接口约束

*   调用此接口前，请确保转出方/转入方已完成游戏转移，否则均将无权转换teamPlayerId。
    
*   单次接口请求最多可以获取1000条teamPlayerId数据。
    
*   请勿频繁调用此接口，调用的时间间隔请控制在3秒以上。
    

#### 接口原型

*   **承载协议**：HTTPS POST
    
*   **接口方向**：开发者服务器->华为游戏服务器
    
*   **接口URL**：
    
    *   中国站点：
        
        调用获取Token接口时使用的域名需与本接口域名保持一致，例如本接口使用“connect-api.cloud.huawei.com”，则调用获取Token接口需使用“
        
*   **数据格式**：
    
    *   请求：Content-Type: application/json
    *   响应：Content-Type: application/json

#### 请求参数

#### Header

| 参数名称 | 是否必选 | 类型 | 参数说明 |
| --- | --- | --- | --- |
| client_id | 是 | String | 用于鉴权的客户端ID，获取方法参考创建API客户端。 |
| Authorization | 是 | String | 认证信息，格式为“Authorization: Bearer ${access_token}”。access_token为获取Token中获取的access_token。 |
| appId | 是 | String | 游戏APP ID，获取方法参见查看应用信息。 |

#### Body

请求Body中使用JSON格式携带更相关信息，参数如下表所示。

| 参数名称 | 是否必选 | 类型 | 参数说明 |
| --- | --- | --- | --- |
| srcCpId | 是 | Long | 游戏转出方的开发者Developer ID，获取方法参见查看应用信息。 |
| dstCpId | 是 | Long | 游戏转入方的开发者Developer ID，获取方法参见查看应用信息。 |
| teamPlayerIds | 是 | List<String> | 转让前，游戏的玩家标识teamPlayerId列表，列表数量至少1条，至多不超过1000条。 建议开发者做好去重工作，确保teamPlayerId列表不要有重复的信息。 |

#### 请求示例

```
POST /api/jas/open/players/player-accounts/team-player/convert HTTP/1.1
Host: connect-api.cloud.huawei.com
Content-Type: application/json
client_id: 41******7168
appId: "*****"
Authorization: Bearer ******
{
    "srcCpId": 4130****71055,
    "dstCpId": 4008****74585,
    "teamPlayerIds":[
        "**********",
        "**********",
        "**********"
    ]
}
```

#### 响应参数

| 参数名称 | 是否必选 | 类型 | 参数说明 |
| --- | --- | --- | --- |
| ret | 是 | JosRet | 包含返回码及描述信息的JSON字符串，格式为{"code":retcode, "msg": "description"}，retcode为返回码，description为返回码描述信息。 |
| data | 是 | List<ConvertTeamPlayerIdItem> | 单次接口请求任务的查询结果。 |

*   JosRet
    
    | 参数名称 | 是否必选 | 类型 | 参数说明 |
    | --- | --- | --- | --- |
    | code | 是 | int | 单次接口请求任务的结果返回码： 0：请求成功。 -1：请求失败。 3002：鉴权错误。 |
    | msg | 否 | String | 失败时的描述信息。 |
    
*   ConvertTeamPlayerIdItem
    
    | 参数名称 | 是否必选 | 类型 | 参数说明 |
    | --- | --- | --- | --- |
    | srcCpId | 是 | Long | 游戏转出方的开发者Developer ID。 |
    | srcTeamPlayerId | 是 | String | 转让前，游戏的玩家标识teamPlayerId。 |
    | dstCpId | 是 | Long | 游戏转入方的开发者Developer ID。 |
    | dstTeamPlayerId | 是 | String | 转让后，游戏的玩家标识teamPlayerId。 |
    | errCode | 是 | int | 查询单个teamPlayerId的结果返回码： 0：成功。 -1：失败。 |
    

#### 响应示例

```
Content-Type: application/json; charset=utf-8
{
    "ret": {
         "code": 0,
         "msg": "string"
    },
    "data": [
        {
            "srcCpId": 4330****71055,
            "srcTeamPlayerId": "******",
            "dstCpId": 4130****71055,
            "dstTeamPlayerId": "*****",
            "errCode": 0
        }
    ]
}
```

#### 调用示例

```
Java
/**
 * 批量转换teamPlayerId
 *
 * @param domain 请根据您的服务器部署地就近选择对应站点的URL，与获取token时使用的domain保持一致
 * @param client_id 用于鉴权的客户端ID
 * @param token post认证请求的token
 * @param teamPlayerIds 需要查询的teamPlayerId列表
 * @param appId 游戏appId
 */
private static void batchGetOpenIds(String domain, String client_id, String token, List<String> teamPlayerIds, String appId) {
        try {
            // 接口URL，domain请根据您的服务器部署地就近选择对应站点的URL且与获取token时使用的domain保持一致
            HttpPost post = new HttpPost(domain + "/api/jas/open/players/player-accounts/team-player/convert");
            // 构造消息头
            post.setHeader("Authorization", "Bearer " + token);
            post.setHeader("client_id", client_id);
            post.setHeader("appId", appId);
            // 构造消息实体
            JSONObject keyString = new JSONObject();
            keyString.put("srcCpId", srcCpId);
            keyString.put("dstCpId", dstCpId);
            keyString.put("teamPlayerIds", teamPlayerIds); // 原主体的teamPlayerId
            StringEntity entity = new StringEntity(keyString.toString(), Charset.forName("UTF-8"));
            entity.setContentEncoding("UTF-8");
            // 发送Json格式的数据请求
            entity.setContentType("application/json");
            post.setEntity(entity);
            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpResponse response = httpClient.execute(post);
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == HttpStatus.SC_OK) {
                BufferedReader br =
                    new BufferedReader(new InputStreamReader(response.getEntity().getContent(), Consts.UTF_8));
                String result = br.readLine();
                System.out.println(result);
                JSONObject object = JSON.parseObject(result);
            }
            post.releaseConnection();
            httpClient.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
}
```

```
C#
/**
 * 批量转换teamPlayerId
 *
 * @param domain 请根据您的服务器部署地就近选择对应站点的URL，与获取token时使用的domain保持一致
 * @param clientId 用于鉴权的客户端ID
 * @param token post认证请求的token
 * @param teamPlayerIds 转让前游戏的玩家标识teamPlayerId列表
 * @param appId 游戏appId
 * @Param srcCpId 游戏转出方的开发者Developer ID
 * @Param dstCpId 游戏转入方的开发者Developer ID
 */
static void convertTeamPlayerId(string domain, string clientId, string token, List<string> teamPlayerIds, string appId, long srcCpId, long dstCpId)
{
    try
    {
        // 接口URL，domain请根据您的服务器部署地就近选择对应站点的URL且与获取token时使用的domain保持一致
        var requestUrl = domain + "/api/jas/open/players/player-accounts/team-player/convert";
        HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
        request.Method = "post";
        request.ContentType = "application/json";
        request.Headers.Add("client_id", clientId);
        request.Headers.Add("Authorization", "Bearer " + token);
        request.Headers.Add("appId", appId);
        Dictionary<string, object> dic = new Dictionary<string, object>
        {
            {"srcCpId", srcCpId},
            {"dstCpId", dstCpId},
            {"teamPlayerIds", teamPlayerIds}
        };
        string sendData = JsonConvert.SerializeObject(dic, Formatting.Indented);
        Console.WriteLine(sendData);
        byte[] byteData = Encoding.GetEncoding("utf-8").GetBytes(sendData);
        request.ContentLength = byteData.Length;
        Stream postStream = request.GetRequestStream();
        postStream.Write(byteData, 0, byteData.Length);
        postStream.Close();
        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
        string strJson = reader.ReadToEnd();
        Console.WriteLine(strJson);
        reader.Close();
        response.Close();
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
}
```

```
PHP
/**
 * 批量转换teamPlayerId
 *
 * @param string $domain 请根据您的服务器部署地就近选择对应站点的URL，与获取token时使用的domain保持一致
 * @param string $client_id 用于鉴权的客户端ID
 * @param string $token post认证请求的token
 * @param array $teamPlayerIds 转让前游戏的玩家标识teamPlayerId列表
 * @param string $appId 游戏appid
 * @Param long $srcCpId 游戏转出方的开发者Developer ID
 * @Param long $dstCpId 游戏转入方的开发者Developer ID
 * @throws Exception
 */
public function batch_convert_teamPlayerIds(string $domain, string $client_id, string $token, array $teamPlayerIds, string $appId, long $srcCpId, long $dstCpId)
{
    $curl = curl_init();
    $data = array("teamPlayerIds" => $teamPlayerIds, "srcCpId" => $srcCpId, "dstCpId" => $dstCpId);
    curl_setopt_array($curl, array(
        CURLOPT_URL => $domain . '/api/jas/open/players/player-accounts/team-player/convert',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => json_encode($data),
        CURLOPT_HTTPHEADER => array(
            'client_id: ' . $client_id,
            'Authorization: Bearer ' . $token,
            'Content-Type: application/json',
            'appId: ' . $appId
        ),
    ));
    $response = curl_exec($curl);
    if (curl_error($curl)) {
        throw new Exception(curl_error($curl));
    }
    curl_close($curl);
    $result = json_decode($response, true);
    var_dump($result);
}
```

```
Python
from getToken import *
class BatchConvertTeamPlayerIdsSolution:
    @staticmethod
    def batch_convert_team_player_ids(domain, client_id, access_token, team_player_id, app_id, src_cp_id, dst_cp_id):
        url = domain + '/api/jas/open/players/player-accounts/team-player/convert'
        data = {"teamPlayerIds": team_player_id, "srcCpId": src_cp_id, "dstCpId": dst_cp_id}
        payload = json.dumps(data)
        headers = {
            'client_id': client_id,
            'Authorization': 'Bearer ' + access_token,
            'Content-Type': 'application/json',
            'appId': app_id
        }
        response = requests.request("POST", url, headers=headers, data=payload)
        print(response.text)
if __name__ == "__main__":
    # 请根据您的服务器部署地就近选择对应站点的URL，这里以中国站点域名为例
    input_domain = ''
    # 客户端ID
    input_client_id = 'xxxxxxx'
    # 客户端密钥
    input_client_secret = 'xxxxxxxx'
    # 获取token
    token_function = GetToken()
    input_access_token = token_function.get_token(input_domain, input_client_id, input_client_secret)
    # 游戏appId
    input_app_id = 'xxxxx'
    # 需要转换的teamPlayerIds列表，单次最大不要超过1000个，这里以2个为例
    input_player_Ids = ['xxxxxxx', 'xxxxxx']
    # 游戏转出方的开发者Developer ID
    input_src_cp_id = 111111
    # 游戏转入方的开发者Developer ID
    input_dst_cp_id = 222222
    batch_function = BatchGetOpenIdsSolution()
    batch_function.batch_convert_team_player_ids(input_domain, input_client_id, input_access_token, input_player_Ids, input_app_id, input_src_cp_id, input_dst_cp_id)
```