notify.php 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. ini_set('date.timezone', 'Asia/Shanghai');
  3. error_reporting(E_ERROR);
  4. /**
  5. * 接收YSDK服务端的通知(发货(元宝)并扣除游戏币)
  6. * @version
  7. * 1.0.0 Created at 2017-12-30. by --gwang
  8. * @author gwang (mail@wanggangzero.cn)
  9. * @copyright ? 2017-12-30, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  10. *
  11. */
  12. // 导入应用宝支付库
  13. require_once __DIR__ . '/ysdks/Api.php';
  14. require_once __DIR__ . '/ysdks/Ysdk.php';
  15. require_once __DIR__ . '/ysdks/Payments.php';
  16. // 导入游戏自定义库
  17. include_once __DIR__ . '/../../../main.php'; # 导入game utils
  18. include_once __DIR__ . '/../Mo/payResp.php'; # 导入通用返回值结构
  19. include_once __DIR__ . '/../Mo/payRequest.php'; # 导入通用返回值结构
  20. require_once __DIR__ . '/../Mo/OrderNotice.php';
  21. require_once 'config.yyb.php'; # 配置文件
  22. // 签名算法
  23. use loyalsoft\CLog;
  24. use loyalsoft\HttpUtil;
  25. use loyalsoft\pay\OrderNotice;
  26. $tag = "[notify.yyb]"; # 日志标签
  27. try {
  28. CLog::pay("$tag 收到支付回调: " . HttpUtil::getQueryString());
  29. $params = HttpUtil::getQueryParas(); # 提取参数
  30. // v3验签
  31. $method = $_SERVER['REQUEST_METHOD']; # 腾讯的请求方法
  32. $url = $_SERVER["REQUEST_URI"];
  33. $cfg = config_for_yyb::Inst('qq'); # 这里不知道是来自微信还是QQ,都用QQ的appkey
  34. $sig_new = "";
  35. // CLog::pay($tag . ": $method $url");
  36. // $sig = urldecode($params['sig']);
  37. // CLog::pay($tag . "sig: $sig");
  38. // if (!$cfg->cee_verify_sig($method, $params, $url, $sig_new)) { # v3签名校验失败!
  39. // CLog::pay("$tag v3签名校验失败! $sig_new");
  40. // exit(payResp::err(3, 'v3签名校验失败'));
  41. // }
  42. // $par = new YSDK_Notify_m();
  43. // loyalsoft\CommUtil::loadObject($params, $par); # 转换
  44. $order = OrderNotice::Parse_ysdkOrder($params); # 将参数归一化到order
  45. if ($order != null) {
  46. if ($order->Check()) { # 订单校验, 1代表支付成功
  47. if ($order->status == 1) { # 订单状态是成功
  48. $order->UpdateOrderStatus(); # 更新订单状态,->已付款
  49. echo payResp::ok();
  50. loyalsoft\TapDBUtil::PushPayEvent($order, 'yyb'); # 向tapdb推送充值记录
  51. CLog::pay("$tag [发货] 订单: " . $order->cpOrderId . ", 金额: " . $order->amount);
  52. } else if ($order->status == 2) { # status为2(failed)的情况
  53. $order->UpdateOrderStatus(); # 直接更新订单状态,->支付失败
  54. echo payResp::err(999, 'closed!'); # ps. 与曹强约定999代表成功取消订单
  55. CLog::pay("$tag [不发货] 订单: " . $order->cpOrderId);
  56. } else {
  57. echo payResp::err(-1, '未知的支付状态');
  58. CLog::pay("$tag [处理结果]: FAILURE (未知的支付状态)"); # 日志
  59. }
  60. } else {
  61. CLog::pay("$tag [处理结果]:" . "FAILURE 后台订单校验失败"); # 日志
  62. echo payResp::err(1, '后台订单校验失败');
  63. }
  64. } else { # 请求参数
  65. CLog::pay("$tag [处理结果]:" . "FAILURE 通知参数提取失败"); # 日志
  66. echo payResp::err(1, '通知参数解析失败!');
  67. }
  68. } catch (Exception $e) {
  69. CLog::pay($tag . $e->getMessage()); # 日志
  70. echo payResp::err(2, $e->getMessage());
  71. }