Yehua.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace app\api\complex;
  3. use think\Request;
  4. class Yehua implements ComplexInterface
  5. {
  6. private $channel = 'yehua';
  7. private $check_url = "http://pay.sdkyehua.com:8081";
  8. // 登陆效验
  9. public function checkLogin($data, $polyChannelGame = [])
  10. {
  11. if (!$paramArr = json_decode($polyChannelGame['param'], true)) {
  12. return false;
  13. }
  14. $params = [
  15. 'app' => $paramArr['app_id'],
  16. 'token' => $data['channel_token'],
  17. 'ts' => getMillisecond(),
  18. 'uin' => $data['user_id'],
  19. ];
  20. $params['sign'] = md5($this->getLoginSign($params).$paramArr['app_key']);
  21. $result = $this->curl_post($this->check_url.'/payserver/account/check_login', $params);
  22. // trace($this->channel.' 登陆校验失败 - url:'.$this->check_url . ' - ' . json_encode($params) . ' - result:' . $result, 'Yehua@checkLogin.$result');
  23. $res = json_decode($result, true);
  24. if ($res['code'] == 0) {
  25. return true;
  26. } else {
  27. return false;
  28. }
  29. }
  30. // 支付回调效验
  31. public function paySign($data, $polyChannelGame = [])
  32. {
  33. if(!input('app') || !input('uid') || !input('sign')){
  34. return ['code' => -710, 'msg' => '回调参数有误!', 'data' => []];
  35. }
  36. if (!$paramArr = json_decode($polyChannelGame['param'], true)) {
  37. return false;
  38. }
  39. $newData = [
  40. "app" => $data['app'],
  41. "at" => $data['at'],
  42. "cbi" => $data['cbi'],
  43. "cn" => $data['cn'],
  44. "fee" => $data['fee'],
  45. "kr" => $data['kr'],
  46. "pt" => $data['pt'],
  47. "res" => $data['res'],
  48. "st" => $data['st'],
  49. "tid" => $data['tid'],
  50. "ud" => $data['ud'],
  51. "uid" => $data['uid'],
  52. "ver" => $data['ver'],
  53. "sign" => $data['sign'],
  54. ];
  55. $signStr = $this->getSignContent($newData) . $paramArr['app_secret'];
  56. if (md5($signStr) == $newData['sign']) {
  57. return true;
  58. }
  59. return false;
  60. }
  61. public function getData($data)
  62. {
  63. return [
  64. 'orderid' => $data['ud'], //我方聚合订单
  65. 'amount' => formatFenToYuan($data['fee']), // 充值金额
  66. 'sub_orderid' => $data['ud'], //渠道订单
  67. ];
  68. }
  69. public function getFail($msg = '')
  70. {
  71. echo 'FAILURE';
  72. exit();
  73. }
  74. public function getSuccess($msg = '')
  75. {
  76. echo 'SUCCESS';
  77. exit();
  78. }
  79. /**
  80. * 登陆签名
  81. *
  82. * 获取待签字符串
  83. * 去除值为null和键为sign、sign_type的参数
  84. * 按照键值字典排序[a-z]
  85. * 按照key=value&key=value的方式拼接成待签字符串
  86. * @param $params
  87. * @return string
  88. */
  89. private function getLoginSign($params)
  90. {
  91. ksort($params);
  92. $returnArr = [];
  93. foreach ($params as $k => $v) {
  94. $ks = trim(strtolower($k));
  95. if ($ks == 'sign' || $ks == 'sign_type') {
  96. unset($params[$k]);
  97. continue;
  98. }
  99. $returnArr[] = "{$k}={$v}";
  100. }
  101. $resStr = implode('&', $returnArr);
  102. return $resStr;
  103. }
  104. public function curl_post($url , $data=array()){
  105. $ch = curl_init();
  106. curl_setopt($ch, CURLOPT_URL, $url);
  107. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  108. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  109. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  110. // POST数据
  111. curl_setopt($ch, CURLOPT_POST, 1);
  112. // 把post的变量加上
  113. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  114. $output = curl_exec($ch);
  115. curl_close($ch);
  116. return $output;
  117. }
  118. public function getSpecialParam($data,$polyChannelGame = []){
  119. if(!empty($data['user_id'])){
  120. return $data['user_id'];
  121. }
  122. return false;
  123. }
  124. /**
  125. * 支付回调签名
  126. *
  127. * 获取待签字符串
  128. * 去除值为null和键为sign、sign_type的参数
  129. * 按照键值字典排序[a-z]
  130. * 按照key=value&key=value的方式拼接成待签字符串
  131. * @param $params
  132. * @return string
  133. */
  134. private function getSignContent($params)
  135. {
  136. ksort($params);
  137. $returnArr = [];
  138. foreach ($params as $k => $v) {
  139. $ks = trim(strtolower($k));
  140. if ($ks == 'sign' || $ks == 'sign_type') {
  141. unset($params[$k]);
  142. continue;
  143. }
  144. $returnArr[] = "{$k}={$v}";
  145. }
  146. $resStr = implode('&', $returnArr);
  147. return $resStr;
  148. }
  149. }