Card.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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. * 会员卡接口
  7. */
  8. namespace app\allwin\controller\api\v4;
  9. use app\allwin\controller\api\Base;
  10. use app\allwin\model\Card as ModelCard;
  11. use app\allwin\model\Coupon;
  12. use app\allwin\model\Card as AllwinCard;
  13. use app\allwin\model\CardUser;
  14. use app\allwin\model\CardUserOrder;
  15. use app\common\facade\WechatPay;
  16. class Card extends Base{
  17. /**
  18. * 初始化当前应用管理员是不是联盟城市账户
  19. * @return void
  20. */
  21. public function initialize() {
  22. parent::initialize();
  23. }
  24. /**
  25. * 判断好店是否有储值卡
  26. */
  27. public function isCard(){
  28. $param['store_id'] = $this->request->param('store_id/d',0);
  29. $param['signkey'] = $this->request->param('signkey');
  30. $param['sign'] = $this->request->param('sign');
  31. $rel = $this->apiSign($param);
  32. if($rel['code'] != 200){
  33. return enjson(403,'签名失败');
  34. }
  35. $card = ModelCard::where(['member_miniapp_id' => $this->miniapp_id,'store_id' => $param['store_id'],'is_lock' => 0])->count();
  36. return enjson(200,'成功',$card);
  37. }
  38. /**
  39. * 判断好店是否有储值卡
  40. */
  41. public function storeCard(int $store_id){
  42. $param['store_id'] = $this->request->param('store_id/d',0);
  43. $param['signkey'] = $this->request->param('signkey');
  44. $param['sign'] = $this->request->param('sign');
  45. $rel = $this->apiSign($param);
  46. if($rel['code'] != 200){
  47. return enjson(403,'签名失败');
  48. }
  49. $card = ModelCard::where(['member_miniapp_id' => $this->miniapp_id,'store_id' => $param['store_id'],'is_lock' => 0])->field('id,coupon_id,price,name,tips,coupon_num')->select();
  50. if ($card->isEmpty()) {
  51. return enjson(404,'好店未开通活动');
  52. }
  53. $user_card = CardUser::where(['store_id' => $param['store_id'],'user_id' => $this->user->id])->column('card_id');
  54. $data = [];
  55. foreach ($card as $key => $value) {
  56. $data[$key] = $value;
  57. $data[$key]['tips'] = str_replace('<img', '<img class="img" style="max-width:100%;height:auto"',dehtml($value['tips']));;
  58. $data[$key]['oncard'] = in_array($value['id'],$user_card) ? 1: 0;
  59. }
  60. $idArr = array_column($data,'oncard');
  61. array_multisort($idArr,SORT_ASC,$data);
  62. return enjson(200,'成功',$data);
  63. }
  64. /**
  65. * 读取活动优惠券
  66. */
  67. public function getCoupon(){
  68. $param['card_id'] = $this->request->param('card_id/d');
  69. $param['page'] = $this->request->param('page/d',1);
  70. $param['signkey'] = $this->request->param('signkey');
  71. $param['sign'] = $this->request->param('sign');
  72. $rel = $this->apiSign($param);
  73. if($rel['code'] != 200){
  74. return enjson($rel['code'],'签名验证失败');
  75. }
  76. $card = ModelCard::where(['id' => $param['card_id']])->field('coupon_ids')->find();
  77. if (empty($card)) {
  78. return enjson(204,'没有优惠券');
  79. }
  80. $condition[] = ['id','in',$card->coupon_ids];
  81. $condition[] = ['is_lock','=',0];
  82. $condition[] = ['is_platform','=',0];
  83. $condition[] = ['is_end','=',0];
  84. $condition[] = ['num','>',0];
  85. $condition[] = ['endtime','>',time()];
  86. $coupon = Coupon::where($condition)->field('id,name,size,tips,discount,price,types')->order('is_top desc,sort desc,size desc')->paginate(6);
  87. if ($coupon->isEmpty()) {
  88. return enjson(204,'没有优惠券');
  89. }
  90. $data = [];
  91. foreach ($coupon as $key => $value) {
  92. $data[$key]['id'] = $value['id'];
  93. $data[$key]['name'] = $value['name'];
  94. $data[$key]['size'] = round($value['size']);
  95. $data[$key]['tips'] = $value['tips'];
  96. $data[$key]['types'] = $value['types'];
  97. $data[$key]['price'] = $value['types'] ? $value['discount'].'折':$value['price'];
  98. }
  99. return enjson(200,'成功',$data);
  100. }
  101. /**
  102. * 开通商家会员卡
  103. * @param string $no
  104. * @return void
  105. */
  106. public function payment(){
  107. $param = [
  108. 'card_id' => $this->request->param('card_id/d'),
  109. 'store_id' => $this->request->param('store_id/d'),
  110. 'coupon_ids' => $this->request->param('coupon_ids/s','[]'),
  111. 'signkey' => $this->request->param('signkey'),
  112. 'sign' => $this->request->param('sign'),
  113. ];
  114. $rel = $this->apiSign($param);
  115. if($rel['code'] != 200){
  116. return enjson(403,$rel['msg']);
  117. }
  118. $param['id'] = $param['card_id'];
  119. $param['member_miniapp_id'] = $this->miniapp_id;
  120. $validate = $this->validate($param,'Card.regcard');
  121. if (true !== $validate) {
  122. return enjson(403,$validate);
  123. }
  124. $card = AllwinCard::where(['id' => $param['card_id'],'store_id' => $param['store_id'],'is_lock' => 0])->find();
  125. if(empty($card)){
  126. return enjson(403,'未找到活动信息');
  127. }
  128. $is_card = CardUser::where(['member_miniapp_id' => $this->miniapp_id,'card_id' => $param['id'],'user_id' => $this->user->id])->find();
  129. if($is_card){
  130. return enjson(403,'您已参加过当前活动');
  131. }
  132. //判断并读取邀请用户的所属店铺ID
  133. $order_no = $this->user->invite_code.order_no();
  134. $coupon_ids = ids(json_decode($param['coupon_ids']),true);
  135. //读取并判断是否VIP
  136. $card_data = [];
  137. $card_data['member_miniapp_id'] = $card->member_miniapp_id;
  138. $card_data['store_id'] = $card->store_id;
  139. $card_data['card_id'] = $card->id;
  140. $card_data['user_id'] = $this->user->id;
  141. $card_data['coupon_id'] = $card->coupon_id;
  142. $card_data['coupon_ids'] = empty($coupon_ids)?'[]':json_encode($coupon_ids);
  143. $card_data['user_card_id'] = 0;
  144. $card_data['state'] = 0;
  145. $card_data['amount'] = $card->price;
  146. $card_data['order_no'] = $order_no;
  147. $card_data['create_time'] = time();
  148. $rel = CardUserOrder::create($card_data);
  149. if(empty($rel)){
  150. return enjson(403,'活动订单创建失败,请稍后再试');
  151. }
  152. $payparm = [
  153. 'openid' => $this->user->miniapp_uid,
  154. 'miniapp_id' => $this->miniapp_id,
  155. 'name' => $card->store->name.'储值活动',
  156. 'order_no' => $order_no,
  157. 'total_fee' => $card->price*100,
  158. 'notify_url' => api(4,'allwin/cardnotify/index',$this->miniapp_id),
  159. ];
  160. //读取配置
  161. $setting = model('AllwinConfig')->getConfig($this->miniapp_id);
  162. if($setting->is_psp == 1){ //服务商模式
  163. if($card->store->mch_id){
  164. $default_mchid = model('MchId')->getMch($card->store->mch_id); //商户的商户号
  165. }else{
  166. $default_mchid = model('MchId')->getMch(0,$this->miniapp_id); //默认收款账户
  167. }
  168. if (empty($default_mchid)) {
  169. return enjson(403,'未找到商户号');
  170. }
  171. $payparm['mchid'] = $default_mchid->mchid;
  172. $payparm['profit_sharing'] = 'N';
  173. }
  174. $ispay = WechatPay::orderPay($payparm);
  175. if($ispay['code'] == 0){
  176. return enjson(403,$ispay['msg']);
  177. }
  178. return enjson(200,'成功',$ispay['data']);
  179. }
  180. /**
  181. * 查看用户所有储值卡
  182. * @return void
  183. */
  184. public function userCard(){
  185. $param = [
  186. 'page' => $this->request->param('page/d',1),
  187. 'signkey' => $this->request->param('signkey'),
  188. 'sign' => $this->request->param('sign'),
  189. ];
  190. $rel = $this->apiSign($param);
  191. if($rel['code'] != 200){
  192. return enjson(403,$rel['msg']);
  193. }
  194. //判断数量
  195. $card = CardUser::where(['user_id' => $this->user->id,'member_miniapp_id' => $this->miniapp_id])->paginate(10,true);
  196. if ($card->isEmpty()) {
  197. return json(['code'=>204,'msg'=>'没有储值卡']);
  198. }
  199. $data = [];
  200. foreach ($card as $key => $value) {
  201. if(!empty($value->couponUser->id)){
  202. $data[$key]['id'] = $value->id;
  203. $data[$key]['store_id'] = $value->store_id;
  204. $data[$key]['amount'] = $value->amount;
  205. $data[$key]['create_time'] = date('Y-m-d H:i:s',$value->create_time);
  206. $data[$key]['store_name'] = $value->store->name;
  207. $data[$key]['address'] = $value->store->address;
  208. $data[$key]['name'] = $value->card->name;
  209. $data[$key]['coupon']['id'] = $value->couponUser->id;
  210. $data[$key]['coupon']['coupon_id'] = $value->couponUser->coupon_id;
  211. $data[$key]['coupon']['name'] = $value->couponUser->name;
  212. $data[$key]['coupon']['price'] = $value->couponUser->types ? $value->couponUser->discount.'折':$value->couponUser->price;
  213. $data[$key]['coupon']['tips'] = $value->couponUser->tips;
  214. $data[$key]['coupon']['user_size'] = round($value->couponUser->user_size);
  215. $data[$key]['coupon']['types'] = $value->couponUser->types;
  216. $data[$key]['tips'] = $value->card->tips;
  217. }
  218. }
  219. return json(['code'=>200,'msg'=>"成功",'data' => $data]);
  220. }
  221. }