Fengteng.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  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 Fengteng extends Complex {
  11. protected $channel_mark = 'fengteng';
  12. /**
  13. * 支付处理
  14. */
  15. public function pay()
  16. {
  17. if (empty($_POST)) {
  18. die('请求内容为空');
  19. }
  20. $params = array();
  21. $params['m_order_no'] = $orderid = $_POST['m_order_no']; //下级渠道的订单号
  22. $params['tm'] = $_POST['tm'];
  23. $params['cchid'] = $_POST['cchid'];
  24. $params['appid'] = $appid = trim($_POST['appid']);
  25. $params['paid_amt'] = $amount = $_POST['paid_amt'];
  26. $params['paid_state'] = $_POST['paid_state'];
  27. $params['paid_time'] = $paytime = $_POST['paid_time'];
  28. $params['openid'] = $_POST['openid'];
  29. $params['server_id'] = $_POST['server_id'];
  30. $params['server_name'] = urldecode($_POST['server_name']);
  31. $params['role_id'] = $_POST['role_id'];
  32. $params['role_name'] = urldecode($_POST['role_name']);
  33. $params['product_id'] = $_POST['product_id'];
  34. $params['product_name'] = urldecode($_POST['product_name']);
  35. $params['cp_ext'] = $_POST['cp_ext'];
  36. $params['is_test'] = $_POST['is_test'];
  37. $params['cp_order_no'] = $attach = $_POST['cp_order_no']; //这个才是自己聚合层(本级)的订单编号
  38. $params['sign'] = $sign = $_POST['sign'];
  39. if(!$this->checkOrder($attach,$amount)){
  40. log_message('订单不存在或订单金额不一致,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  41. die('FAIL:订单不存在或订单金额不一致');
  42. }
  43. $polyChannelGameModel = new PolychannelGame;
  44. $param = $polyChannelGameModel->where(['game_id'=>$this->payInfo['gameid'],'channel_id'=>$this->payInfo['channel_id']])->value('param');
  45. if(empty($param)){
  46. log_message('后台渠道游戏中,用于该游戏的验签参数还未设置,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  47. die('FAIL:用于验签的参数还未设置');
  48. }
  49. $param = unserialize($param);
  50. $appkey = $param[$appid];
  51. $thisSign = $this->sign($params,$appkey);
  52. if ($sign != $thisSign) {
  53. log_message('签名校验失败,参数:'.$thisSign.' 生成的签名thisSign='.$thisSign.' 对方的签名:'.$sign,'error',LOG_PATH . '../complexPaylog/');
  54. die('FAIL:签名校验失败 ' . $thisSign);
  55. }
  56. // 启动事务
  57. Db::startTrans();
  58. try{
  59. $this->updateOrder($attach,$orderid,$paytime);
  60. // 提交事务
  61. Db::commit();
  62. }
  63. catch (\Exception $e) {
  64. // 回滚事务
  65. Db::rollback();
  66. die('FAIL:订单生成失败'.$e->getMessage());
  67. }
  68. // 【产品确认:测试阶段暂时不用通知CP】通知CP,支付成功
  69. (new PayCallback())->callBackToCp($attach);
  70. die('SUCCESS');
  71. }
  72. /**
  73. * 二次登录验证
  74. */
  75. public function checklogin()
  76. {
  77. /*
  78. $_POST['tm'] = '100073';
  79. $_POST['cchid'] = '122211';
  80. $_POST['appid'] = '123213213';
  81. $_POST['access_token'] = time();
  82. */
  83. if (empty($_POST)) {
  84. die('请求内容为空');
  85. }
  86. $params = array();
  87. $params['appid'] = $appid = trim($_POST['appid']);
  88. $params['cchid'] = trim($_POST['cchid']);
  89. $params['access_token'] = urlencode(trim($_POST['access_token']));
  90. $params['tm'] = trim($_POST['tm']);
  91. $appkeyArrs = array("10078"=>"9GXn6KD4W7YlhPm3","100073"=>"10bd288640193feb5c8c470dd215e09f");
  92. if(!isset($appkeyArrs{$appid})){
  93. die('游戏秘钥未配置');
  94. }
  95. else{
  96. $appkey = $appkeyArrs{$appid};
  97. }
  98. $sign = $this->sign($params,$appkey);
  99. $params['sign'] = $sign;
  100. $checkUrl = 'http://sdkapi.wx.yuekenet.com/user/v1/token/verify/';
  101. $response = get_http_response($checkUrl, http_build_query($params));
  102. die($response);
  103. /*
  104. // var_dump($response);
  105. // $response = json_decode($response,true);
  106. // var_dump($response);
  107. if ($response == 'success'){
  108. die('success');
  109. }
  110. else{
  111. die($response);
  112. }
  113. die('failed');
  114. */
  115. }
  116. private function sign($param, $key){
  117. $param = array_filter($param, function ($v, $k) {
  118. if ($k !== 'sign_type' && $k !== 'sign' && $v !== '') {
  119. return true;
  120. }
  121. }, ARRAY_FILTER_USE_BOTH);
  122. ksort($param);
  123. reset($param);
  124. $signStr = '';
  125. foreach ($param as $k => $v) {
  126. $signStr .= $k . '=' . $v . '&';
  127. }
  128. if (get_magic_quotes_gpc()) {
  129. $signStr = stripslashes($signStr);
  130. }
  131. // echo $signStr . $key;
  132. return md5($signStr . $key);
  133. }
  134. }