1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- <?php
- /**
- * 九游创建预订单
- * 支付前客户端签名计算服务类
- * <br>客户端在支付前需调用CP服务端的签名生成方法,CP服务端将签名返回给客户端
- * <br><b>注意:此类主要为示例签名计算方法</b>
- * <br>具体实现需要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/payResp.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 payResp::ok($req); # 修改返回值,只返回签名数据
- CLog::pay("[uc.pay.php] 创建订单:" . $req); # 日志
- } else {
- echo payResp::err(1, "创建订单失败!");
- CLog::pay("[uc.pay.php] 创建订单失败:" . $req); # 日志
- }
- } else {
- echo payResp::err(1, "提取参数异常");
- CLog::pay("[uc.pay.php] 提取参数异常:"); # 日志
- }
- } catch (SDKException $e) {
- echo payResp::err($e->getCode(), $e->getMessage());
- CLog::pay("[uc.pay.php] :" . $e->getMessage()); # 日志
- }
|