客户端在支付前需调用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()); # 日志 }