PHP对接网络游戏防沉迷实名认证系统

本次开发是自己结合他人的经验开发,但是源文章找不到了,所以自己写了一篇,直接上代码

<?phpnamespace Handlers;class NetworkRealname {protected $biz_id;protected $app_id;protected $secret_key;public function __construct(){$this->biz_id = "";$this->app_id = "";$this->secret_key = "";}/** 请求身份验证接口* $name 姓名,$card 身份证号,$member_id 平台用户id,$test_code 测试码*/function getIdCard($name,$card,$member_id,$test_code=''){$timestamps = $this->getMillisecond();    //当前毫秒时间戳$url = 'https://api.wlc.nppa.gov.cn/idcard/authentication/check';if($test_code) {$this->secret_key = 'caebad8c543aa2154b325f9831baa';    //测试secret_key$this->app_id = '36fce80d09454712bbb0a7c52ec16';         //测试appId$this->biz_id = '1101999999';                               //测试bizId$url = 'https://wlc.nppa.gov.cn/test/collection/loginout/'.$test_code;}$head = ['appId'=>$this->app_id,'bizId'=>$this->biz_id,'timestamps'=>$timestamps];//请求头$header[] = 'Content-Type:application/json;charset=utf-8';$header[] = 'appId:' . $this->app_id;$header[] = 'bizId:' . $this->biz_id;$header[] = 'timestamps:' . $timestamps;//请求体$body['ai']    = md5($member_id);    //32位 不然也会报错 测试时 用文档提供得ai 不需要md5$body['name']   = $name;$body['idNum']  = $card;//请求体加密$data['data'] = $this->bodyEncrypt($body, $this->secret_key);//请求头签名 一般报错1011是签名错误$header[]= 'sign:'. $this->getSign($data, [], $this->secret_key, $head);//请求查询接口$res = $this->reqCurl($url,3,'post', $data, $header);$res = json_decode($res,true);return $res;}/** 查询身份接口* $name 姓名,$card 身份证号,$member_id 平台用户id,$test_code 测试码*/function queryIdCard($member_id,$test_code=''){$timestamps = $this->getMillisecond();$member_id  = md5($member_id);$url = 'http://api2.wlc.nppa.gov.cn/idcard/authentication/query?ai='.$member_id;if($test_code) {$this->secret_key = 'caebad8c543aa2191b325f9831baa';$this->app_id = '36fce80d09454712bbc7a7c52ec16';$this->biz_id = '1101999999';//查询接口是get请求 所以ai拼接到 url后面$url = 'https://wlc.nppa.gov.cn/test/authentication/query/'.$test_code.'?ai='.$member_id;}//get请求携带ai 所以签名得时候ai也要参与 不然会1011$head = ['ai'=>$member_id,'appId'=>$this->app_id,'bizId'=>$this->biz_id,'timestamps'=>$timestamps];$header[] = 'Content-Type:application/json;charset=utf-8';$header[] = 'appId:'.$this->app_id;$header[] = 'bizId:'.$this->biz_id;$header[] ='timestamps:'.$timestamps;$header[]= 'sign:'. $this->getSign('',[],$this->secret_key,$head);//请求查询接口$res = $this->reqCurl($url,3,'get',[],$header);$res = json_decode($res,true);return $res ;}/** 游戏用户行为数据上报接口说明* @param $member_id        用户id* @param $pi               已通过实名认证用户的唯一标识* @param $di               游客模式设备标识,由游戏运营单位生成,游客用户下必填* @param $bt               游戏用户行为类型: 0:下线; 1:上线* @param $ct               用户行为数据上报类型 0:已认证通过用户 2:游客用户* @return res  array*/function queryLoginout($member_id,$pi,$di,$bt=0,$ct=0,$test_code=''){$timestamps = $this->getMillisecond();$time = time();$url = 'http://api2.wlc.nppa.gov.cn/behavior/collection/loginout';if($test_code) {$this->secret_key = 'caebad8c543aa2151b325f9831baa';$this->app_id = '36fce80d09454712bbb7a7c52ec16';$this->biz_id = '1101999999';$url = 'https://wlc.nppa.gov.cn/test/collection/loginout/'.$test_code;}$head = ['appId'=>$this->app_id,'bizId'=>$this->biz_id,'timestamps'=>$timestamps];$header[] = 'Content-Type:application/json;charset=utf-8';$header[] = 'appId:'.$this->app_id;$header[] = 'bizId:'.$this->biz_id;$header[] ='timestamps:'.$timestamps;//这里值得注意 没有collections 也会1011$body['collections'][] = ['no'=>1,'si'=>md5($member_id),'bt'=>$bt,'ot'=>$time,'ct'=>$ct,'pi'=>$pi,'di'=>$di];$data['data'] = $this->bodyEncrypt($body,$this->secret_key);$header[]= 'sign:'. $this->getSign($data,[],$this->secret_key,$head);//请求查询接口$res = $this->reqCurl($url,3,'post',$data,$header);$res = json_decode($res,true);return $res;}//返回当前的毫秒时间戳function getMillisecond(){list($t1, $t2) = explode(' ', microtime());return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);}/*** 对请求报文体进行加密* @param $body* @return string*/function bodyEncrypt($body,$secret_key){$key = hex2bin($secret_key);$cipher = "aes-128-gcm";$ivlen = openssl_cipher_iv_length($cipher);$iv = openssl_random_pseudo_bytes($ivlen);$encrypt = openssl_encrypt(json_encode($body), $cipher, $key, OPENSSL_RAW_DATA,$iv,$tag);return base64_encode(($iv.$encrypt.$tag));}/*** 接口签名* @param $body* @param $query_params*/function getSign($body_data='',$query_params,$secret_key,$header){if(!empty($body_data)) {$encrypted_body = json_encode($body_data);} else {$encrypted_body = '';}$sys_params = $header;$final_params = array_merge($sys_params, $query_params);ksort($final_params);$str_params = '';foreach ($final_params as $k => $v) {$str_params .= $k.$v;}$str_params .= $encrypted_body;$str_params = $secret_key.$str_params;$hash = hash('sha256', $str_params);return $hash;}//自定义curlfunction reqCurl($url,$timeout = 3,$method="get",$body = [],$header=['Content-Type: application/json;charset=utf-8']){$ret = "";$ch = curl_init($url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_HTTPHEADER, $header);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);// https请求 不验证证书和hostscurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);// 从证书中检查SSL加密算法是否存在(默认不需要验证)curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);if($method == "post"){curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));}$buffer = curl_exec($ch);curl_close($ch);if ($buffer === false || empty($buffer)) {$ret = "";} else {$ret = $buffer;}return $ret;}
}

PHP对接网络游戏防沉迷实名认证系统相关推荐

  1. 网络游戏防沉迷实名认证系统- 常见问题02

    网络游戏防沉迷实名认证系统- 常见问题01 51. H5 小游戏或者单机也需要接入该系统吗? 答:所有获得版号且在运营网络游戏都需要接入网络游戏防沉迷实名 认证系统,小游戏平台也可以代为接入. 52. ...

  2. 网络游戏防沉迷实名认证系统常见错误说明

    1.{"errcode":1008,"errmsg":"SYS REQ PARTNER ERROR"} 这是你网络游戏防沉迷实名认证系统还没 ...

  3. 新版网络游戏防沉迷实名认证系统接口_php版本demo_新版防沉迷实名认证

    新版网络游戏防沉迷实名认证系统接口_php版本demo_新版防沉迷实名认证 <?php function aes_128_gcm($data, $key) {         $key = he ...

  4. 网络游戏防沉迷实名认证系统常见错误

    1.SYS REQ PARTNER AUTH ERROR 官方错误信息: 状态码 1011 状态描述 SYS REQ PARTNER AUTH ERROR 接口请求方身份核验错误 这个错误常见原因:应 ...

  5. go实现网络游戏防沉迷实名认证系统AES-128/GCM加密

    加密示例 //访问密钥 secretKey:2836e95fcd10e04b0069bb1ee659955b //待加密数据 {"ai":"test-accountId& ...

  6. 中宣部防沉迷实名认证系统对接实例-JAVA版

    代码转自沟通群里,群号:960656498 ,有需求可以进去沟通一下 ,亲测都能用 ,线上使用时需要修改httpclient, 改成httpClient连接池 import static java.n ...

  7. 国家防沉迷实名认证系统--NODEJS

    [国家防沉迷实名认证系统–NODEJS] 首先是插件引入和常量定义 const https = require('https'); const querystring = require(" ...

  8. 用Node.JS和Think.JS实现的中宣部防沉迷实名认证系统

    开发接口文档巨坑. 很多坑是明显的错误. 现在实现了这个代码,贴在下面.有兴趣的自己下载去试试. const Base = require('./base.js'); const crypto = r ...

  9. 个推青少年网络游戏防沉迷解决方案,助力开发者构建完善的青少年保护系统!

    8月30日,国家新闻出版署下发<关于进一步严格管理 切实防止未成年人沉迷网络游戏的通知>.通知要求,严格限制向未成年人提供网络游戏服务的时间,所有网络游戏企业仅可在周五.周六.周日和法定节 ...

最新文章

  1. 暗时间:开发效率为何如此低下
  2. 中年程序员,有哪些关于保护身体健康的知识分享给同行的你?
  3. Android之解决java.lang.NoSuchMethodError:android.os.powerManager.isInteractive问题
  4. 设计模式--责任链模式--Java实现
  5. 使用div模拟table
  6. 中南民族大学计算机科学学院2011级2014年至2015年度课表,中南民族大学应用心理学专业2012-2013-2学期辅修-双学位课表(2010、2011级)...
  7. Speex manul中文版
  8. OSD(On Screen Display)简介
  9. 全国大学生英语竞赛——题型介绍
  10. 中国知网上html是什么意思,知网上网络首发是什么意思
  11. SEO人员,如何保持创新思维?
  12. 关于rem移动端 html字体大小自适应设置的问题
  13. 2022年网络安全行业的几个关注点
  14. 六十六条经典禅语名句
  15. 关于新光源中我想做的事
  16. 制作elasticsearch 镜像_相册视频制作-相册视频制作App下载-
  17. 【计算机网络】—— HTTP升级为WebSokect
  18. XML Publisher 模板
  19. 爱因斯坦 上楼梯问题 若每步跨2阶,剩1阶 两种方法
  20. 年薪50万以上的人,一般都是什么学历?怎么才能做到年薪50W?

热门文章

  1. 四种方式获取当前电脑的真实IP
  2. Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架...
  3. 扬州大学858程序设计与数据结构专业课(编程题篇)
  4. 图形学基础 | 计算机图形学MOOC学习笔记
  5. 怎么把云服务器的文件拷出来,怎么把云服务器的文件拷出来
  6. 喵的Unity游戏开发之路 - 游泳
  7. python算法工程师-从材料硕士到算法工程师的转行之路,有三不建议
  8. autocad锐龙英特尔_入门级CPU怎么选?请不要再纠结于酷睿和锐龙啦!
  9. C++使用static的错误:无法解析的外部符号、“static”不应在文件范围内定义的成员函数上使用
  10. ZStack云平台应用堡垒机教程