KuaifenService.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace app\common\service;
  3. use app\common\model\OrdersKuaifen;
  4. use app\main\model\object\OrderObject;
  5. use app\main\service\LogService;
  6. use GuzzleHttp\Client as Http;
  7. use GuzzleHttp\Exception\GuzzleException;
  8. use GuzzleHttp\RequestOptions;
  9. use think\Config;
  10. class KuaifenService
  11. {
  12. public static $self;
  13. public static function instance()
  14. {
  15. if (self::$self == null) {
  16. self::$self = new self();
  17. }
  18. return self::$self;
  19. }
  20. /**
  21. * @return OrdersKuaifen
  22. */
  23. public function getOrderKuaifenModel()
  24. {
  25. return model('OrdersKuaifen');
  26. }
  27. /**
  28. * 快分渠道商id
  29. * @return mixed|null
  30. */
  31. public function getKuaifenChannelId()
  32. {
  33. return Config::get('site.kuaifen_channel_id');
  34. }
  35. /**
  36. * 快分合作推广书籍id
  37. * @return array|false|string[]
  38. */
  39. public function getKuaifenBookIds()
  40. {
  41. $strBookIds = Config::get('site.kuaifen_book_ids');
  42. if ($strBookIds) {
  43. return explode(',', $strBookIds);
  44. } else {
  45. return [];
  46. }
  47. }
  48. /**
  49. * 创建快分订单
  50. * @param $ordersId
  51. * @param $userId
  52. */
  53. public function createKuaifenOrders($ordersId, $ordersChannelId, $userId, $bookId, $money, $outTradeNo)
  54. {
  55. $kuaifenChannelId = $this->getKuaifenChannelId();
  56. if ($kuaifenChannelId != $ordersChannelId) {
  57. return;
  58. }
  59. $kuaifenId = UserVipExtendService::instance()->getUserKuaifenId($userId);
  60. if ($kuaifenId) {
  61. $data = [
  62. 'orders_id' => $ordersId,
  63. 'user_id' => $userId,
  64. 'kuaifen_id' => $kuaifenId,
  65. 'book_id' => $bookId,
  66. 'out_trade_no' => $outTradeNo,
  67. 'money' => $money,
  68. 'createtime' => time(),
  69. 'updatetime' => time(),
  70. ];
  71. $this->getOrderKuaifenModel()->insert($data);
  72. }
  73. }
  74. /**
  75. * 向快分app上报用户充值
  76. * @param OrderObject $oOrder
  77. */
  78. public function reportOrders(OrderObject $oOrder)
  79. {
  80. $kuaifenChannelId = $this->getKuaifenChannelId();
  81. if ($oOrder->admin_id != $kuaifenChannelId) {
  82. return;
  83. }
  84. if ($oOrder->activity_id) {
  85. $bookId = 2;
  86. } elseif ($oOrder->book_id) {
  87. $bookId = $oOrder->book_id;
  88. } else {
  89. $bookId = 1;
  90. }
  91. $kuaifenOrder = $this->getOrderKuaifenModel()->where('orders_id', $oOrder->id)->find();
  92. if (empty($kuaifenOrder)) {
  93. return;
  94. }
  95. $apiUrl = 'https://kf.subno.cn/api/reportIncome.php';
  96. $params = [
  97. 'cid' => $oOrder->id,
  98. 'uid' => $kuaifenOrder['kuaifen_id'],
  99. 'xsid' => $bookId,
  100. 'money' => $oOrder->money,
  101. 'seconds' => $oOrder->createtime,
  102. 'chargeTime' => date('Y-m-d H:i:s'),
  103. ];
  104. ksort($params);
  105. $str = http_build_query($params);
  106. $str = $str . 'KbGyb9AG';
  107. LogService::info('signOldStr:' . $str);
  108. $str = urldecode($str);
  109. $sign = md5($str);
  110. $params['sign'] = $sign;
  111. try {
  112. $client = new Http([
  113. 'connect_timeout' => 10,
  114. 'timeout' => 30,
  115. 'http_errors' => true, //抛出异常 true是 false否
  116. 'verify' => false, //不验证ssl证书
  117. ]);
  118. $result = $client->post($apiUrl, [RequestOptions::FORM_PARAMS => $params]);
  119. if ($result->getStatusCode() != '200') {
  120. LogService::error(sprintf('kuaifen report orders error! params:%s,result:%s',
  121. json_encode($params, JSON_UNESCAPED_UNICODE),
  122. json_encode(var_export($result, true), JSON_UNESCAPED_UNICODE)));
  123. }
  124. } catch (GuzzleException $e) {
  125. LogService::error(sprintf('kuaifen exception report orders error! params:%s,message:%s',
  126. json_encode($params, JSON_UNESCAPED_UNICODE), $e->getMessage()));
  127. LogService::error($e->getTraceAsString());
  128. }
  129. $this->getOrderKuaifenModel()->where('orders_id', $oOrder->id)->update(['state' => 1, 'updatetime' => time()]);
  130. }
  131. public function getTotalIncomeByUser($kuaifenId, $beginTime, $endTime, $bookId)
  132. {
  133. $query = $this->getOrderKuaifenModel()->where('kuaifen_id', $kuaifenId)->whereBetween('createtime',
  134. "$beginTime, $endTime");
  135. if (!empty($bookId)) {
  136. $query->where('book_id', $bookId);
  137. }
  138. $sumMoney = $query->sum('money');
  139. return $sumMoney;
  140. }
  141. public function getTotalIncome($beginTime, $endTime, $bookId)
  142. {
  143. $query = $this->getOrderKuaifenModel()->whereBetween('createtime', "$beginTime, $endTime");
  144. if (!empty($bookId)) {
  145. $query->where('book_id', $bookId);
  146. }
  147. $sumMoney = $query->sum('money');
  148. return $sumMoney;
  149. }
  150. public function getOrdersKuaifen($ordersId)
  151. {
  152. $orders = $this->getOrderKuaifenModel()->where('orders_id', $ordersId)->find();
  153. return $orders;
  154. }
  155. }