Ziyou.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. /**
  3. * 自由网络子渠道对接
  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 Ziyou extends Complex {
  11. protected $channel_mark = 'ziyou';
  12. /**
  13. * 支付处理
  14. */
  15. public function pay()
  16. {
  17. /*
  18. $_POST['orderID'] = 'abc2321321312321321'; //下级渠道的订单号
  19. $_POST['deviceType'] = '1';
  20. $_POST['channelType'] = '8888';
  21. $_POST['uid'] = '100001';
  22. $_POST['amount'] = $amount = 1;
  23. $_POST['time'] = '12345633632';
  24. $_POST['gameRoleID'] = 'roleid';
  25. $_POST['gameServerID'] = 'serverid';
  26. $_POST['extrasParams'] = 'extdf234324324';
  27. $_POST['cpOrderID'] = $attach = 'CMXK16082725923145729855'; //这个才是自己聚合层(本级)的订单编号
  28. $_POST['sign'] = $sign = '211111111';
  29. */
  30. if (empty($_POST)) {
  31. die('请求内容为空');
  32. }
  33. $params = array();
  34. $params['orderID'] = $orderid = $_POST['orderID']; //下级渠道的订单号
  35. $params['deviceType'] = $_POST['deviceType'];
  36. $params['channelType'] = $_POST['channelType'];
  37. $params['uid'] = trim($_POST['uid']);
  38. $params['amount'] = $amount = $_POST['amount'];
  39. $params['time'] = $paytime = $_POST['time'];
  40. $params['gameRoleID'] = $_POST['gameRoleID'];
  41. $params['gameServerID'] = $_POST['gameServerID'];
  42. $params['extrasParams'] = $_POST['extrasParams'];
  43. $params['cpOrderID'] = $attach = $_POST['cpOrderID']; //这个才是自己聚合层(本级)的订单编号
  44. $params['sign'] = $sign = $_POST['sign'];
  45. if(!$this->checkOrder($attach,$amount)){
  46. log_message('订单不存在或订单金额不一致,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  47. die('FAIL:订单不存在或订单金额不一致');
  48. }
  49. $polyChannelGameModel = new PolychannelGame;
  50. $param = $polyChannelGameModel->where(['game_id'=>$this->payInfo['gameid'],'channel_id'=>$this->payInfo['channel_id']])->value('param');
  51. if(empty($param)){
  52. log_message('后台渠道游戏中,用于该游戏的验签参数还未设置,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  53. die('FAIL:用于验签的参数还未设置');
  54. }
  55. $gameid = $this->payInfo['gameid'];
  56. $param = unserialize($param);
  57. $appkey = $param[$gameid];
  58. $thisSign = $this->sign($params,$appkey);
  59. if ($sign != $thisSign) {
  60. log_message('签名校验失败,参数:'.$thisSign.' 生成的签名thisSign='.$thisSign.' 对方的签名:'.$sign,'error',LOG_PATH . '../complexPaylog/');
  61. die('FAIL:签名校验失败 ' . $thisSign);
  62. }
  63. // 启动事务
  64. Db::startTrans();
  65. try{
  66. $this->updateOrder($attach,$orderid,$paytime);
  67. // 提交事务
  68. Db::commit();
  69. }
  70. catch (\Exception $e) {
  71. // 回滚事务
  72. Db::rollback();
  73. die('FAIL:订单生成失败'.$e->getMessage());
  74. }
  75. // 【产品确认:测试阶段暂时不用通知CP】通知CP,支付成功
  76. (new PayCallback())->callBackToCp($attach);
  77. die('SUCCESS');
  78. }
  79. /**
  80. * 二次登录验证
  81. */
  82. public function checklogin()
  83. {
  84. /*
  85. $_POST['uid'] = '100073';
  86. $_POST['token'] = 'fdsfdsfdsfds122211';
  87. */
  88. if (empty($_POST)) {
  89. die('请求内容为空');
  90. }
  91. $params = array();
  92. $params['uid'] = trim($_POST['uid']);
  93. $params['token'] = trim($_POST['token']);
  94. $checkUrl = 'http://qzf.zugame.com/user/verify';
  95. $response = get_http_response($checkUrl, http_build_query($params));
  96. die($response);
  97. }
  98. private function sign($param, $key){
  99. $param = array_filter($param, function ($v, $k) {
  100. if ($k !== 'sign_type' && $k !== 'sign' && $v !== '') {
  101. return true;
  102. }
  103. }, ARRAY_FILTER_USE_BOTH);
  104. ksort($param);
  105. reset($param);
  106. $signStr = '';
  107. foreach ($param as $k => $v) {
  108. if(!empty($v)){
  109. $signStr .= $k . '=' . $v . '&';
  110. }
  111. }
  112. if (get_magic_quotes_gpc()) {
  113. $signStr = stripslashes($signStr);
  114. }
  115. // echo $signStr . $key;
  116. return md5($signStr . $key);
  117. }
  118. }