客户端在支付前需调用CP服务端的签名生成方法,CP服务端将签名返回给客户端
*
注意:此类主要为示例签名计算方法
*
具体实现需要CP依据自己与客户端通信的协议加密处理等,避免安全性问题
*/
// 导入uc_sdk
require_once __DIR__ . '/service/SDKServerService.php';
require_once __DIR__ . '/model/SDKException.php';
require_once __DIR__ . '/util/ConfigHelper.php';
require_once __DIR__ . '/util/LoggerHelper.php';
// 导入自定义库
include_once __DIR__ . '/../../../main.php'; # 导入game库
require_once __DIR__ . '/../Mo/payRequest.php'; # 导入通用订单请求结构
require_once __DIR__ . '/../Mo/resp.php'; # 导入通用返回值结构
use loyalsoft\HttpUtil;
use loyalsoft\JsonUtil;
use loyalsoft\CLog;
try {
HttpUtil::PostOnly(); # 要求客户端必须以post方式提交数据
$str = HttpUtil::getQueryString();
// $str = gzinflate($str);
$data = JsonUtil::decode($str); # 提取请求参数
CLog::pay("[uc.pay.php] 请求签名:" . $str); # 日志
$req = new PayRequest($data);
if ($req != null) {
$baseService = new BaseSDKService();
$notInKey = array("roleName", "roleId", "grade", // # 定义签名时排除在外的key,即:指定key不参与签名
"serverId", "signType", "sign");
// $req->notifyUrl = ConfigHelper::getStrVal("sdkserver.game.notifyUrl"); // 采用智能提取方法
$signSource = $baseService->getSignDataWithoutNotInKey($req->uc_GetData2Sign(), $notInKey)
. ConfigHelper::getStrVal("sdkserver.game.apikey"); # 组装签名原文
$req->sign = md5($signSource); # MD5加密签名
if ($req->InserDataBase()) { # 将订单数据写入数据库
echo Resp::ok($req); # 修改返回值,只返回签名数据
CLog::pay("[uc.pay.php] 创建订单:" . $req); # 日志
} else {
echo Resp::err(1, "创建订单失败!");
CLog::pay("[uc.pay.php] 创建订单失败:" . $req); # 日志
}
} else {
echo Resp::err(1, "提取参数异常");
CLog::pay("[uc.pay.php] 提取参数异常:"); # 日志
}
} catch (SDKException $e) {
echo Resp::err($e->getCode(), $e->getMessage());
CLog::pay("[uc.pay.php] :" . $e->getMessage()); # 日志
}