Aoyou.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 Aoyou extends Complex {
  11. protected $channel_mark = 'aoyou';
  12. /**
  13. * 支付处理
  14. */
  15. public function pay()
  16. {
  17. if (empty($_POST)) {
  18. die('请求内容为空');
  19. }
  20. $orderid = $_POST['out_trade_no']; //下级渠道的订单号
  21. $user_id = $_POST['user_id'];
  22. $signType = $_POST['signType'];
  23. $attach = $_POST['extend'];
  24. $pay_status = $_POST['pay_status'];
  25. $amount = $_POST['price'];
  26. $sign = $_POST['sign'];
  27. if(!$this->checkOrder($attach,$amount)){
  28. log_message('订单不存在或订单金额不一致,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  29. die('订单不存在或订单金额不一致');
  30. }
  31. $polyChannelGameModel = new PolychannelGame;
  32. $param = $polyChannelGameModel->where(['game_id'=>$this->payInfo['gameid'],'channel_id'=>$this->payInfo['channel_id']])->value('param');
  33. if(empty($param)){
  34. log_message('后台渠道游戏中,用于该游戏的验签参数还未设置,orderid='.$orderid,'error',LOG_PATH . '../complexPaylog/');
  35. die('用于验签的参数还未设置');
  36. }
  37. $gameid = $this->payInfo['gameid'];
  38. $param = unserialize($param);
  39. $appkey = $param[$gameid];
  40. $str = $orderid.$amount.$pay_status.$attach;
  41. $str.= $appkey;
  42. $thisSign = md5($str);
  43. if ($sign != $thisSign) {
  44. log_message('签名校验失败,参数:'.$str.' 生成的签名thisSign='.$thisSign.' 对方的签名:'.$sign,'error',LOG_PATH . '../complexPaylog/');
  45. die('签名校验失败 ' . $thisSign);
  46. }
  47. $paytime = time();
  48. // 启动事务
  49. Db::startTrans();
  50. try{
  51. $this->updateOrder($attach,$orderid,$paytime);
  52. // 提交事务
  53. Db::commit();
  54. }
  55. catch (\Exception $e) {
  56. // 回滚事务
  57. Db::rollback();
  58. die('订单生成失败'.$e->getMessage());
  59. }
  60. // 【产品确认:测试阶段暂时不用通知CP】通知CP,支付成功
  61. (new PayCallback())->callBackToCp($attach);
  62. die('success');
  63. }
  64. }