PaybackController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. /**
  3. * PaybackController.php UTF-8
  4. * CP支付回调测试
  5. *
  6. * @date : 2018/5/24 16:54
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace api\apple\controller\test;
  13. use huo\controller\common\HuoSession;
  14. use huo\controller\game\Game;
  15. use huolib\tool\StrUtils;
  16. use think\Controller;
  17. use think\Log;
  18. class PaybackController extends Controller {
  19. private $param = [];
  20. function _initialize() {
  21. parent::_initialize();
  22. $this->param = $this->request->param();
  23. // $this->param = array(
  24. // 'app_id' => '60000',
  25. // 'cp_order_id' => '10000',
  26. // 'mem_id' => '136',
  27. // 'order_id' => '1526983557869000036',
  28. // 'order_status' => '2',
  29. // 'pay_time' => '1526983557',
  30. // 'product_id' => '1',
  31. // 'product_name' => '元宝',
  32. // 'product_price' => '1.00',
  33. // 'ext' => '穿透',
  34. // 'sign' => 'dc8258438db62e76d2cbde46ce408e92',
  35. // );
  36. /* 记录请求数据 */
  37. Log::write(
  38. $this->request->server('HTTP_HOST').$this->request->server('REQUEST_URI').'?'.$this->request->getContent(),
  39. Log::LOG
  40. );
  41. }
  42. /**
  43. * 支付回调测试
  44. * http://doc.1tsdk.com/138?page_id=3353
  45. * 【域名】/cp/payback/test
  46. */
  47. public function notify() {
  48. $_param = $this->param;
  49. /* 1 查询是否具有访问权限 */
  50. $this->checkAuth();
  51. $this->checkParam();
  52. $_data['app_id'] = $_param['app_id'];
  53. $_data['cp_order_id'] = $_param['cp_order_id'];
  54. $_data['mem_id'] = $_param['mem_id'];
  55. $_data['order_id'] = $_param['order_id'];
  56. $_data['order_status'] = $_param['order_status'];
  57. $_data['pay_time'] = $_param['pay_time'];
  58. $_data['product_id'] = $_param['product_id'];
  59. $_data['product_name'] = $_param['product_name'];
  60. $_data['product_price'] = $_param['product_price'];
  61. $_data['ext'] = $_param['ext'];
  62. $_sign = $_param['sign'];
  63. $_data = StrUtils::argSort($_data);
  64. $_check_str = http_build_query($_data);
  65. $_app_key = $this->getAppKey($_data['app_id']);
  66. if (empty($_app_key)) {
  67. die('FAILURE');
  68. }
  69. $_check_sign = md5($_check_str.'&app_key='.$_app_key);
  70. if ($_sign != $_check_sign) {
  71. die('FAILURE');
  72. }
  73. die('SUCCESS');
  74. }
  75. private function checkParam() {
  76. $_param = $this->param;
  77. if (!isset($_param['app_id']) || empty($_param['app_id'])) {
  78. die('app_id 参数为空');
  79. }
  80. if (!isset($_param['cp_order_id']) || empty($_param['cp_order_id'])) {
  81. die('cp_order_id 参数为空');
  82. }
  83. if (!isset($_param['mem_id']) || empty($_param['mem_id'])) {
  84. die('mem_id 参数为空');
  85. } else {
  86. // $_mg_mem_id = HuoSession::getMgMemId();
  87. // if ($_mg_mem_id != $_param['mem_id']) {
  88. // die('mem_id 错误 玩家不存在');
  89. // }
  90. }
  91. if (!isset($_param['order_id']) || empty($_param['order_id'])) {
  92. die('order_id 参数为空');
  93. }
  94. if (!isset($_param['order_status']) || empty($_param['order_status'])) {
  95. die('order_status 参数为空');
  96. }
  97. if (!isset($_param['pay_time']) || empty($_param['pay_time'])) {
  98. die('pay_time 参数为空');
  99. }
  100. if (!isset($_param['product_id']) || empty($_param['product_id'])) {
  101. die('product_id 参数为空');
  102. }
  103. if (!isset($_param['product_name']) || empty($_param['product_name'])) {
  104. die('product_name 参数为空');
  105. }
  106. if (!isset($_param['product_price']) || empty($_param['product_price'])) {
  107. die('product_price 参数为空');
  108. }
  109. if (!isset($_param['ext'])) {
  110. die('ext 参数为空');
  111. }
  112. if (!isset($_param['sign']) || empty($_param['sign'])) {
  113. die('sign 参数为空');
  114. }
  115. }
  116. /**
  117. * 获取APPKEY
  118. *
  119. * @param $app_id
  120. *
  121. * @return bool
  122. */
  123. private function getAppKey($app_id) {
  124. $_app_key = (new Game())->getAppKey($app_id);
  125. if (empty($_app_key)) {
  126. return false;
  127. }
  128. return $_app_key;
  129. }
  130. /**
  131. * 校验权限
  132. *
  133. * @return bool
  134. */
  135. private function checkAuth() {
  136. $_ip = $this->request->ip();
  137. if (!is_string($_ip)) {
  138. die('FAILURE');
  139. }
  140. return true;
  141. }
  142. }