Top

YOA验号云

上行拨号核验身份,取代短信验证码

接口说明
  • 适用于任何需要通过短信验证码核验机主身份的场景,完全取代短信验证码,全程快速高效
  • 上行拨号,避免了通常接收短信验证码等待时间长或被手机拦截的烦恼,机主不会产生任何费用
  • 注册/登录:提高用户注册和登录的安全性和便捷性,防止恶意攻击和虚假注册
体验一下
  • 获取验证码

免费拨打核验电话:

15313615122
出现 “核验完成” 的提示后,挂断即可,不会产生任何费用
如果没有获取验证码及“核验完成”的提示,可以再次拨打
180″
核验完成
发起请求
  • 第一步:提交待核验号码,返回工单号
  • 调用地址:https://yoa.cn/api/cgi-bin/yanhao/create/
  • 请求方式:POST(请使用https协议)
发起参数(body)
参数类型是否必须说明
appidstringtrue请求凭证
secretstringtrue安全密钥(仅用于签名)
timestringtrue生成签名的时间戳
signstringtrueSHA-1签名(规则见后台)
phonestringtrue待核验号码
发起示例
// 仅做演示,请勿前端调用
$.post("https://yoa.cn/api/cgi-bin/yanhao/create/",{
 appid:"thzd8u9pyrveyrc4hz",
 time:"1764987410",
 sign:"9570213B51F74558B585A8915F398E320644E627",    //SHA-1签名
 phone:"18955294144"
},function(data,status){
 if (status == "success"){
  if (data.errcode == 0 && data.errmsg == "ok") {
   var orderid = data.orderid;
   console.log(orderid);    //正确返回工单号
   …… ……    //查询代码,参考下方
  }
 }
})
成功返回说明
正常返回工单号orderid,凭此工单号查询核验状态,JSON数据包示例如下:
{"errcode":0,"errmsg":"ok","orderid":"240516130037741662424668"}
错误返回说明
错误时返回错误码等信息,JSON数据包示例如下:
{"errcode":4002,"errmsg":"无效的appid"}
查询状态
  • 第二步:通过第一步返回的工单号,查询核验状态
  • 调用地址:https://yoa.cn/api/cgi-bin/yanhao/query/
  • 请求方式:POST(请使用https协议)
查询参数(body)
参数类型是否必须说明
appidstringtrue请求凭证
phonestringtrue待核验号码
orderidstringtrue发起返回的工单号
查询示例
// 仅做演示,请勿前端调用
var timeoutId = setInterval(function(){    //循环查询,建议设置循环次数(时长)
 $.post("https://yoa.cn/api/cgi-bin/yanhao/query/",{
  appid:"thzd8u9pyrveyrc4hz",
  phone:"18955294144",
  orderid:orderid    //发起返回的工单号
 },function(data,status){
  if (status == "success"){
   if (data.errcode == 0 && data.errmsg == "ok") {
    clearInterval(timeoutId);    //取消循环定时器
    …… ……    //核验成功
   }
  }
 })
},1000)
返回说明
接口调用成功,返回json,点上方“查询示例”试试
{"errcode":0,"errmsg":"ok"}
代码示例
(proxy server)
  • 发起请求url:https://yoa.cn/api/cgi-bin/yanhao/create/
  • 查询状态url:https://yoa.cn/api/cgi-bin/yanhao/query/
  • 请求方式:POST(请使用https协议)
  • nodejs
  • python
  • go
  • java
  • asp
  • curl
// 仅做演示,请勿前端调用
var appid = "thzd8u9pyrveyrc4hz"
var time = "1764987410"
var sign = "SHA-1签名"
var phone = "18955294144"
$.post("https://yoa.cn/api/cgi-bin/yanhao/create/",{
 appid:appid,
 time:time,
 sign:sign,
 phone:phone
},function(data,status){
 if (status == "success") {
  if (data.errcode == 0 && data.errmsg == "ok") {
   var orderid = data.orderid;    //正确返回工单号
   var times = 180;    //循环次数(时长)
   var timeoutId = setInterval(function() {
    times = times - 1;
    $.post("https://yoa.cn/api/cgi-bin/yanhao/query/",{
     appid:appid,
     phone:phone,
     orderid:orderid    //发起返回的工单号
    },function(data,status){
     if (status == "success"){
      if (data.errcode == 0 && data.errmsg == "ok") {
       clearInterval(timeoutId);    //取消循环定时器
       …… ……    //核验成功
      } else if (data.errcode == 4202) {
       …… ……    //等待机主拨号,页面如果有显示倒计时可在此处减少(建议)
      } else {
       …… ……    //核验错误返回
      }
     }
    })
   },1000)
  } else {
   …… ……    //发起错误返回
  }
 }
})
java
import requests

