notify.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. /**
  3. * vivo后台通知接收窗口
  4. * @version
  5. * 1.0.0 Created at 2018-3-3. by --gwang
  6. * @author gwang (mail@wanggangzero.cn)
  7. * @copyright ? 2018-3-3, SJZ LoyalSoft Corporation & gwang. All rights reserved.
  8. */
  9. include_once __DIR__ . '/../../../main.php'; # 导入game utils
  10. include_once __DIR__ . '/../Mo/resp.php'; # 导入通用返回值结构
  11. include_once __DIR__ . '/../Mo/payRequest.php'; # 导入通用订单请求结构
  12. require_once __DIR__ . '/../Mo/OrderNotice.php'; # 统一订单结构
  13. require_once __DIR__ . '/config_vivo.php';
  14. use loyalsoft\CLog;
  15. use loyalsoft\JsonUtil;
  16. use loyalsoft\HttpUtil;
  17. use loyalsoft\pay\OrderNotice;
  18. try {
  19. CLog::pay("[notify.vivo] 收到支付回调请求: " . HttpUtil::getQueryString());
  20. $cfg = config_vivo::Inst(); # 配置信息
  21. $params = HttpUtil::getQueryParas(); # 提取参数
  22. $sign = $params['signature']; # 提取签名
  23. $vSign = $cfg->vivo_sign($params);
  24. if ($sign != $vSign) { # 验证签名
  25. CLog::pay("[notify.vivo] 验签失败");
  26. CLog::pay("[notify.vivo]" . "[签名原文]:" . $sign);
  27. CLog::pay("[notify.vivo]" . "[签名结果]:" . $vSign);
  28. exit('{"err":1001,"msg":"Invalied sign!"}'); # 退出
  29. }
  30. $order = OrderNotice::Parse_vivoOrder($params); # 将参数归一化到order
  31. if ($order != null) {
  32. if ($order->Check()) { # 订单校验, 1代表支付成功
  33. if ($order->status == 1) { # 订单状态是成功
  34. $order->UpdateOrderStatus(); # 更新订单状态,->已付款
  35. CLog::pay("[notify.vivo] [发货] 订单: " . $order->cpOrderId . ", 金额: " . $order->amount);
  36. } else if ($order->status == 2) { # status为2(failed)的情况
  37. $order->UpdateOrderStatus(); # 直接更新订单状态,->支付失败
  38. CLog::pay("[notify.vivo] [不发货] 订单: " . $order->cpOrderId);
  39. } else {
  40. echo 'FAILURE';
  41. CLog::pay("[notify.vivo][处理结果]: FAILURE (未知的支付状态)"); # 日志
  42. return;
  43. }
  44. echo 'SUCCESS'; //返回给sdk server的响应内容
  45. CLog::pay("[notify.vivo][处理结果]:" . "SUCCESS"); # 日志
  46. return;
  47. }
  48. }
  49. CLog::pay("[notify.vivo][处理结果]:" . "FAILURE"); # 日志
  50. echo 'FAILURE'; //返回给sdk server的响应内容 ,对于重复多次通知失败的订单,请参考文档中通知机制。
  51. return;
  52. } catch (Exception $e) {
  53. CLog::pay("[notify.vivo]" . $e->getMessage()); # 日志
  54. throw new exception($e->getMessage());
  55. }