How to generate the X-Request-ID field in Server API request headers

We recommend including the X-Request-ID field in Server API requests to RC for faster issue resolution.

RongCloud’s Server SDK automatically adds the X-Request-ID field, so you don’t need to generate it manually.

If you need to generate the X-Request-ID yourself (max 36 characters), check out these examples:

Java example

import java.util.UUID;  

HttpURLConnection conn = getHttpURLConnection(config, uri);  
conn.setRequestProperty("X-Request-ID", UUID.randomUUID().toString().replaceAll("\\-", ""));  

PHP example

private function create_guid()  
{  
    $charid = strtoupper(md5(uniqid(mt_rand(), true)));  
    $uuid = substr($charid, 0, 8)  
        . substr($charid, 8, 4)  
        . substr($charid, 12, 4)  
        . substr($charid, 16, 4)  
        . substr($charid, 20, 12);  
    return strtolower($uuid);  
}  
$header = [  
    'RC-App-Key:' . $appKey,  
    'RC-Nonce:' . $nonce,  
    'RC-Timestamp:' . $timeStamp,  
    'RC-Signature:' . $sign,  
    'X-Request-ID:' . $this->create_guid()  
];  

Go example

import  "github.com/google/uuid"  
// getSignature generates the signature locally  
// Signature calculation: concatenate the App Secret, Nonce, and Timestamp in order, then compute the SHA1 hash. If the signature verification fails, the API returns HTTP status code 401.  
func (rc RC ) getSignature() (nonce, timestamp, signature string) {  
    nonceInt := rand.Int()  
    nonce = strconv.Itoa(nonceInt)  
    timeInt64 := time.Now().Unix()  
    timestamp = strconv.FormatInt(timeInt64, 10)  
    h := sha1.New()  
    _, _ = io.WriteString(h, rc.appSecret+nonce+timestamp)  
    signature = fmt.Sprintf("%x", h.Sum(nil))  
    return  
}  

// fillHeader adds API signature to the Http Header  
func (rc RC ) fillHeader(req *httplib.BeegoHTTPRequest) string {  
    requestId := uuid.New().String()  
    nonce, timestamp, signature := rc.getSignature()  
    req.Header("RC-App-Key", rc.appKey)  
    req.Header("RC-Timestamp", timestamp)  
    req.Header("RC-Nonce", nonce)  
    req.Header("RC-Signature", signature)  
    req.Header("Content-Type", "application/json")  
    req.Header("User-Agent", USERAGENT)  
    req.Header("RC-Request-Id", requestId)  
    return requestId  
}  

:bulb: Please include a new X-Request-ID in each request and keep a record of it