url = 'https://yoa.cn/api/cgi-bin/yanhao/create/'
params = {}
params['appid'] = ''
params['secret'] = ''
params['phone'] = ''

headers = {
 'Content-Type': 'application/json;charset=UTF-8',
}
r = requests.request("POST", url, params=params, headers=headers)
print(r.content)
package main
import ("fmt")
func main() {
 url := "https://yoa.cn/api/cgi-bin/yanhao/create/"
 req, err := http.NewRequest("POST", url, nil)
 if err != nil {
  panic(err)
 }
 req.Header.Add("Content-Type", "application/json;charset=UTF-8")
 query := req.URL.Query()
 query.Add("appid", "")
 query.Add("secret", "")
 query.Add("phone", "")
 req.URL.RawQuery = query.Encode()
 client := &Client{}
 resp, err := client.Do(req)
 if err != nil {
  panic(err)
 }
 defer resp.Body.Close()
 fmt.Println("Response status: ", resp.Status)
 fmt.Println("Response headers: ", resp.Header)
 respBody:=ReadAll(resp.Body)
 fmt.Println("Response body: ", string(respBody))
 }
dim postStr, obj, returnJson
function PostURL(byval url,byval postStr)
 Set obj = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0")
  obj.open "POST", url, false
  obj.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
  obj.Send(postStr)
  PostURL = obj.responsetext
 Set obj = nothing
end function

' 拼接发起参数(POST数据):
  postStr = "appid="& appid &"&time="& time &"&sign="& sign &"&phone="& phone
  returnJson = PostURL("https://yoa.cn/api/cgi-bin/yanhao/create/",postStr)
' 发起成功返回json:{"errcode":0,"errmsg":"ok","orderid":"2405161300377416624246680"}
' 解析得到 orderid,查询核验状态

' 拼接查询状态参数:
  postStr = "appid="& appid &"&phone="& phone &"&orderid="& orderid
  returnJson = PostURL("https://yoa.cn/api/cgi-bin/yanhao/query/",postStr)
' 核验成功,返回json:{"errcode":0,"errmsg":"ok"}

curl -X POST -d "appid=appid&secret=secret&phone=phone" https://yoa.cn/api/cgi-bin/yanhao/create/


php

返回码说明
返回码说明
0请求成功,状态=ok
4001无效的appid
4002secret错误
4003调用接口的IP地址不在白名单中
4004签名错误
4101余额不足
4102待核验号码格式不规范
4103待核验号码不是运营商提供的有效号码
4201工单号错误
4202继续等待机主拨号
4203查询超时,本次调用结束
服务价格
规格 有效期 次数 首次购买价 说明
体验版1年30次¥0.01仅限新用户首次购买一次
普通版1年200次¥11
普通版1年1000次¥53
普通版1年3000次¥150平均每天≈8次
普通版1年6000次¥288平均每天≈16次
高级版2年10000次¥460平均每天≈13次
高级版2年30000次¥1290平均每天≈41次
高级版2年50000次¥2000平均每天≈68次
高级版2年100000次¥3650平均每天≈136次
  • 计次条件:(发起成功+机主拨号核验成功)=1次,其他不计次数
优势对比
验号云上行拨号 短信验证码
速度拨号即可完成验证,速度快等待接收短信,查看输入验证码,速度慢
时效性无需等待,拨号实时验证短信有延迟,再次验证至少需要60秒
易用性自主拨号,会打电话即可容易被手机拦截,普通人甚至找不到被拦截的短信
计费用户填错号码不会核验成功,不计费用户填错号码也会发送短信扣费
安全性上行拨号,安全可靠,机主不产生话费前端容易被人恶意狂刷,扣费还骚扰他人
转化率用户操作简单,转化率高用户操作麻烦易走失,转化率低