Skip to content
共绩算力文档中心

共绩算力 商户接口文档

  • 每个商户在共绩平台会有个唯一商户账号,共绩存商户整体的余额。

  • 商户系统中用户的余额信息、以及是否预警由商户自己来维护。

  • 商户系统来判断哪些用户是不能开机、或需要立即关机的,然后把信息告诉共绩,共绩来做限制和处理。

  • 处理流程:

    1. 商户检测到用户余额不足或欠费,推送预警信息
    2. 共绩平台接收预警,发送通知给用户
    3. 启动关机流程,释放相关资源
  • 触发时机:用户在共绩平台发起开机请求
  • 验证流程:
    1. 共绩平台接收用户开机请求
    2. 验证用户是否在黑名单中
    3. 根据黑名单验证结果决定是否允许开机
  1. 向共绩算力方获取 公私钥-A
  2. 商户登录流程
    1. 商户前端生成 RSA 公私钥对-B

export async function generateApiKeyPair() { //生成密钥对 return new Promise(async (resolve) => { // crypto 默认不需要引入第三方依赖,使用浏览器内置 API const keyPair = await crypto.subtle.generateKey( { name: ‘RSA-OAEP’, //算法名称 modulusLength: 2048, //密钥长度 publicExponent: new Uint8Array([1, 0, 1]), //公钥的指数 65537 最大值 hash: { name: ‘SHA-256’ } //使用 SHA-256 算法 }, true, [‘encrypt’, ‘decrypt’] ) //“spki” 表示导出公钥 const exportedPublicKey = await crypto.subtle.exportKey(‘spki’, keyPair.publicKey) //window.btoa是浏览器方法用于创建一个 base-64 编码的字符串。 const publicKeyPem = window.btoa(String.fromCharCode(…new Uint8Array(exportedPublicKey))) //pkcs8是表示导出私钥 const exportedPrivateKey = await crypto.subtle.exportKey(‘pkcs8’, keyPair.privateKey) const privateKeyPem = window.btoa(String.fromCharCode(…new Uint8Array(exportedPrivateKey))) resolve({ publicKeyPem: publicKeyPem, privateKeyPem: privateKeyPem }) }) }

1. 前端将登录信息和公钥 B 传给商户后端进行登录验证
3. 共绩后台登录流程
1. 商户后台验证通过后,调用共绩后台进行商户用户登录
2. 商户后台调用共绩[获取登录信息接口](https://apifox.com/apidoc/shared/15f9f602-8d24-438f-bb47-2f5496a7bc6f/api-270986655),传入公钥 B(接口本身的加密和加签通过静态商户 Token 与公私钥-A 进行计算)
3. 共绩后台验证通过后,会返回用户 Token 与公钥 C
4. 商户后台将获取到的用户 Token 与公钥 C 返回前端
4. 商户前端调用内嵌 WEB 服务,并将用户 Token 与私钥 B 和公钥 C 传入内嵌 WEB 服务:
1. 示例代码如下
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Iframe 接入示例</title>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
.header {
width: 100%;
height: 60px;
background-color: #1a73e8;
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
}
.header button {
margin-left: 10px;
}
.content {
display: flex;
flex: 1;
}
.content .sidebar {
width: 200px;
background-color: #000000;
color: #ffffff;
padding: 20px;
}
.content .iframe-container {
flex: 1;
}
.content #iframeContainer {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<header class="header">
<h3>您的导航栏</h3>
<button onclick="changeIframeData()">模拟切换登录信息</button>
</header>
<div class="content">
<aside class="sidebar">
<h3>您的菜单栏</h3>
</aside>
<div class="iframe-container">
<!-- 生产需替换 src 为 https://console.suanli.cn/serverless/idc?type=other -->
<iframe
id="iframeContainer"
src="https://console.novastream.studio/serverless/idc?type=other"
></iframe>
</div>
</div>
<script>
const iframe = document.getElementById('iframeContainer');
let flag = true
function getLoginData() {
// 向 iframe 传登陆信息,需替换成真实的
return flag ? {
// 用户 Token,通过接口获取登录信息接口 中返回的 token 字段
"token": "4822c517-f137-467c-8111-bec27480e7fe-20260224172712",
// 公钥 C 通过接口 获取登录信息接口 中返回的公钥 C
"rsa_pubk": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4KoMEAIsA7TGfkdTBF2jdeXmC+KXnDAFgW8E8/9QnhE/FpIj8ZukGTXoorqa2HQd3LKTBj8lIAXhdOLmldj86Iwc9Kw3DhfI14yoaeBI8yjkY5K490YaHAdUXuGq5uQJjJi7u92V53jIOJVbzBeCb04DRtc9av9AD/MjHIL3Hoa8lr4kS40RzGLr3m9HlBQiB1Q3fxdk0PlccOkAbFIMjc72H4XvZwlVfnix2LrGNNAjZJ8d9VBCg3DpfKmkBZIu8yF4TV9uVBCqCoPYP+kcDa3eLqLVRnlxQeryng4JzCxSABZwaYvYhuKICMJKpJo7FuNvN92CvMHuifoMTEn98wIDAQAB",
// 私钥 B 商户前端生成 RSA 公私钥对-B 中的私钥
"rsa_prik": "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC28KEJQTimtjUZUfOSlN6TsVF1Gi7ru9tBnsVSKttEQdERMB8IbigAYbNklRZENLADs/qEEAQUrPkefVZo+0nLH0UuR1NYJE1yzLIiHyN7FQsdatriLWZGIgkeJtjR9RT7asFFkJ9C+mtxws7eeWLSetvFf59kdQqOT9tSxQQzCN5YB+AT3QxQAR5TakIKUICGkxmddZGpbwwl1FRetuSbDIgzUIfZPbcF6oTvQj+XGvFwx93/HXwQVCpT2MSE3vyCTfk808j43uZhY3o6wBilIdI6hlJimwbUA9wHPT25rrB+1QL1rusoIcTEomspPh5tv+a4t+7eBW+Q1h9Ll3cPAgMBAAECggEAAUnJgISujvH6hr6effpBZP3bKn1wNiXBAgHJtu3pVF44SCw0E72e133Yow0vtnQ+hxAl4/cu6CxdprrQOHYIi38hYBWNfzHmP7g0Suw4Nj4sMV1WxD/4l+bWdJlmbngQ2UJjsQc3L+QOjKMIDOYC7aOC162x5CW02NK0Iy2S/X7/7rE7V41A94Bu0vPs5R/se2GQxvCuK2um4CouJUykDQ69YQDtBQOt88jdMq37W8yi0WhUCIAMcFb4GmJTbOIsC6OAPPabOcKJ30dM8HoNOMew5TY8alHfnHyY+1YYrvr93QLAHYwnzX3ozQ7tOBDDvdq++aCpfKpKKGPzb2d6cQKBgQDr0kEqJT5P480DSkEx6uBQQwcpGY9M1GcOXAGnCIebt9+HV70TUzCafi46IdPqdPqxQrPrFlyDKuGRzBZ/bRivN4T+vDl2z3gt9PS90t0sIeEgQ3p/eH6K82i+7aYh+w937SrMHR4lASDX9f8e+OqaTBcx+lNAVrPdEGwthidDsQKBgQDGl/2btAtzDxFBX9WpwCDOMBr3uSzvErQQwBWgCOuxVzoTBzqwMDzV0wBBEh2Zwv7nH9oDpU+ROhenlsaJNNfQljNGPZGeO0hqT33epOjqYyCzrtxTTLChZeYEc7APOI/Gkv0S5tZ5Pi8Uw7HX+xU3ytpyhpGMyXQQC08jOJbWvwKBgQDFSYVS6Q2UcJQXaIvaYxF+lFTtQYDtWdVN4hNP1ob883uCExkPjc1fsqih4aMUxwDkQ1WaG38SDVHhU8iOmorIK76MDpRUnYWBjSkjlcGLJlzdTRayhe/392NuOAuA6jUqs7PWR5Xsh2Eey6LAGqbKp1XQbggwD1kyXIbkHxPCQQKBgBzwXQZpcBmuImeSXYJE+wLQw71BgKi94vtl4kDVy/KlsVLAhO7TuKm3+5t/1kxnu9lWLODHIBcbjgLf18J6rtA4cvRTWHrkTKMhPkhJY590HnnQi06gKET8ok4XxZoSNfFLzhEJDkvQoe+2rJ26etcMelSiA2eum3kTDM8nGePlAoGASPBM7Zqng2t91cDtDr/YdXMA+Qx/zLQUqEe0HPU+dfnn9YS2Mvp0LS74yXt2Jo633jq4DkGo+OWNZvo1d6lKULLs6sujbqDok9TxeI6QS8eibG8WAUkTFrArvtjdyXqYzWcC7dg/W+PpSD32lDrVh+mXpNx6yzLTD9rqT1fquPQ="
} : {
"rsa_prik": "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC28KEJQTimtjUZUfOSlN6TsVF1Gi7ru9tBnsVSKttEQdERMB8IbigAYbNklRZENLADs/qEEAQUrPkefVZo+0nLH0UuR1NYJE1yzLIiHyN7FQsdatriLWZGIgkeJtjR9RT7asFFkJ9C+mtxws7eeWLSetvFf59kdQqOT9tSxQQzCN5YB+AT3QxQAR5TakIKUICGkxmddZGpbwwl1FRetuSbDIgzUIfZPbcF6oTvQj+XGvFwx93/HXwQVCpT2MSE3vyCTfk808j43uZhY3o6wBilIdI6hlJimwbUA9wHPT25rrB+1QL1rusoIcTEomspPh5tv+a4t+7eBW+Q1h9Ll3cPAgMBAAECggEAAUnJgISujvH6hr6effpBZP3bKn1wNiXBAgHJtu3pVF44SCw0E72e133Yow0vtnQ+hxAl4/cu6CxdprrQOHYIi38hYBWNfzHmP7g0Suw4Nj4sMV1WxD/4l+bWdJlmbngQ2UJjsQc3L+QOjKMIDOYC7aOC162x5CW02NK0Iy2S/X7/7rE7V41A94Bu0vPs5R/se2GQxvCuK2um4CouJUykDQ69YQDtBQOt88jdMq37W8yi0WhUCIAMcFb4GmJTbOIsC6OAPPabOcKJ30dM8HoNOMew5TY8alHfnHyY+1YYrvr93QLAHYwnzX3ozQ7tOBDDvdq++aCpfKpKKGPzb2d6cQKBgQDr0kEqJT5P480DSkEx6uBQQwcpGY9M1GcOXAGnCIebt9+HV70TUzCafi46IdPqdPqxQrPrFlyDKuGRzBZ/bRivN4T+vDl2z3gt9PS90t0sIeEgQ3p/eH6K82i+7aYh+w937SrMHR4lASDX9f8e+OqaTBcx+lNAVrPdEGwthidDsQKBgQDGl/2btAtzDxFBX9WpwCDOMBr3uSzvErQQwBWgCOuxVzoTBzqwMDzV0wBBEh2Zwv7nH9oDpU+ROhenlsaJNNfQljNGPZGeO0hqT33epOjqYyCzrtxTTLChZeYEc7APOI/Gkv0S5tZ5Pi8Uw7HX+xU3ytpyhpGMyXQQC08jOJbWvwKBgQDFSYVS6Q2UcJQXaIvaYxF+lFTtQYDtWdVN4hNP1ob883uCExkPjc1fsqih4aMUxwDkQ1WaG38SDVHhU8iOmorIK76MDpRUnYWBjSkjlcGLJlzdTRayhe/392NuOAuA6jUqs7PWR5Xsh2Eey6LAGqbKp1XQbggwD1kyXIbkHxPCQQKBgBzwXQZpcBmuImeSXYJE+wLQw71BgKi94vtl4kDVy/KlsVLAhO7TuKm3+5t/1kxnu9lWLODHIBcbjgLf18J6rtA4cvRTWHrkTKMhPkhJY590HnnQi06gKET8ok4XxZoSNfFLzhEJDkvQoe+2rJ26etcMelSiA2eum3kTDM8nGePlAoGASPBM7Zqng2t91cDtDr/YdXMA+Qx/zLQUqEe0HPU+dfnn9YS2Mvp0LS74yXt2Jo633jq4DkGo+OWNZvo1d6lKULLs6sujbqDok9TxeI6QS8eibG8WAUkTFrArvtjdyXqYzWcC7dg/W+PpSD32lDrVh+mXpNx6yzLTD9rqT1fquPQ=",
"rsa_pubk": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4KoMEAIsA7TGfkdTBF2jdeXmC+KXnDAFgW8E8/9QnhE/FpIj8ZukGTXoorqa2HQd3LKTBj8lIAXhdOLmldj86Iwc9Kw3DhfI14yoaeBI8yjkY5K490YaHAdUXuGq5uQJjJi7u92V53jIOJVbzBeCb04DRtc9av9AD/MjHIL3Hoa8lr4kS40RzGLr3m9HlBQiB1Q3fxdk0PlccOkAbFIMjc72H4XvZwlVfnix2LrGNNAjZJ8d9VBCg3DpfKmkBZIu8yF4TV9uVBCqCoPYP+kcDa3eLqLVRnlxQeryng4JzCxSABZwaYvYhuKICMJKpJo7FuNvN92CvMHuifoMTEn98wIDAQAB",
"token": "4822c517-f137-467c-8111-bec27480e7fe-20260224172712"
};
}
document.addEventListener('DOMContentLoaded', () => {
// 向iframe传登陆信息,需替换成真实的
iframe.addEventListener('load', function() {
setTimeout(() => {
// 向iframe发送参数
iframe.contentWindow.postMessage(getLoginData(), "*");
}, 500);
}, { once: true });
});
function changeIframeData() {
// 切换iframe登陆信息
flag = !flag
iframe.contentWindow.postMessage(getLoginData(), "*");
}
</script>
</body>
</html>
  1. 操作内嵌 WEB 服务进行业务操作

商户用户登录接口 共绩科技

https://www.gongjiyun.com/docs/platform/openapi/m3p6whioxidzwaksughc4gfhnro/

版本

变更记录

变更日期

变更说明

1.0.0

新建

2025/04/11

新建商户接口文档,含流程说明、用户登录接口、计费查询接口、商户黑名单变更接口。