php是最好的语言。用来制作平台认证、充值的功能的时候,很方便编写。游戏服务器的充值一般都是剥离出来的。游戏开发员一般都对外提供一些类似gm指令的接口。而对于充值认证这种和平台相关性很大的东西,使用php来实现。也方便给外界的平台做接口。php的资料是真的多。这里主要将一些技术点收集整理起来(这里只有套路,那这就能用)。最近和一些高级程序员聊天的时候发现,在找错误的时候,大量的问题都是可以通过日志中的异常找到错误的原因。
在http方式中有两种请求方式:GET/POST 二者区别
在做充值验证的时候,常常会涉及到的一些技术:
获得GET/POST的数据
参考
1. $_REQUEST
php中$_REQUEST可以获取以POST方法和GET方法提交的数据,但是速度比较慢
- $_GET
用来获取由浏览器通过GET方法提交的数据。GET方法他是通过把参数数据加在提交表单的action属性所指的URL中,值和表单内每个字段一一对应,然后在URL中可以看到,但是有如下缺点:
安全性不好,在URL中可以看得到
传送数据量较小,不能大于2KB。
$_POST
用来获取由浏览器通过POST方法提交的数据。POST方法他是通过HTTP POST机制,将表单的各个字段放置在HTTP HEADER内一起传送到action属性所指的URL地址中,用户看不到这个过程。他提交的大小一般来说不受限制,但是具体根据服务器的不同,还是略有不同。相对于_GET方式安全性略高
- REQUEST、 _POST、$_GET 的区别和联系
REQUEST["参数"]具用 _POST[“参数”] GET["参数"]的功能,但是 _REQUEST[“参数”]比较慢。通过post和get方法提交的所有数据都可以通过$_REQUEST数组[“参数”]获得
php变量和数据类型
变量参考
里面作用域这块还是有些意思。
数据类型参考
数据结构非常简单,里面的array类型有些像lua的table。可以当数组,也能当map啊。
<?php
echo "hello world\n";
$cars=array("BMW"=>12);
echo $cars["BMW"]."\n";
$p=array(12,312);
echo $p[0];
?>
output:
hello world
12
12
socket client
官方参考文档
网友提供文档
一般都会要通过php来连接游戏服务器来通知发奖之类。
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
自己仿照写的实例:
<?php
set_time_limit(0);
error_reporting(E_ALL);
$port = 1935;
$ip = "127.0.0.1";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
echo "OK.\n";
}
$result = socket_connect($socket, $ip, $port);
if(!socket_write($socket, $in, strlen($in))) {
echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}
$out = socket_read($socket, 8192);
?>
处理二进制数据
<?php
$binarydata = pack("nvc*", 0x1234, 0x5678, 65, 66);
?>
这个用法很像python里面的pack用法。
sha1
<?php
$str = "Shanghai";
echo sha1($str);
if (sha1($str) == "b99463d58a5c8372e6adbdca867428961641cb51")
{
echo "<br>I love Shanghai!";
exit;
}
?>
md5验签
<?php
define("KEY", "c1b2a5ea17d4600a80147f35d94681ac");
function checkToken($token,$uid,$c_sign)
{
$sign=md5($token.$uid.KEY);
return $sign==$c_sign;
}
?>
mysql用法
php直接内置了mysql操作的函数
w3school参考
直接贴例子
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
?>
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons ORDER BY age");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
echo " " . $row['LastName'];
echo " " . $row['Age'];
echo "<br />";
}
mysql_close($con);
?>
msgpack-for-php
homesite
PHP 5.0 +
Install
Install from PECL
Msgpack is an PECL extension, thus you can simply install it by:
pecl install msgpack
Compile Msgpack from source
$/path/to/phpize
$./configure
$make && make install
Example
<?php
$data = array(0=>1,1=>2,2=>3);
$msg = msgpack_pack($data);
$data = msgpack_unpack($msg);
?>
rsa 签名
<?php
/**
* 验证签名
* @param $prestr 需要签名的字符串
* @param $sign 签名结果
* return 签名结果
*/
function rsaVerify($prestr, $sign) {
$sign = base64_decode($sign);
$public_key= file_get_contents('rsa_public_key.pem');
$pkeyid = openssl_get_publickey($public_key);
if ($pkeyid) {
$verify = openssl_verify($prestr, $sign, $pkeyid);
openssl_free_key($pkeyid);
}
if($verify == 1){
return true;
}else{
return false;
}
}
?>