Diyi.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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 Diyi extends Complex {
  11. protected $channel_mark = 'diyi';
  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. $attach = $_POST['game_order'];
  27. $orderid = $_POST['out_trade_no']; //下级渠道的订单号
  28. $pay_extra = $_POST['pay_extra'];
  29. $user_id = $_POST['user_id'];
  30. $pay_status = $_POST['pay_status'];
  31. $amount = $_POST['price'];
  32. $sign = $_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. $gameid = $this->payInfo['gameid'];
  44. $param = unserialize($param);
  45. $appkey = $param[$gameid];
  46. $str = $attach.$orderid.$pay_extra.$pay_status.$amount.$user_id;
  47. $str.= $appkey;
  48. $thisSign = md5($str);
  49. if ($sign != $thisSign) {
  50. log_message('签名校验失败,参数:'.$str.' 生成的签名thisSign='.$thisSign.' 对方的签名:'.$sign,'error',LOG_PATH . '../complexPaylog/');
  51. die('签名校验失败 ' . $thisSign);
  52. }
  53. // 启动事务
  54. Db::startTrans();
  55. try{
  56. $this->updateOrder($attach,$orderid,time());
  57. // 提交事务
  58. Db::commit();
  59. }
  60. catch (\Exception $e) {
  61. // 回滚事务
  62. Db::rollback();
  63. die('订单生成失败'.$e->getMessage());
  64. }
  65. // 【产品确认:测试阶段暂时不用通知CP】通知CP,支付成功
  66. (new PayCallback())->callBackToCp($attach);
  67. die('success');
  68. }
  69. /**
  70. * 二次登录验证
  71. */
  72. public function checklogin(){
  73. /*
  74. $_POST['user_id'] = '100073';
  75. $_POST['token'] = '123213213';
  76. */
  77. if (empty($_POST)) {
  78. die('请求内容为空');
  79. }
  80. $user_id = trim($_POST['user_id']);
  81. $token = trim($_POST['token']);
  82. $checkUrl = 'https://www.eggyx.cn/sdk/login_notify/login_verify';
  83. $response = get_http_response($checkUrl, http_build_query(['user_id'=>$user_id,'token'=>$token]));
  84. die($response);
  85. }
  86. }