Shunyouanr.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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 Shunyouanr extends Complex {
  11. protected $channel_mark = 'shunyou';
  12. /**
  13. * 支付处理
  14. */
  15. public function pay()
  16. {
  17. if (empty($_POST)) {
  18. die('请求内容为空');
  19. }
  20. $orderid = urldecode($_POST['orderid']); //下级渠道的订单号
  21. $username = urldecode($_POST['username']);
  22. $gameid = urldecode($_POST['gameid']);
  23. $roleid = urldecode($_POST['roleid']);
  24. $serverid = urldecode($_POST['serverid']);
  25. $paytype = urldecode($_POST['paytype']);
  26. $amount = urldecode($_POST['amount']);
  27. $paytime = urldecode($_POST['paytime']);
  28. $attach = urldecode($_POST['attach']); //这个才是自己聚合层(本级)的订单编号
  29. $sign = urldecode($_POST['sign']);
  30. if(!$this->checkOrder($attach,$amount)){
  31. log_message('订单不存在或订单金额不一致,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  32. die('订单不存在或订单金额不一致');
  33. }
  34. $polyChannelGameModel = new PolychannelGame;
  35. $param = $polyChannelGameModel->where(['game_id'=>$this->payInfo['gameid'],'channel_id'=>$this->payInfo['channel_id']])->value('param');
  36. if(empty($param)){
  37. log_message('后台渠道游戏中,用于该游戏的验签参数还未设置,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  38. die('用于验签的参数还未设置');
  39. }
  40. $param = unserialize($param);
  41. $appkey = $param[$gameid];
  42. $str = "orderid=".urlencode($orderid)."&username=".urlencode($username)."&gameid=".urlencode($gameid)."&roleid=".urlencode($roleid)."&serverid=".urlencode($serverid)."&paytype=".urlencode($paytype)."&amount=".$amount."&paytime=".$paytime."&attach=".urlencode($attach);
  43. $str.= "&appkey=".urlencode($appkey);
  44. $thisSign = md5($str);
  45. if ($sign != $thisSign) {
  46. log_message('签名校验失败,参数:'.$str.' 生成的签名thisSign='.$thisSign.' 对方的签名:'.$sign,'error',LOG_PATH . '../complexPaylog/');
  47. die('签名校验失败 ' . $thisSign);
  48. }
  49. // 启动事务
  50. Db::startTrans();
  51. try{
  52. $this->updateOrder($attach,$orderid,$paytime);
  53. // 提交事务
  54. Db::commit();
  55. }
  56. catch (\Exception $e) {
  57. // 回滚事务
  58. Db::rollback();
  59. die('订单生成失败'.$e->getMessage());
  60. }
  61. // 【产品确认:测试阶段暂时不用通知CP】通知CP,支付成功
  62. (new PayCallback())->callBackToCp($attach);
  63. die('success');
  64. }
  65. /**
  66. * 二次登录验证
  67. */
  68. public function checklogin()
  69. {
  70. /*
  71. $_POST['username'] = '100073';
  72. $_POST['memkey'] = '122211';
  73. $_POST['gameid'] = '123213213';
  74. */
  75. if (empty($_POST)) {
  76. die('请求内容为空');
  77. }
  78. $username = trim($_POST['username']);
  79. $memkey = trim($_POST['memkey']);
  80. $gameid = trim($_POST['gameid']);
  81. $checkUrl = 'http://sdkapi.pdl188.com/islogin.php';
  82. $response = get_http_response($checkUrl, http_build_query(['username'=>$username,'memkey'=>$memkey,'gameid'=>$gameid]));
  83. // var_dump($response);
  84. die($response);
  85. }
  86. }