Xkhyn.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 Xkhyn extends Complex {
  11. protected $channel_mark = 'xkhyn';
  12. public function index(){
  13. echo "Xkhyn";
  14. }
  15. /**
  16. * 支付处理
  17. */
  18. public function pay()
  19. {
  20. if (empty($_POST)) {
  21. die('请求内容为空');
  22. }
  23. $orderid = urldecode($_POST['orderid']); //下级渠道的订单号
  24. $username = urldecode($_POST['username']);
  25. $gameid = urldecode($_POST['gameid']);
  26. $roleid = urldecode($_POST['roleid']);
  27. $serverid = urldecode($_POST['serverid']);
  28. $paytype = urldecode($_POST['paytype']);
  29. $amount = urldecode($_POST['amount']);
  30. $paytime = urldecode($_POST['paytime']);
  31. $attach = urldecode($_POST['attach']); //这个才是自己聚合层(本级)的订单编号
  32. $sign = urldecode($_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. $param = unserialize($param);
  44. $appkey = $param[$gameid];
  45. $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);
  46. $str.= "&appkey=".urlencode($appkey);
  47. $thisSign = md5($str);
  48. if ($sign != $thisSign) {
  49. log_message('签名校验失败,参数:'.$str.' 生成的签名thisSign='.$thisSign.' 对方的签名:'.$sign,'error',LOG_PATH . '../complexPaylog/');
  50. die('签名校验失败 ' . $thisSign);
  51. }
  52. // 启动事务
  53. Db::startTrans();
  54. try{
  55. $this->updateOrder($attach,$orderid,$paytime);
  56. // 提交事务
  57. Db::commit();
  58. }
  59. catch (\Exception $e) {
  60. // 回滚事务
  61. Db::rollback();
  62. die('订单生成失败'.$e->getMessage());
  63. }
  64. // 【产品确认:测试阶段暂时不用通知CP】通知CP,支付成功
  65. (new PayCallback())->callBackToCp($attach);
  66. die('success');
  67. }
  68. }