canyin-project/ybcy/controllers/channelApi/VipCardController.php
2024-11-01 16:07:54 +08:00

192 lines
8.0 KiB
PHP

<?php
namespace app\controllers\channelApi;
use Illuminate\Support\Facades\DB;
use Yii;
use app\models\common\Config;
use app\models\common\Member;
use app\models\common\WeChat;
use EasyWeChat\Factory;
class VipCardController extends CommonController
{
public $enableCsrfValidation = false;
//查看等级列表
public function actionLevelList(){
$uniacid=$this->wqData['uniacid'];
$cardInfo=(new \yii\db\Query())
->from('{{%ybwm_user_card}}')
->where(['deleteAt'=>0,'display'=>1,'uniacid'=>$uniacid])->orderBy('level asc')->all();
for($i=0;$i<count($cardInfo);$i++){
$rights=json_decode($cardInfo[$i]['rights'],true);
$cardInfo[$i]['rightsList']=(new \yii\db\Query())
->select('name,icon')
->from('{{%ybwm_core_category}}')
->where(['in','id',$rights])->all();
$coupon=json_decode($cardInfo[$i]['coupon'],true);
$cardInfo[$i]['couponList']=(new \yii\db\Query())
->select('name,id')
->from('{{%ybwm_coupon}}')
->where(['in','id',$coupon])->all();
}
return $this->result(1, '成功',$cardInfo);
}
//查看会员卡详情
public function actionLevelInfo(){
$result=axios_request();
$level=$result['level']?:1;
$uniacid=$this->wqData['uniacid'];
$cardInfo=(new \yii\db\Query())
->from('{{%ybwm_user_card}}')
->where(['deleteAt'=>0,'level'=>$level,'uniacid'=>$uniacid])->one();
$rights=json_decode($cardInfo['rights'],true);
$cardInfo['rightsList']=(new \yii\db\Query())
->select('name,icon')
->from('{{%ybwm_core_category}}')
->where(['in','id',$rights])->all();
$coupon=json_decode($cardInfo['coupon'],true);
$cardInfo['couponList']=(new \yii\db\Query())
->select('name,id')
->from('{{%ybwm_coupon}}')
->where(['in','id',$coupon])->all();
return $this->result(1, '成功',$cardInfo);
}
//开卡
public function actionReceiveCard(){
$result=axios_request();
$uniacid=$this->wqData['uniacid'];
$userId=$this->wqData['userId'];
$cardInfo=(new \yii\db\Query())
->from('{{%ybwm_user_card}}')
->where(['deleteAt'=>0,'display'=>1,'uniacid'=>$uniacid])->orderBy('level asc')->one();
if(!$cardInfo){
return $this->result(2, '会员卡设置有误');
}
$data['userTel']=$result['userTel'];
$data['birthday']=$result['birthday']?:'';
$data['realName']=$result['realName']?:'';
$data['vipCode']=randomAESKey(12);
$data['level']=1;
$data['sex']=$result['sex']?:1;
$transaction = Yii::$app->db->beginTransaction(); //开始事务
if($result['userTel']){
$userInfo=(new \yii\db\Query())
->from('{{%ybwm_member}}')
->where(['userTel'=>$result['userTel'],'uniacid'=>$uniacid])
->one();
if($userInfo&&$userInfo['id']!==$userId){
return $this->result(2, '该手机号已被使用,请更换其他手机号');
}
}
$res=Yii::$app->db->createCommand()->update('{{%ybwm_member}}', $data, ['id' =>$userId])->execute();
if(!$res){
$transaction->rollBack();//事务回滚
return $this->result(2, '开卡失败','修改会员信息失败');
}
$record['userId']=$userId;
$record['level']=1;
$record['uniacid']=$uniacid;
$record['createdAt']=time();
$userRecord=Yii::$app->db->createCommand()->insert('{{%ybwm_user_card_record}}', $record)->execute();
if(!$userRecord){
$transaction->rollBack();//事务回滚
return $this->result(2, '开卡失败','插入开卡记录失败');
}
if($cardInfo['isBalance']==1){
$saveBalance=Member::saveBalance($userId, 2, $cardInfo['balance'], 1, '会员卡开卡',$uniacid);
if(!$saveBalance){
$transaction->rollBack();
return $this->result(2, '失败','赠送余额失败');
}
}
if($cardInfo['isIntegral']==1){
$saveIntegral=Member::saveIntegral($userId, 2, $cardInfo['integral'], 1, '会员卡开卡',$uniacid);
if(!$saveIntegral){
$transaction->rollBack();
return $this->result(2, '失败','赠送积分失败');
}
}
if($cardInfo['isGrowth']==1){
$saveGrowth=Member::saveGrowth($userId, 2, $cardInfo['growth'], 1, '会员卡开卡',$uniacid);
if(!$saveGrowth){
$transaction->rollBack();
return $this->result(2, '失败','赠送成长值失败');
}
}
$coupon=json_decode($cardInfo['coupon'],true);
//发放优惠券
$receiveCoupon=Member::receiveCoupon($coupon, $userId,12);
if(!$receiveCoupon){
$transaction->rollBack();
return $this->result(2, '失败','发放优惠券失败');
}
$transaction->commit();
return $this->result(1, '成功');
}
//获取会员卡开卡组件参数
public function actionMemberCardParameter() {
$uniacid=$this->wqData['uniacid'];
$card=Config::getSystemSet('vipSet',$uniacid);
if(!$card['cardId']){
return $this->result(2, '未同步会员卡信息');
}
$app=Factory::officialAccount(WeChat::getWeChatTemplateConfig($uniacid));
$accessToken = $app->access_token;
$token = $accessToken->getToken(); // token 数组 token['access_token'] 字符串
$url = "https://api.weixin.qq.com/card/membercard/activate/geturl?access_token=" . $token['access_token'];
$data = array(
"card_id" => $card['cardId'],
"outer_str" => "vipCode",
);
$res = httpRequest($url, json_encode($data, JSON_UNESCAPED_UNICODE));
//print_R($res);die;
$res = json_decode($res, true);
return $this->result(1, '成功', $res['url']);
}
//激活会员卡
public function actionActivateMembership() {
$request = Yii::$app->request;
$result=axios_request();
$uniacid=$this->wqData['uniacid'];
if($request->isGet){
return $this->result(2, '请求异常');
}
$card_id = $result['card_id'];
$code = $result['code'];
$userId = $this->wqData['userId'];
$app=Factory::officialAccount(WeChat::getWeChatTemplateConfig($uniacid));
$accessToken = $app->access_token;
$token = $accessToken->getToken(); // token 数组 token['access_token'] 字符串
$userData['WeChatCardCode'] = $code;
$userData['WeChatCardId'] = $card_id;
$userData['WeChatCard'] = 1;
$userData['changeAt'] = time();
$res=Yii::$app->db->createCommand()->update('{{%ybwm_member}}', $userData, ['id' =>$userId])->execute();
if(!$res){
return $this->result(2, '激活失败');
}
$user = (new \yii\db\Query())
->select('level,integral,balance')
->from('{{%ybwm_member}}')
->where(['id'=>$this->wqData['userId']])->one();
$cardInfo=(new \yii\db\Query())
->from('{{%ybwm_user_card}}')
->where(['deleteAt'=>0,'level'=>$user['level'],'uniacid'=>$uniacid])->one();
$url2 = "https://api.weixin.qq.com/card/membercard/activate?access_token=" . $token['access_token'];
$data2 = array(
"membership_number" => $code,
"code" => $code,
"card_id" => $card_id,
"init_bonus" => $user['integral'], //初始积分
"init_bonus_record" => '用户积分同步',
"init_custom_field_value1" => $cardInfo['name'],
"init_custom_field_value2" => "¥" . $user['balance'],
);
httpRequest($url2, json_encode($data2, JSON_UNESCAPED_UNICODE));
return $this->result(1, '成功');
}
}