Pili.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace app\api\complex;
  3. /**
  4. * 霹雳
  5. */
  6. class Pili implements ComplexInterface
  7. {
  8. private $channel = 'pili';
  9. /**
  10. * ## 登陆 - 校验
  11. *
  12. * @param $data
  13. * @param $polyChannelGame
  14. *
  15. * @return false
  16. */
  17. public function getSpecialParam($data, $polyChannelGame = [])
  18. {
  19. // 参数:user_id = mem_id, channel_token = user_token
  20. if (empty($data['user_id']) || empty($data['channel_token'])) {
  21. return false;
  22. }
  23. if (empty($polyChannelGame['param'])) {
  24. return false;
  25. }
  26. if (!$channelConfig = json_decode($polyChannelGame['param'], true)) {
  27. return false;
  28. }
  29. $param = [
  30. 'app_id' => $channelConfig['app_id'],
  31. 'mem_id' => $data['user_id'],
  32. 'user_token' => $data['channel_token'],
  33. ];
  34. $param['sign'] = $this->signData($param, $channelConfig['app_key']);
  35. $res = get_http_response('http://unapi.piliyouxi.com/cp/user/check', $param);
  36. $res = json_decode($res, true);
  37. if ($res['status'] == 1) {
  38. return $data['user_id'];
  39. } else {
  40. return false;
  41. }
  42. }
  43. // ## 登陆 - 登陆
  44. public function checkLogin($data, $polyChannelGame = [])
  45. {
  46. return true;
  47. }
  48. // ## 下单 - 客户端需要的参数(客户端自己做了,这块暂时不用)
  49. public function getOrder($data)
  50. {
  51. return ['code' => 200, 'msg' => 'success', 'param' => []];
  52. }
  53. // ## 回调 - 效验
  54. public function paySign($data, $polyChannelGame = [])
  55. {
  56. $handleKeys = ['app_id', 'ch_id', 'ch_order_id', 'order_id', 'cp_order_id', 'mem_id', 'order_status', 'pay_time', 'finish_time', 'product_id', 'product_name', 'product_price', 'server_id', 'role_id', 'role_id', 'sign'];
  57. if (array_diff($handleKeys, array_keys($data))) {
  58. return false;
  59. }
  60. if (!$channelConfig = json_decode($polyChannelGame['param'], true)) {
  61. return false;
  62. }
  63. $param = [
  64. "app_id" => $data['app_id'], // 游戏 ID
  65. "ch_id" => $data['ch_id'], // 渠道ID
  66. "ch_order_id" => $data['ch_order_id'], // 渠道订单ID
  67. "order_id" => $data['order_id'], // 聚合平台订单ID
  68. "cp_order_id" => $data['cp_order_id'], // 外部订单号(第三方)
  69. "mem_id" => $data['mem_id'], // 玩家ID
  70. "order_status" => $data['order_status'], // 平台订单状态:1=未支付,2=成功支付,3=支付失败
  71. "pay_time" => $data['pay_time'], // 订单下单时间
  72. "finish_time" => $data['finish_time'], // 订单支付完成时间
  73. "product_id" => $data['product_id'], // 商品 id
  74. "product_name" => $data['product_name'], // 商品名称
  75. "product_price" => $data['product_price'], // 商品价格(元);保留两位小数
  76. "server_id" => $data['server_id'], // 服务器id
  77. "role_id" => $data['role_id'], // 角色id
  78. "ext" => $data['ext']??"", // 透传参数
  79. ];
  80. $hadleSign = $this->signData($param, $channelConfig['app_key'], true);
  81. if ($data['sign'] == $hadleSign) {
  82. return true;
  83. }
  84. return false;
  85. }
  86. // ## 回调处理相关参数
  87. public function getData($data)
  88. {
  89. if (!isset($data['cp_order_id']) || !isset($data['product_price']) || !isset($data['order_id'])) {
  90. return false;
  91. }
  92. return [
  93. 'orderid' => $data['cp_order_id'], // 我方聚合订单
  94. 'amount' => $data['product_price'], // 充值金额(单位:元)
  95. 'sub_orderid' => $data['order_id'], // 渠道订单
  96. ];
  97. }
  98. // ## 回调 - 成功返回
  99. public function getSuccess($msg = '')
  100. {
  101. echo 'SUCCESS';
  102. exit();
  103. }
  104. // ## 回调 - 失败返回
  105. public function getFail($msg = '')
  106. {
  107. trace($this->channel . '@getFail@回调失败:' . $msg);
  108. echo 'FAILURE';
  109. exit();
  110. }
  111. // 登陆签名
  112. private function signData($param, $app_key, $handleUrl = false)
  113. {
  114. ksort($param);
  115. $param['app_key'] = $app_key;
  116. $tmp = [];
  117. foreach ($param as $k => $v) {
  118. if ($handleUrl == true) {
  119. $tmp[] = $k . '=' . urlencode($v);
  120. } else {
  121. $tmp[] = $k . '=' . $v;
  122. }
  123. }
  124. $sign = implode('&', $tmp);
  125. $md5Res = md5($sign);
  126. trace('sign=' . $sign . ' - md5=' . $md5Res, 'Pili@signData.result');
  127. return $md5Res;
  128. }
  129. }