对接步骤
step1 申请安全凭证
- 登录一个页面,前往api密钥控制台页面
- 在页面新建密钥,即可创建一对 appKey/secretKey
step2 生成签名串
headers需要包含以下几个变量:
说明
参数名 | 示例 | 描述 |
content-type | application/json | 请求类型 |
m7-appkey | 0000001 | app key,账户编号 |
m7-nonce | 123123 | 6位的随机数 |
m7-timestamp | 1604580737 | 10位秒级的时间戳 |
m7-sign | AKIDz8krbsJ5yKBZQpn74WFkmLPx3gn | 需要使用secretKey进行加密,服务端是用secretKey,具体生成规则如下 |
m7-sign:
- 签名生成规则:(需要使用secretKey进行加密,服务端是用secretKey)
const key = hmac_sha256(appkey+timestamp+nonce, secretkey);
const sign = base64(key);
(node推荐包:https://www.npmjs.com/package/crypto-js)
示例代码:
const currentSign = cryjs.enc.Base64.stringify(cryjs.HmacSHA256(keyToSign, sk));
m7-nonce:
- 随机数6位,用于防止请求重放。每个请求都要重新随机一个。
- 服务器会使用sign+nonce作为redis key,来执行验重,并且5分钟过期
m7-timestamp:
- 请求着用户端当前时间戳,10位
- 后端会先验证时间戳,时间差>5min时,拒绝请求
m7-appkey:
ak信息,发送给服务端,用于鉴权
m7-secretKey:
sk,妥善保管,用于加密不用传输
1. 示例代码-NodeJs:
引用包:https://www.npmjs.com/package/crypto-js
var CryptoJS = require('crypto-js');
const Hmac256 = CryptoJS.HmacSHA256;
const Base64 = CryptoJS.enc.Base64;
var sk = 'HWHp9xFVlbboxIU2S6DHA7sf9sGzt3'
var keyToSign = '20001031608119594123221'
var signInByte = Hmac256(keyToSign, sk); // 这里生成的是二进制格式的结果
var m7sign = Base64.stringify(signInByte); // 直接把二进制转为base64结果 console.log(m7sign)
2. 示例代码-Java8:
import sun.misc.BASE64Encoder;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class TestHmac {
public static void main(String\[\] args) throws Exception { // 示例sk
String sk = "HWHp9xFVlbboxIU2S6DHA7sf9sGzt3";
String message = "20001031608119594123221"; // 示例要加密的message(ak+timestamp+nonce)
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(sk.getBytes(), "HmacSHA256")); // hmac256加密,得到二进制的加密结果
byte\[\] bytes = mac.doFinal(message.getBytes()); // 对二进制密文进行base64,得到sign
final BASE64Encoder encoder = new BASE64Encoder();
String m7sign = encoder.encode(bytes);
System.out.println(m7sign);
}
}
3. 示例代码-Python3:
import hmac
import base64 from hashlib
import sha256 \# 示例sk
message = b'20001031608119594123221' \# 示例要加密的message(ak+timestamp+nonce)
key = b'HWHp9xFVlbboxIU2S6DHA7sf9sGzt3' \# hmac256加密,得到二进制的加密结果
h = hmac.new(key, message, sha256) bytes = h.digest() \# 对二进制密文进行base64,得到sign
m7sign = base64.b64encode(bytes)
print(m7sign)
4.示例代码-Golang:
package main import ( "crypto/hmac" "crypto/sha256" "encoding/base64" "fmt" ) func main() { // 示例sk
var sk string = "HWHp9xFVlbboxIU2S6DHA7sf9sGzt3"
var message string = "20001031608119594123221" // 示例要加密的message(ak+timestamp+nonce)
h := hmac.New(sha256.New, \[\]byte(sk)) h.Write(\[\]byte(message)) // hmac256加密,得到二进制的加密结果
var m7sign = base64.StdEncoding.EncodeToString(h.Sum(nil)) fmt.Println(m7sign)// 对二进制密文进行base64,得到sign }
step3 发送请求
下面是一个请求示例:
curl -X POST \ http://v7-api.7moor.com/openapi/v1/call/dialOut \ -H 'Content-Type: application/json' \ -H 'm7-appkey: 0000001' \ -H 'm7-nonce: 123123' \ -H 'm7-sign: AKIDz8krbsJ5yKBZQpn74WFkmLPx3gn' \ -H 'm7-timestamp: 1604580737368' \ -d '{ "agentNumber":"8001", "calleeNumber":"18111111818", "agentTimeout":60, "calleeTimeout":120 }'