简介
本实例用于演示,通过万捷网络验证给Golang程序增加登录授权功能,让Golang编写的程序可以进行销售,控制软件的版权,为软件的作者提供收益。
实现的原理:
根据网络验证的WebApi接口的要求,构造URL网址,然后访问网址,根据返回的内容控制程序流程。
用到的技术/接口:
1、(必须)需要用到URL访问的功能,通常表达为:网页访问、GET请求、HTTP请求、cURL,用于访问构造的网址。
2、(非必须)字符串分割成数组的功能,用于将访问网址返回的内容分割成数组,根据实际需求来利用分割出的成员结果。
相关资料:
在线帮助文档(看 webapi接口说明):https://www.wjsrs.com/h/
示例源码:
package main
import (
"net/http"
"fmt"
"io/ioutil"
"strings"
)
func main(){
//演示调用登录接口,实现登录验证
var rjbh string ="10980" //软件的编号
var name string="zdy_login" //接口名称
var user string="ZTFHD0C3604C" //卡号
var psw string="" //密码(卡号登录不需要密码)
var banben string="18.8" //软件的版本
var jqm string="jqm" //机器码,设备信息
var yxh string="" //游戏号,附加绑定信息,可空
//构造URL参数
var value string = "name="+name+"&c1="+rjbh+"&c2="+user+"&c3="+psw+"&c4="+banben+"&c5="+jqm+"&c6="+yxh+"&c7=1,2,3,4,5,6,7,8,9,10,11,12,13"
//访问webpai接口
var data string= get(value)
//fmt.Printf("返回数据:"+data+"\n")
//得到类似:31536000<|>0<|>10<|>1560477784<|>27.189.145.241<|><|>new<|>1这样的结果
//如果返回的字符串中没有<|>表示返回了错误信息
if !strings.Contains(data, "<|>1") {
fmt.Printf("Error:"+data)
return
}else{
a := strings.Split(data,"<|>")
fmt.Printf("剩余时间秒数:"+a[0]+"\n")
fmt.Printf("剩余点数:"+a[1]+"\n")
fmt.Printf("允许几开:"+a[2]+"\n")
fmt.Printf("游戏号:"+a[3]+"\n")
fmt.Printf("上次登录IP:"+a[4]+"\n")
fmt.Printf("邮箱:"+a[5]+"\n")
fmt.Printf("上次登录的机器码:"+a[6]+"\n")
fmt.Printf("上次登录时间:"+a[7]+"\n")
fmt.Printf("用户的权限:"+a[8]+"\n")
fmt.Printf("验证码(取附加数据用的):"+a[9]+"\n")
fmt.Printf("到期时间:"+a[10]+"\n")
fmt.Printf("备注信息:"+a[11]+"\n")
fmt.Printf("注册时间:"+a[12]+"\n")
//根据以上得到的这些数据,处理软件的执行流程
//在线帮助文档地址:http://www.wjsrs.com/h/index.htm
//请看【WebApi接口介绍】
}
}
//get访问
func get(d string) string{
//fmt.Printf (d)
//get请求
//http.Get的参数必须是带http://协议头的完整url,不然请求结果为空
resp, _ := http.Get("http://xxxx/api.php?"+d)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
//fmt.Println(string(body))
//fmt.Printf("Get request result: %s\n", string(body))
return string(body)
}