notify.php 3.2 KB

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