对接步骤

step1 申请安全凭证

  1. 登录一个页面,前往api密钥控制台页面
  2. 在页面新建密钥,即可创建一对 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  }'