语音验证协议

1. 请求和响应报文

  接口采用http进行交互,所有提交参数均需要UTF-8urlencode编码后传输,支持GETPOST方式提交(数据量大则建议采用POST)

  返回报文统一使用JSON,编码为UTF-8,报文中某个可选参数的值为空,则该标签可以不出现。

  请接入用户登录到平台在用户基本信息页获取 ApiKey

  标注 (签名) 的参数需要对其进行签名校验,签名算法参见文档尾


2. API请求地址

http://bcp.pro-group.cn/VoiceVerify/CallApi/Index
 

3.消息单元定义

3.1下发验证码

请求

Action

命令

voiceverify

V

版本号

1.0 固定值

Account

帐号 (签名)

                         

Mobile

号码 (签名)

 

Code

验证码 (签名)

语音验证码(410位)

OrderNo

订单号(签名)

832位英文或数字

Timestamp

时间戳(签名)

yyyyMMddHHmmss

Sign

签名

参见签名算法

响应

Result

结果集

 充值成功有该值,失败时没有

Code

代码

 

Message     

消息

 


:http://bcp.pro-group.cn/VoiceVerify/CallApi/Index?v=1.0&action=voiceVerify&account=帐号&mobile=手机号&code=1234&orderno=201604200857121×tamp=201604200857&sign=MD5

l  调用成功的返回值示例:

{

    "Code": "0",

    "Message": "成功",

    "Result": {

        "SpOrderNo": "635967403718981097",

        "OrderNo": "20160420091245866",

        "Mobile": "15024379262",

        "VerifyCode": "1234"

    }

}

       // Code 充值返回码,详见4错误定义

// Message充值返回信息

// Result返回结果集(充值失败时,没有该值)

       // SpOrderNo BCP平台订单号

       //OrderNo 用户订单号

       //Mobile 手机号

       // VerifyCode 语音验证码

3.2. 状态回调配置

推送地址:http://xxxxx/xxxxx(由客户提供,GET方式)

URL参数:

 

orderno

用户自定义订单号

sporderno

BCP平台订单号

result

充值状态200: 应答,201: 异常,未发起呼叫,202: 未应答,其它: 其它错误

sign

md5(apikey+orderNo), +”表示字符串连接,apikey为双方约定的私有串


返回值:判断客户是否收到结果,成功返回success,失败返回fail

 

4. 错误定义

2001

参数错误

2002

充值号码不合法

2003

时间戳失效

2004

校验失败

2005

IP地址非法

2006

验证码长度应为4~10

2010

代理商[xxx]没有对应的权限

2011

代理商[xxx]已停用或删除

2012

代理商[xxx]无语音接口权限

2013

当前用户[xxx]余额不足,请充值

1999

系统内部异常,请重试

2020

调用语音接口失败,错误编码:xxx

5.签名算法

按照asc排序键值对参数名排序,拼接键值对字符串(参数名小写) ,需要把api key放到要签名的键值对最后。

例如sign=MD5(aaaa=aaaa&bbbb=bbbb&cccc=cccc&dddd=dddd&key=api密钥),用32MD5加密,生成的MD5小写


 

  var account = "";

  var mobile = "";

  var code = 1;

var orderNo = "";

var timestamp = "";

  var key = "";

 

  //基本参数

  var action = "voiceVerify";

  var ver = "1.0";

  var host = "http://bcp.pro-group.cn";

  var page = "{0}/VoiceVerify /CallApi/Index?action={1}&v={2}&{3}&sign={4}";

 

  //协议参数

  var reqParams = new Dictionary();

reqParams.Add("account", account);

  reqParams.Add("mobile", mobile);

  reqParams.Add("code", code);

  reqParams.Add("orderno", orderno);

  reqParams.Add("timestamp", timestamp);

  //参数排序

  var orderedParams = reqParams.OrderBy(p => p.Key).ToDictionary(p => p.Key, p => p.Value);

 

  //参数拼接

  var strParam = "";

  foreach (var item in orderedParams)

    strParam += item.Key.ToLower() + "=" + item.Value.ToString() + "&";

  strParam = strParam.Trim('&');

 

  //构造URL

  var url = string.Format(page, host, action, ver, strParam, DEncrypt.GetMD5(strParam + "&key=" + key));

 

  //请求

  var client = new WebClient();

  client.Encoding = Encoding.UTF8;

  var result = client.DownloadString(url);

 


 

  //C#兼容的MD5加密算法

  public static string GetMD5(string s)

  {

    MD5 md5 = new MD5CryptoServiceProvider();

    byte[] t = md5.ComputeHash(Encoding.GetEncoding("utf-8").GetBytes(s));

    StringBuilder sb = new StringBuilder(32);

    for (int i = 0; i < t.Length; i++)

    {

      sb.Append(t[i].ToString("x").PadLeft(2, '0'));

    }

    return sb.ToString();

  }

 

©2018 秒速时时彩-秒速时时彩注册-秒速时时彩平台【官方】 沪ICP备15028075号-3