Appearance
AccessToken获取
Request
Url
text
[POST] : https://eapi.paiago.com/ZKGJ/AccessToken/所有请求需要添加服务器IP白名单联系账款管家
AccessToken有效期为2小时
返回类型
JSON
请求参数:
| 参数 | 类型 | 必填 | 描述 | 示例 |
|---|---|---|---|---|
| corpId | string | 是 | 企业corpId | (若需要测试账号,请联系账款管家客服) |
| corpKey | string | 是 | 企业密钥 | |
| timeStamp | string | 是 | 当前时间戳(秒) | 1662085101 |
| signature | string | 是 | 签名 |
参数说明:
- 签名计算方法:
- $suiteKey //分配的key
- $timeStamp //时间戳
- $suiteSecret //密钥
- $timeStamp +"\n" + $suiteKey当做签名字符串,
- $suiteSecret做为签名密钥,使用HmacSHA256算法计算签名,然后进行Base64encode获取最后结果,然后把签名参数再进行urlEncode。
请求示例:
php获取签名(signature)
php
$str = $timeStamp . "\n" . $suiteKey;
$signature = urlencode(base64_encode(hash_hmac('sha256', $str, $suiteSecret, true)));java获取签名(signature)
java
String signature = URLEncoder.encode(signature(param), "UTF-8");
public static String signature(JSONObject param) {
String timestamp = param.getString("timeStamp");
String suiteKey = param.getString("suiteKey");
String suiteSecret = param.getString("suiteSecret");
String stringToSign = timestamp+"\n"+suiteKey;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(suiteSecret.getBytes("UTF-8"), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
return new String(Base64.encodeBase64(signData));
}Python获取签名(signature)
Python
from urllib.parse import quote, urlencode
from hashlib import sha256
import hmac, base64
import time
def get_sha256(data, key):
key = key.encode('utf-8') # sha256加密的key
message = data.encode('utf-8') # 待sha256加密的内容
sign = base64.b64encode(hmac.new(key, message, digestmod=sha256).digest()).decode()
return sign
def urlencode(string):
encoded_string = urllib.parse.quote(string, safe='!()*')
encoded_string = encoded_string.replace(' ', '+')
return encoded_string
if __name__ == '__main__':
time = '1669108257'
suiteKey = 'suiteTest'
suiteSecret = 'suiteSecretTest'
suiteData = time+'\n'+suiteKey
sign = get_sha256(suiteData,suiteSecret)
print(str(sign))
#sign = quote(sign)
#print(str(sign))
#更新存在 转码问题
newSign = urlencode(str(sign))
print(newSign)C#获取签名(signature)
C#
using System;
using System.Text;
using System.Net;
using System.Security.Cryptography;
class Program
{
public static void Main(string[] args)
{
DateTimeOffset now = DateTimeOffset.Now;
long timeStamp = now.ToUnixTimeSeconds();
string suiteKey = "suiteKey";
string data = timeStamp+"\n"+suiteKey;
string suiteSecret = "suiteSecret";
var keyBytes = Encoding.UTF8.GetBytes(suiteSecret);
var messageBytes = Encoding.UTF8.GetBytes(data);
using (var hmac = new HMACSHA256(keyBytes))
{
var hash = hmac.ComputeHash(messageBytes);
var signature = WebUtility.UrlEncode(Convert.ToBase64String(hash));
Console.WriteLine(signature);
}
}
}Go获取签名(signature)
Go
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"encoding/json"
"fmt"
"net/url"
)
type Params struct {
TimeStamp string `json:"timeStamp"`
SuiteKey string `json:"suiteKey"`
SuiteSecret string `json:"suiteSecret"`
}
func Signature(param Params) (string, error) {
stringToSign := param.TimeStamp + "\n" + param.SuiteKey
h := hmac.New(sha256.New, []byte(param.SuiteSecret))
h.Write([]byte(stringToSign))
signData := h.Sum(nil)
return base64.StdEncoding.EncodeToString(signData), nil
}
func main() {
// 示例JSON字符串
jsonStr := `{"timeStamp":"1719884033","suiteKey":"suiteKey","suiteSecret":"suiteSecret"}`
// 解析JSON到结构体
var param Params
if err := json.Unmarshal([]byte(jsonStr), ¶m); err != nil {
fmt.Println("Error parsing JSON:", err)
return
}
// 计算签名
signature, err := Signature(param)
if err != nil {
fmt.Println("Error signing:", err)
return
}
// 输出签名
// Y/sZ/1mDZ81Ycgi9e59uXRrvOTRvJuIg1kr2lgy5coA=
fmt.Println("Signature:", signature)
// 输出URL编码后的签名
// Y%2FsZ%2F1mDZ81Ycgi9e59uXRrvOTRvJuIg1kr2lgy5coA%3D
fmt.Println("Encrypt:", url.QueryEscape(signature))
}Response
响应参数
| 参数 | 描述 | 类型 | 示例 |
|---|---|---|---|
| errcode | 错误码 | int | 0 |
| errmsg | 错误信息 | string | |
| data | 返回值 | string | ffc50044897a74c14b47a755d0a28dc4 |
响应示例:
Success
json
{
"data": "eyJ0eXAiOiJKV1YiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJhcGlfY2VudGVyIiwiYXTkIjoiaHR0cDovL2xvY2FsaG9zdCIsImlhdCI6IjE2NjIwODc1NTYiLCJleHAiOjE2NjIwOTQ3NTYsImNvcnBJZCI6InBlbmtkMTlmZTkwN2UwZGMxNTBlNDcwNTQyN2FlZDE0ZWVkYyIsImNvcnBLZXkiOiJlYzFmODFkNWQwMjI3NGY0ZTFmZWVhUTUzYzNmNzJmMCJ9.cFWFEDRsIGxQFJepf0xU6Io7Xa3vQkrM0dBayOWlYk_qgfncIAbXZNrYUCIiZywIA5nh-kd8g42qk_Tc_6Fc-R1w5W_MfiycM6HSCftG-KTv3zvcRs9KYjfIzLW2fX9HoreNQv6XHlYkxcLz79WEPBX6jJ0jL1TBnfAMPMjbXFNiD4ff-FD3CkdBASwA1u1Ds4OSm8n6OTb5VzxtsGti7mbPNAQ-1DO6r2eIENAfiXmbBrtfnlYLadfgIt-BdS87pKqWqmYFZDP-6UJufyeHy5oU9govyt3GSdLRjGck6BrhH-r7y5_6urrfQhuPDqjuS6QgAAtk3XtFMYSDSFF1xA",
"errcode": 0,
"errmsg": "请求成功",
"request_id": null,
"env": "zkgj-cs"
}Error
json
{
"errcode": 11005,
"errmsg": "签名无效",
"request_id": null,
"env": "zkgj-cs"
}