首页

PHP写国内游戏实名防沉迷接口的坑

因为公司要上国内的游戏,根据要求必须接入国家防沉迷系统api,他们的登录地址为 https://wlc.nppa.gov.cn/fcm_company/index.html#/login 看了下文档应该并不难就直接上手了,php写两个接口还不是手拿把掐,结果给了我一大逼兜。 首先是接入前要先接测试,请求测试接口是同事写的,C#搞了一阵跟我吐槽说有坑但是有惊无险过了,轮到我接正式API却卡住了。 先是签名问题。 文档里写的签名方法是AES-128/GCM + BASE64算法加密,却没有明说加密的用的key需要转二进制。这里反复尝试被卡了几个小时,问写C#的同事是他们的库就是直接用,php这边需要先hex2bin(防沉迷提供的secret),然后用加密方法openssl_encrypt(要加密的字符串,'aes-128-gcm',二进制的secret,OPENSSL_RAW_DATA,12位随机字符串,''),加密结果再base64_encode。 然后是json字符串的坑。 php的json方法主要是json_encode和json_decode,坏就坏在json_encode函数在转换json字符的时候会默认把汉字转为unicode编码并且转义/斜杠。我用他们的调试后台反复调试都没问题,一旦项目上线就会报错。最后发现header也好,请求的加密参数也好,都必须在处理json的时候加上JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE,也就是json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); 此外他们的接口限制也很多,比如晚上0点-4点接口是要”休息“的,请求不了。除了强制实名认证外还要上报玩家上下线时间,并且做了严格的请求频率限制,诸如此类。
更多>>
linux下校验系统镜像ISO文件完整性 服务器报 -bash: cannot create temp file for here-document: No space left on device wget -O覆盖文件的教训 为什么苹果开发者不续费了会影响已经上架的app内购? docker容器修改时区