Xigu.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /**
  3. * 溪谷APP支付接口控制器
  4. *
  5. */
  6. namespace app\complex\controller;
  7. use app\common\model\PolychannelGame;
  8. use app\common\logic\PayCallback;
  9. use think\Db;
  10. class Xigu extends Complex {
  11. protected $channel_mark = 'xigu';
  12. /**
  13. * 初始化操作
  14. */
  15. public function _initialize() {
  16. log_message('=== '.$this->channel_mark.' --请求参数记录==='.json_encode($_POST),'log',LOG_PATH . '../complexPaylog/');
  17. }
  18. /**
  19. * 支付处理
  20. */
  21. public function pay()
  22. {
  23. if (empty($_POST)) {
  24. die('请求内容为空');
  25. }
  26. $orderid = urldecode($_POST['out_trade_no']); //下级渠道的订单号
  27. $username = urldecode($_POST['user_id']);
  28. $status = urldecode($_POST['pay_status']);
  29. $signType = urldecode($_POST['signType']);
  30. $amount = urldecode($_POST['price']);
  31. $attach = urldecode($_POST['extend']); //这个才是自己聚合层(本级)的订单编号
  32. $sign = urldecode($_POST['sign']);
  33. if(!$this->checkOrder($attach,$amount)){
  34. log_message('订单不存在或订单金额不一致,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  35. die('订单不存在或订单金额不一致');
  36. }
  37. $polyChannelGameModel = new PolychannelGame;
  38. $param = $polyChannelGameModel->where(['game_id'=>$this->payInfo['gameid'],'channel_id'=>$this->payInfo['channel_id']])->value('param');
  39. if(empty($param)){
  40. log_message('后台渠道游戏中,用于该游戏的验签参数还未设置,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  41. die('用于验签的参数还未设置');
  42. }
  43. $param = unserialize($param);
  44. $appkey = $param[$gameid];
  45. $str = $orderid.$amount."1".$attach.$appkey;
  46. $thisSign = md5($str);
  47. if ($sign != $thisSign) {
  48. log_message('签名校验失败,参数:'.$str.' 生成的签名thisSign='.$thisSign.' 对方的签名:'.$sign,'error',LOG_PATH . '../complexPaylog/');
  49. die('签名校验失败 ' . $thisSign);
  50. }
  51. // 启动事务
  52. Db::startTrans();
  53. try{
  54. $this->updateOrder($attach,$orderid,time());
  55. // 提交事务
  56. Db::commit();
  57. }
  58. catch (\Exception $e) {
  59. // 回滚事务
  60. Db::rollback();
  61. die('订单生成失败'.$e->getMessage());
  62. }
  63. // 【产品确认:测试阶段暂时不用通知CP】通知CP,支付成功
  64. (new PayCallback())->callBackToCp($attach);
  65. die('success');
  66. }
  67. }