12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <?php
- ini_set('date.timezone', 'Asia/Shanghai');
- error_reporting(E_ERROR);
- /**
- * 接收YSDK服务端的通知(发货(元宝)并扣除游戏币)
- * @version
- * 1.0.0 Created at 2017-12-30. by --gwang
- * @author gwang (mail@wanggangzero.cn)
- * @copyright ? 2017-12-30, SJZ LoyalSoft Corporation & gwang. All rights reserved.
- *
- */
- // 导入应用宝支付库
- require_once __DIR__ . '/ysdks/Api.php';
- require_once __DIR__ . '/ysdks/Ysdk.php';
- require_once __DIR__ . '/ysdks/Payments.php';
- // 导入游戏自定义库
- include_once __DIR__ . '/../../../main.php'; # 导入game utils
- include_once __DIR__ . '/../Mo/payResp.php'; # 导入通用返回值结构
- include_once __DIR__ . '/../Mo/payRequest.php'; # 导入通用返回值结构
- require_once __DIR__ . '/../Mo/OrderNotice.php';
- require_once 'config.yyb.php'; # 配置文件
- // 签名算法
- use loyalsoft\CLog;
- use loyalsoft\HttpUtil;
- use loyalsoft\pay\OrderNotice;
- $tag = "[notify.yyb]"; # 日志标签
- try {
- CLog::pay("$tag 收到支付回调: " . HttpUtil::getQueryString());
- $params = HttpUtil::getQueryParas(); # 提取参数
- // v3验签
- $method = $_SERVER['REQUEST_METHOD']; # 腾讯的请求方法
- $url = $_SERVER["REQUEST_URI"];
- $cfg = config_for_yyb::Inst('qq'); # 这里不知道是来自微信还是QQ,都用QQ的appkey
- $sig_new = "";
- // CLog::pay($tag . ": $method $url");
- // $sig = urldecode($params['sig']);
- // CLog::pay($tag . "sig: $sig");
- // if (!$cfg->cee_verify_sig($method, $params, $url, $sig_new)) { # v3签名校验失败!
- // CLog::pay("$tag v3签名校验失败! $sig_new");
- // exit(payResp::err(3, 'v3签名校验失败'));
- // }
- // $par = new YSDK_Notify_m();
- // loyalsoft\CommUtil::loadObject($params, $par); # 转换
- $order = OrderNotice::Parse_ysdkOrder($params); # 将参数归一化到order
- if ($order != null) {
- if ($order->Check()) { # 订单校验, 1代表支付成功
- if ($order->status == 1) { # 订单状态是成功
- $order->UpdateOrderStatus(); # 更新订单状态,->已付款
- echo payResp::ok();
- loyalsoft\TapDBUtil::PushPayEvent($order, 'yyb'); # 向tapdb推送充值记录
- CLog::pay("$tag [发货] 订单: " . $order->cpOrderId . ", 金额: " . $order->amount);
- } else if ($order->status == 2) { # status为2(failed)的情况
- $order->UpdateOrderStatus(); # 直接更新订单状态,->支付失败
- echo payResp::err(999, 'closed!'); # ps. 与曹强约定999代表成功取消订单
- CLog::pay("$tag [不发货] 订单: " . $order->cpOrderId);
- } else {
- echo payResp::err(-1, '未知的支付状态');
- CLog::pay("$tag [处理结果]: FAILURE (未知的支付状态)"); # 日志
- }
- } else {
- CLog::pay("$tag [处理结果]:" . "FAILURE 后台订单校验失败"); # 日志
- echo payResp::err(1, '后台订单校验失败');
- }
- } else { # 请求参数
- CLog::pay("$tag [处理结果]:" . "FAILURE 通知参数提取失败"); # 日志
- echo payResp::err(1, '通知参数解析失败!');
- }
- } catch (Exception $e) {
- CLog::pay($tag . $e->getMessage()); # 日志
- echo payResp::err(2, $e->getMessage());
- }
|