Ask.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 小程序公共API服务
  7. */
  8. namespace app\bestbao\controller\api\v1;
  9. use app\bestbao\controller\api\Base;
  10. use app\bestbao\model\BestbaoAsk;
  11. use app\bestbao\model\BestbaoAskCategory;
  12. use app\bestbao\model\BestbaoAskOrder;
  13. use app\common\facade\WechatPay;
  14. use util\Util;
  15. class Ask extends Base{
  16. /**
  17. * 获取问题
  18. **/
  19. public function category(){
  20. $data['signkey'] = $this->request->param('signkey');
  21. $data['sign'] = $this->request->param('sign');
  22. $rel = $this->apiSign($data);
  23. if($rel['code'] != 200){
  24. return enjson($rel['code'],'签名验证失败');
  25. }
  26. $rel = BestbaoAskCategory::where(['member_miniapp_id' => $this->miniapp_id])->field('title,id,picture')->order('sort desc,id desc')->select();
  27. if($rel->isEmpty()){
  28. return enjson(204);
  29. }else{
  30. return enjson(200,'成功',$rel);
  31. }
  32. }
  33. /**
  34. * 获取问题
  35. **/
  36. public function index(){
  37. $data['page'] = $this->request->param('page/d',1);
  38. $data['category_id'] = $this->request->param('category_id/d',0);
  39. $data['sign'] = $this->request->param('sign');
  40. $data['keyword'] = $this->request->param('keyword');
  41. $rel = $this->apiSign($data);
  42. if($rel['code'] != 200){
  43. return enjson($rel['code'],'签名验证失败');
  44. }
  45. $condition['member_miniapp_id'] = $this->miniapp_id;
  46. $condition['is_ad'] = 0;
  47. if(empty($data['keyword']) && $data['category_id'] > 0){
  48. $condition['category_id'] = $data['category_id'];
  49. }
  50. $rel = BestbaoAsk::where($condition)->withSearch(['title'],['title' => $data['keyword']])->field('id,ad_img,title,note')->order('is_top desc,sort desc,id desc')->paginate(10);
  51. if($rel->isEmpty()){
  52. return enjson(204);
  53. }else{
  54. return enjson(200,'成功',$rel->toArray()['data']);
  55. }
  56. }
  57. /**
  58. * 相关问题
  59. **/
  60. public function related(){
  61. $data['category_id'] = $this->request->param('category_id/d',0);
  62. $data['sign'] = $this->request->param('sign');
  63. $rel = $this->apiSign($data);
  64. if($rel['code'] != 200){
  65. return enjson($rel['code'],'签名验证失败');
  66. }
  67. $condition['member_miniapp_id'] = $this->miniapp_id;
  68. $condition['is_top'] = 0;
  69. $condition['is_ad'] = 0;
  70. $condition['category_id'] = $data['category_id'];
  71. $rel = BestbaoAsk::where($condition)->field('id,ad_img,title,note')->order('is_top desc,sort desc,id desc')->limit(10)->select();
  72. if($rel->isEmpty()){
  73. return enjson(204);
  74. }else{
  75. foreach ($rel as $key => $value) {
  76. $rel[$key]['note'] =Util::msubstr($value['note'],0,40);
  77. }
  78. return enjson(200,'成功',$rel);
  79. }
  80. }
  81. /**
  82. * 获取推荐的问题
  83. **/
  84. public function askAds(){
  85. $param['signkey'] = $this->request->param('signkey');
  86. $param['sign'] = $this->request->param('sign');
  87. $rel = $this->apiSign($param);
  88. if($rel['code'] != 200){
  89. return enjson($rel['code'],'签名验证失败');
  90. }
  91. $condition['member_miniapp_id'] = $this->miniapp_id;
  92. $condition['is_ad'] = 1;
  93. $rel = BestbaoAsk::where($condition)->order('sort desc,id desc')->limit(5)->select();
  94. if($rel->isEmpty()){
  95. return enjson(204);
  96. }else{
  97. return enjson(200,'成功',$rel);
  98. }
  99. }
  100. /**
  101. * 获取问题
  102. **/
  103. public function reView(){
  104. $param['id'] = $this->request->param('id/d',1);
  105. $param['sign'] = $this->request->param('sign');
  106. $rel = $this->apiSign($param);
  107. if($rel['code'] != 200){
  108. return enjson($rel['code'],'签名验证失败');
  109. }
  110. $condition['member_miniapp_id'] = $this->miniapp_id;
  111. $condition['id'] = $param['id'];
  112. $rel = BestbaoAsk::where($condition)->find();
  113. if(empty($rel)){
  114. return enjson(204);
  115. }else{
  116. $data = $rel->toArray();
  117. $data['update_time'] = date('m/d H:i',$data['update_time']);
  118. $data['create_time'] = date('m/d H:i',$data['create_time']);
  119. $data['content'] = str_replace('<img', '<img class="img"',dehtml($rel['content']));
  120. $data['answer'] = str_replace('<img', '<img class="img"',dehtml($rel['answer']));
  121. $data['category'] = $rel->category->title;
  122. $data['is_buy_ask'] = 1;
  123. if($this->user && $rel->price > 0){
  124. $data['is_buy_ask'] = BestbaoAskOrder::where(['member_miniapp_id' =>$this->miniapp_id,'ask_id' =>$rel->id,'uid'=>$this->user->id,'paid_at' => 1])->count();
  125. }
  126. return enjson(200,'成功',$data);
  127. }
  128. }
  129. /**
  130. * 点赞
  131. **/
  132. public function like(){
  133. $this->isUserAuth();
  134. $param['id'] = $this->request->param('id/d',1);
  135. $param['sign'] = $this->request->param('sign');
  136. $rel = $this->apiSign($param);
  137. if($rel['code'] != 200){
  138. return enjson($rel['code'],'签名验证失败');
  139. }
  140. $condition['member_miniapp_id'] = $this->miniapp_id;
  141. $condition['id'] = $param['id'];
  142. $rel = BestbaoAsk::where($condition)->setInc('like',1);
  143. if(empty($rel)){
  144. return enjson(204);
  145. }else{
  146. return enjson(200);
  147. }
  148. }
  149. /**
  150. * @return \think\response\Json
  151. * @throws \think\exception\DbException
  152. * 解决方案订阅
  153. * */
  154. public function doBuy(){
  155. $this->isUserAuth();
  156. $param['sign'] = $this->request->param('sign');
  157. $param['id'] = $this->request->param('id');
  158. $rel = $this->apiSign($param);
  159. if(!$this->user){
  160. return enjson(401,'请先登录');
  161. }
  162. $info = BestbaoAsk::where(['id' => $param['id']])->find();
  163. if(empty($info)){
  164. return enjson(204);
  165. }
  166. //唤醒微信支付参数
  167. $order_no = $this->user->invite_code.order_no(); //订单号
  168. $payparm = [
  169. 'openid' => $this->user->miniapp_uid,
  170. 'miniapp_id' => $this->miniapp_id,
  171. 'name' => '订阅知识库解决方案',
  172. 'order_no' => $order_no,
  173. 'total_fee' => 1,
  174. 'notify_url' => api(1,'bestbao/notify/ask',$this->miniapp_id),
  175. ];
  176. $ispay = WechatPay::orderPay($payparm);
  177. if ($ispay['code'] == 0) {
  178. return enjson(403,$ispay['msg']);
  179. }else{
  180. BestbaoAskOrder::create(['member_miniapp_id' => $this->miniapp_id,'ask_id' => $info->id,'uid' => $this->user->id,'amount' => $info->price,'order_no' => $order_no]);
  181. return enjson(200,'成功',$ispay['data']);
  182. }
  183. }
  184. }