国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
6.3KB

  1. <?php
  2. /**
  3. * 支付回调
  4. *
  5. * @version $id:notify.php$
  6. * @package DedeBIZ.Site
  7. * @copyright Copyright (c) 2023 DedeBIZ.COM
  8. * @license https://www.dedebiz.com/license
  9. * @link https://www.dedebiz.com
  10. */
  11. require_once(dirname(__FILE__)."/../system/common.inc.php");
  12. $dopost = isset($dopost)? $dopost : '';
  13. $buyid = isset($out_trade_no)? HtmlReplace($out_trade_no, 1) : '';
  14. if ($dopost === 'alipay') {
  15. $moRow = $dsql->GetOne("SELECT * FROM `#@__member_operation` WHERE buyid='$buyid'");
  16. if (empty($moRow)) {
  17. ShowMsg("订单查询错误,请确保是您自己发起的订单", "javascript:;");
  18. exit;
  19. }
  20. if ($moRow['sta'] == 2) {
  21. ShowMsg("已完成支付,无需重复付款", "javascript:;");
  22. exit;
  23. }
  24. $pInfo = $dsql->GetOne("SELECT * FROM `#@__sys_payment` WHERE id = 2");
  25. $pData = (array)json_decode($pInfo['config']);
  26. $config = array(
  27. "sign_type" => $pData['SignType'],
  28. "appid" => $pData['APPID'],
  29. "private_key" => $pData['PrivateKey'],
  30. "public_key" => $pData['CertPublicKey'],
  31. );
  32. //支付宝
  33. try {
  34. //实例支付对象
  35. $pay = \AliPay\Web::instance($config);
  36. unset($_REQUEST['dopost']);
  37. unset($_REQUEST['sign_type']);
  38. $data = $pay->notify(false, $_REQUEST);
  39. if (isset($data['trade_no']) && !empty($data['trade_no'])) {
  40. //$pay = \AliPay\Transfer::instance($config);
  41. $result = $pay->query($data['out_trade_no']);
  42. if ($result['trade_status']=== "TRADE_SUCCESS") {
  43. if ($moRow['product'] === "card") {
  44. $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
  45. $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
  46. $dsql->ExecuteNoneQuery($query);
  47. $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '{$moRow['mid']}'";
  48. $dsql->ExecuteNoneQuery($query);
  49. } else if ($moRow['product'] === "member") {
  50. $row = $dsql->GetOne("SELECT * FROM `#@__member_type` WHERE aid='{$moRow['pid']}'");
  51. $rank = $row['rank'];
  52. $exptime = $row['exptime'];
  53. $rs = $dsql->GetOne("SELECT uptime,exptime FROM `#@__member` WHERE mid='".$moRow['mid']."'");
  54. if ($rs['uptime']!=0 && $rs['exptime']!=0) {
  55. $nowtime = time();
  56. $mhasDay = $rs['exptime'] - ceil(($nowtime - $rs['uptime'])/3600/24) + 1;
  57. $mhasDay=($mhasDay>0)? $mhasDay : 0;
  58. }
  59. $memrank = $dsql->GetOne("SELECT money,scores FROM `#@__arcrank` WHERE `rank`='$rank'");
  60. //更新会员信息
  61. $sqlm = "UPDATE `#@__member` SET `rank`='$rank',`money`=`money`+'{$memrank['money']}',scores=scores+'{$memrank['scores']}',exptime='$exptime'+'$mhasDay',uptime='".time()."' WHERE mid='".$moRow['mid']."'";
  62. $sqlmo = "UPDATE `#@__member_operation` SET sta='2',oldinfo='会员升级成功' WHERE buyid='{$moRow['pid']}' ";
  63. if (!($dsql->ExecuteNoneQuery($sqlm) && $dsql->ExecuteNoneQuery($sqlmo))) {
  64. ShowMsg("升级会员失败", "javascript:;");
  65. exit;
  66. }
  67. }
  68. ShowMsg("已经完成付款", $cfg_memberurl."/index.php");
  69. exit;
  70. }
  71. } else {
  72. ShowMsg("尚未完成付款操作", $cfg_memberurl."/index.php");
  73. exit;
  74. }
  75. } catch (Exception $e) {
  76. ShowMsg("付款错误", "javascript:;");
  77. exit;
  78. }
  79. } else if ($dopost === 'wechat') {
  80. $pInfo = $dsql->GetOne("SELECT * FROM `#@__sys_payment` WHERE id = 1");
  81. $pData = (array)json_decode($pInfo['config']);
  82. $config = array(
  83. "appid" => $pData['AppID'],
  84. "mch_id" => $pData['MchID'],
  85. "mch_key" => $pData['APIv2Secret'],
  86. );
  87. $wechat = new \WeChat\Pay($config);
  88. $data = $wechat->getNotify();
  89. if ($data['return_code'] === 'SUCCESS' && $data['result_code'] === 'SUCCESS') {
  90. $buyid = $data['out_trade_no'];
  91. $moRow = $dsql->GetOne("SELECT * FROM `#@__member_operation` WHERE buyid='$buyid'");
  92. if (empty($moRow)) {
  93. ShowMsg("订单查询错误,请确保是您自己发起的订单", "javascript:;");
  94. exit;
  95. }
  96. if ($moRow['product'] === "card") {
  97. $row = $dsql->GetOne("SELECT * FROM `#@__moneycard_type` WHERE tid='{$moRow['pid']}'");
  98. $query = "UPDATE `#@__member_operation` SET sta = '2' WHERE buyid = '$buyid'";
  99. $dsql->ExecuteNoneQuery($query);
  100. $query = "UPDATE `#@__member` SET money = money+{$row['num']} WHERE mid = '{$moRow['mid']}'";
  101. $dsql->ExecuteNoneQuery($query);
  102. } else if ($moRow['product'] === "member") {
  103. $row = $dsql->GetOne("SELECT * FROM `#@__member_type` WHERE aid='{$moRow['pid']}'");
  104. $rank = $row['rank'];
  105. $exptime = $row['exptime'];
  106. $rs = $dsql->GetOne("SELECT uptime,exptime FROM `#@__member` WHERE mid='".$moRow['mid']."'");
  107. if ($rs['uptime']!=0 && $rs['exptime']!=0) {
  108. $nowtime = time();
  109. $mhasDay = $rs['exptime'] - ceil(($nowtime - $rs['uptime'])/3600/24) + 1;
  110. $mhasDay=($mhasDay>0)? $mhasDay : 0;
  111. }
  112. $memrank = $dsql->GetOne("SELECT money,scores FROM `#@__arcrank` WHERE `rank`='$rank'");
  113. //更新会员信息
  114. $sqlm = "UPDATE `#@__member` SET `rank`='$rank',`money`=`money`+'{$memrank['money']}',scores=scores+'{$memrank['scores']}',exptime='$exptime'+'$mhasDay',uptime='".time()."' WHERE mid='".$moRow['mid']."'";
  115. $sqlmo = "UPDATE `#@__member_operation` SET sta='2',oldinfo='会员升级成功' WHERE buyid='{$moRow['pid']}' ";
  116. if (!($dsql->ExecuteNoneQuery($sqlm) && $dsql->ExecuteNoneQuery($sqlmo))) {
  117. ShowMsg("升级会员失败", "javascript:;");
  118. exit;
  119. }
  120. }
  121. echo "success";
  122. exit;
  123. } else {
  124. echo "error";
  125. exit;
  126. }
  127. } else {
  128. ShowMsg("未知支付方式", "javascript:;");
  129. exit;
  130. }
  131. ?>