YOA验号云
上行拨号核验身份,取代短信验证码
接口说明
- 适用于任何需要通过短信验证码核验机主身份的场景,完全取代短信验证码,全程快速高效
- 上行拨号,避免了通常接收短信验证码等待时间长或被手机拦截的烦恼,机主不会产生任何费用
- 注册/登录:提高用户注册和登录的安全性和便捷性,防止恶意攻击和虚假注册
体验一下
|
免费拨打核验电话:15313615122
出现 “核验完成” 的提示后,挂断即可,不会产生任何费用
如果没有获取验证码及“核验完成”的提示,可以再次拨打 180″
核验完成
|
发起请求
- 第一步:提交待核验号码,返回工单号
- 调用地址:https://yoa.cn/api/cgi-bin/yanhao/create/
- 请求方式:POST(请使用https协议)
| 参数 | 类型 | 是否必须 | 说明 |
| appid | string | true | 请求凭证 |
| secret | string | true | 安全密钥(仅用于签名) |
| time | string | true | 生成签名的时间戳 |
| sign | string | true | SHA-1签名(规则见后台) |
| phone | string | true | 待核验号码 |
// 仅做演示,请勿前端调用
$.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协议)
| 参数 | 类型 | 是否必须 | 说明 |
| appid | string | true | 请求凭证 |
| phone | string | true | 待核验号码 |
| orderid | string | true | 发起返回的工单号 |
// 仅做演示,请勿前端调用
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协议)
|
// 仅做演示,请勿前端调用
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 |
| 4002 | secret错误 |
| 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秒 |
| 易用性 | 自主拨号,会打电话即可 | 容易被手机拦截,普通人甚至找不到被拦截的短信 |
| 计费 | 用户填错号码不会核验成功,不计费 | 用户填错号码也会发送短信扣费 |
| 安全性 | 上行拨号,安全可靠,机主不产生话费 | 前端容易被人恶意狂刷,扣费还骚扰他人 |
| 转化率 | 用户操作简单,转化率高 | 用户操作麻烦易走失,转化率低 |