init commit
This commit is contained in:
482
application/api/controller/wdsxh/AppletUserWechat.php
Normal file
482
application/api/controller/wdsxh/AppletUserWechat.php
Normal file
@@ -0,0 +1,482 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | 麦沃德科技赋能开发者,助力商协会发展
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2017~2024 www.wdsxh.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | 沃德商协会系统并不是自由软件,不加密,并不代表开源,未经许可不可自由转售和商用
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: MY WORLD Team <bd@maiwd.cn> www.maiwd.cn
|
||||
// +----------------------------------------------------------------------
|
||||
namespace app\api\controller\wdsxh;
|
||||
|
||||
use addons\wdsxh\library\Wxapp;
|
||||
use app\admin\model\wdsxh\business\Association;
|
||||
use app\api\model\wdsxh\activity\ActivityApply;
|
||||
use app\api\model\wdsxh\activity\ActivityApplyRecord;
|
||||
use app\api\model\wdsxh\activity\Order;
|
||||
use app\api\model\wdsxh\activity\Refund;
|
||||
use app\api\model\wdsxh\goods\Address;
|
||||
use app\api\model\wdsxh\jielong\JielongFeedback;
|
||||
use app\api\model\wdsxh\member\Cert;
|
||||
use app\api\model\wdsxh\member\Member;
|
||||
use app\api\model\wdsxh\member\MemberApply;
|
||||
use app\api\model\wdsxh\member\MemberExpireMessage;
|
||||
use app\api\model\wdsxh\member\Pay;
|
||||
use app\api\model\wdsxh\member\Promotion;
|
||||
use app\api\model\wdsxh\member\Visitor;
|
||||
use app\api\model\wdsxh\questionnaire\Questionnaire;
|
||||
use app\api\model\wdsxh\questionnaire\Render;
|
||||
use app\api\model\wdsxh\UserWechat;
|
||||
use app\common\controller\Api;
|
||||
use app\common\library\Token;
|
||||
use app\common\model\User;
|
||||
use think\Db;
|
||||
|
||||
/**
|
||||
* Class AppletUserWechat
|
||||
* Desc 小程序微信用户注册登录
|
||||
* Create on 2024/3/7 10:03
|
||||
* Create by wangyafang
|
||||
*/
|
||||
class AppletUserWechat extends Api
|
||||
{
|
||||
protected $noNeedLogin = ['is_register','get_phone','register','login'];
|
||||
protected $noNeedRight = ['*'];
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
|
||||
$configObj = (new \app\admin\model\wdsxh\Config())->where('id',1)->find();
|
||||
if (empty($configObj['applet_appid'])) {
|
||||
$this->error('小程序AppID未配置');
|
||||
}
|
||||
if (empty($configObj['applet_secret'])) {
|
||||
$this->error('小程序AppSecret未配置');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Desc 微信小程序是否注册
|
||||
* Create on 2024/3/7 10:05
|
||||
* Create by wangyafang
|
||||
*/
|
||||
public function is_register()
|
||||
{
|
||||
if(!$this->request->isGet()) {
|
||||
$this->error('请求类型错误');
|
||||
}
|
||||
$code=$this->request->param('code');
|
||||
if(empty($code)){
|
||||
$this->error('code参数错误');
|
||||
}
|
||||
$data=Wxapp::wxlogin($code);
|
||||
if(empty($data['openid'])){
|
||||
$this->error('小程序登录失败',$data);
|
||||
}
|
||||
$openid=$data['openid'];
|
||||
$userWechatObj = (new UserWechat())->where('applet_openid',$openid)->find();
|
||||
|
||||
$auth_status = !empty($userWechatObj) ? 1 : 2;
|
||||
$this->success('请求成功!',['auth_status'=>$auth_status]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Desc 微信小程序注册
|
||||
* Create on 2024/3/7 10:06
|
||||
* Create by wangyafang
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
if(!$this->request->isPost()) {
|
||||
$this->error('请求类型错误');
|
||||
}
|
||||
|
||||
$code=$this->request->post('code');
|
||||
$param = $this->request->post();
|
||||
|
||||
if(empty($code)){
|
||||
$this->error('code参数错误');
|
||||
}
|
||||
$data=Wxapp::wxlogin($code);
|
||||
if(empty($data['openid'])){
|
||||
$this->error('小程序注册失败',$data);
|
||||
}
|
||||
$openid=$data['openid'];
|
||||
//todo 腾讯校验增加开关
|
||||
$security_text_switch = (new \app\admin\model\wdsxh\Config())->where('id','1')->value('security_text_switch');
|
||||
if ($security_text_switch == '1' && isset($param['nickname']) && !empty($param['nickname'])) {
|
||||
$result = Wxapp::checkSecurityText($openid,$param['nickname']);
|
||||
if ($result != 1) {
|
||||
if ($result == 2) {
|
||||
$this->error('文本内容输入不合规,请重新输入');
|
||||
} else {
|
||||
$this->error('errcode:'.$result['errcode'].',errmsg:'.$result['errmsg']);
|
||||
}
|
||||
}
|
||||
}
|
||||
$nickname_avatar_data = $this->get_nickname_avatar();
|
||||
$avatar = (isset($param['avatar']) && !empty($param['avatar'])) ? $param['avatar'] : $nickname_avatar_data['avatar'];
|
||||
$param['nickname'] = (isset($param['nickname']) && !empty($param['nickname'])) ? $param['nickname'] : $nickname_avatar_data['nickname'];
|
||||
$parent_wechat_id = $this->request->post('parent_wechat_id',0);
|
||||
//todo 后台统一用户同一时间出现3次
|
||||
$userWechatCheckObj = (new UserWechat())->where('applet_openid',$openid)->find();
|
||||
if ($userWechatCheckObj) {
|
||||
$this->error('微信小程序数据错误,删除小程序重新进入,试下');
|
||||
}
|
||||
|
||||
Db::startTrans();
|
||||
try{
|
||||
$user=User::create(array(
|
||||
'group_id'=>1,
|
||||
'status'=>'normal',
|
||||
'joinip'=>request()->ip(),
|
||||
'jointime'=>time(),
|
||||
'nickname'=>$param['nickname'],
|
||||
'avatar'=>$avatar,
|
||||
),true);
|
||||
$userWechatObj = UserWechat::create(array(
|
||||
'user_id' =>$user->id,
|
||||
'applet_openid'=>$openid,
|
||||
'nickname'=>$param['nickname'],
|
||||
'avatar'=>$avatar,
|
||||
'channel'=>1,
|
||||
'parent_wechat_id'=>$parent_wechat_id,
|
||||
));
|
||||
// 提交事务
|
||||
Db::commit();
|
||||
} catch (\Exception $e) {
|
||||
// 回滚事务
|
||||
Db::rollback();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
$member_id = (new Member())->where('wechat_id',$parent_wechat_id)->value('id');
|
||||
if ($parent_wechat_id && $member_id) {
|
||||
$promotionModel = new Promotion();
|
||||
$promotion_data = array(
|
||||
'wechat_id' => $parent_wechat_id,
|
||||
'member_id'=>$member_id,
|
||||
);
|
||||
$promotionModel->data($promotion_data);
|
||||
$promotionModel->allowField(true)->save();
|
||||
}
|
||||
|
||||
$this->auth->direct($user->id);
|
||||
$userObj = $this->auth->getUserinfo();
|
||||
$userObj['avatar'] = wdsxh_full_url($userObj['avatar']);
|
||||
$this->success('请求成功',$userObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Desc 微信小程序登录
|
||||
* Create on 2024/3/7 10:06
|
||||
* Create by wangyafang
|
||||
*/
|
||||
public function login()
|
||||
{
|
||||
if(!$this->request->isPost()) {
|
||||
$this->error('请求类型错误');
|
||||
}
|
||||
|
||||
$code = $this->request->param('code');
|
||||
if(empty($code)){
|
||||
$this->error('code参数错误');
|
||||
}
|
||||
$data=Wxapp::wxlogin($code);
|
||||
if(empty($data['openid'])){
|
||||
$this->error('小程序登录失败',$data);
|
||||
}
|
||||
$openid=$data['openid'];
|
||||
$userWechatObj = (new UserWechat())->where('applet_openid',$openid)->find();
|
||||
|
||||
$userObj = User::get($userWechatObj['user_id']);
|
||||
if (!$userObj) {
|
||||
$userObj = User::create(array(
|
||||
'group_id'=>1,
|
||||
'status'=>'normal',
|
||||
'joinip'=>request()->ip(),
|
||||
'jointime'=>time(),
|
||||
'avatar'=> $userWechatObj['avatar'],
|
||||
'nickname'=> $userWechatObj['nickname'],
|
||||
'mobile'=> $userWechatObj['mobile'],
|
||||
),true);
|
||||
$userWechatObj->user_id = $userObj->id;
|
||||
$userWechatObj->save();
|
||||
}
|
||||
if (empty($userWechatObj['openid'])) {
|
||||
$userWechatObj->applet_openid = $openid;
|
||||
$userWechatObj->save();
|
||||
}
|
||||
|
||||
$this->auth->direct($userObj->id);
|
||||
$userObj = $this->auth->getUserinfo();
|
||||
$userObj['avatar'] = wdsxh_full_url($userObj['avatar']);
|
||||
$this->success('请求成功',$userObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Desc 获取微信小程序用户手机号
|
||||
* Create on 2024/3/7 11:16
|
||||
* Create by wangyafang
|
||||
*/
|
||||
public function get_phone(){
|
||||
if(!$this->request->isGet()) {
|
||||
$this->error('请求类型错误');
|
||||
}
|
||||
$code=$this->request->get('code');
|
||||
$iv=$this->request->get('iv');
|
||||
$encryptedData=$this->request->get('encryptedData','','trim');
|
||||
if(empty($code)){
|
||||
$this->error('code 参数错误');
|
||||
}
|
||||
if(empty($iv)){
|
||||
$this->error('iv 参数错误');
|
||||
}
|
||||
if(empty($encryptedData)){
|
||||
$this->error('encryptedData 参数错误');
|
||||
}
|
||||
$data=Wxapp::phone($code,$iv,$encryptedData);
|
||||
|
||||
|
||||
if (isset($data['phoneNumber'])) {
|
||||
$userWechatObj = (new UserWechat())->where('mobile',$data['phoneNumber'])->find();
|
||||
$auth_status = !empty($userWechatObj) ? 1 : 2;
|
||||
$data['auth_status'] = $auth_status;
|
||||
} else {
|
||||
$this->error('获取手机号失败');
|
||||
}
|
||||
|
||||
$this->success('请求成功',$data);
|
||||
}
|
||||
|
||||
private function get_nickname_avatar()
|
||||
{
|
||||
$avatar = Association::where('id',1)->value('logo');
|
||||
if (empty($avatar)) {
|
||||
$avatar = '/assets/addons/wdsxh/img/avatar.png';
|
||||
}
|
||||
|
||||
$current_user_id = User::order('id','desc')->limit(1)->value('id');
|
||||
if (!$current_user_id) {
|
||||
$current_user_id = 1;
|
||||
} else {
|
||||
$current_user_id = bcadd($current_user_id, 1);
|
||||
}
|
||||
$nickname = '用户'.$current_user_id;
|
||||
|
||||
return array(
|
||||
'avatar'=>$avatar,
|
||||
'nickname'=>$nickname
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Desc 绑定手机号
|
||||
* Create on 2024/10/15 17:14
|
||||
* Create by wangyafang
|
||||
*/
|
||||
public function bind_mobile()
|
||||
{
|
||||
if(!$this->request->isPost()) {
|
||||
$this->error('请求类型错误');
|
||||
}
|
||||
$user_id = $this->auth->id;
|
||||
$code=$this->request->post('code');
|
||||
$iv=$this->request->post('iv');
|
||||
$encryptedData=$this->request->post('encryptedData','','trim');
|
||||
if(empty($code)){
|
||||
$this->error('code 参数错误');
|
||||
}
|
||||
if(empty($iv)){
|
||||
$this->error('iv 参数错误');
|
||||
}
|
||||
if(empty($encryptedData)){
|
||||
$this->error('encryptedData 参数错误');
|
||||
}
|
||||
$data=Wxapp::phone($code,$iv,$encryptedData);
|
||||
|
||||
if (!isset($data['phoneNumber'])) {
|
||||
$this->error('获取手机号失败');
|
||||
}
|
||||
|
||||
$mobile = $data['phoneNumber'];
|
||||
|
||||
$userWechatObj = $appletUserWechatObj = (new UserWechat())->where('user_id',$user_id)->find();
|
||||
|
||||
$byMObileQueryUserWechat = (new UserWechat())->where('mobile',$mobile)->find();
|
||||
if (!empty($byMObileQueryUserWechat) && !empty($userWechatObj) && !empty($byMObileQueryUserWechat['applet_openid']) && ($byMObileQueryUserWechat['applet_openid'] != $userWechatObj['applet_openid'])) {
|
||||
$this->error('手机号已被其他微信使用');
|
||||
}
|
||||
|
||||
$wananchiWhere['wananchi_openid'] = ['not null', '']; //not null
|
||||
$wananchiUserWechatObj = (new UserWechat())->where('mobile',$mobile)->where($wananchiWhere)->find();
|
||||
|
||||
|
||||
if ($wananchiUserWechatObj) {//已经在公众号使用一段时间
|
||||
$wananchiUserObj = (new User())->where('id',$wananchiUserWechatObj['user_id'])->find();
|
||||
$wananchiData = $wananchiUserWechatObj;
|
||||
$result = false;
|
||||
$activityApplyModel = new ActivityApply();
|
||||
$activityApplyRecordModel = new ActivityApplyRecord();
|
||||
$activityOrderModel = new Order();
|
||||
$activityRefundModel = new Refund();
|
||||
$businessModel = new \app\api\model\wdsxh\business\Business();
|
||||
$demandModel = new \app\api\model\wdsxh\Demand();
|
||||
$jielongFeedbackModel = new JielongFeedback();
|
||||
$mallOrderModel = new \app\admin\model\wdsxh\mall\Order();
|
||||
$mallUserAddressModel = new Address();
|
||||
$memberModel = new Member();
|
||||
$memberApplyModel = new MemberApply();
|
||||
$memberCertModel = new Cert();
|
||||
$memberExpireMessageModel = new MemberExpireMessage();
|
||||
$memberPayModel = new Pay();
|
||||
$memberPromotionModel = new Promotion();
|
||||
$memberVisitorModel = new Visitor();
|
||||
$questionnaireModel = new Questionnaire();
|
||||
$questionnaireRenderModel = new Render();
|
||||
$token_user_id = $wananchiUserWechatObj['user_id'];
|
||||
|
||||
Db::startTrans();
|
||||
try{
|
||||
$result = (new UserWechat())->save([
|
||||
'wananchi_openid' => $wananchiData['wananchi_openid'],
|
||||
'member_id' => $wananchiData['member_id'],
|
||||
],['id' => $appletUserWechatObj['id']]);
|
||||
$memberModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$activityApplyModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$activityApplyRecordModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$activityOrderModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$activityRefundModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$businessModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$demandModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$jielongFeedbackModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$mallOrderModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$mallUserAddressModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$memberApplyModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$memberCertModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$memberExpireMessageModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$memberPayModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$memberPromotionModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$memberVisitorModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$questionnaireModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
$questionnaireRenderModel->save([
|
||||
'wechat_id' => $appletUserWechatObj['id'],
|
||||
],['wechat_id' => $wananchiData['id']]);
|
||||
(new UserWechat())->save([
|
||||
'parent_wechat_id' => $appletUserWechatObj['id'],
|
||||
],['parent_wechat_id' => $wananchiData['id']]);
|
||||
|
||||
$wananchiUserWechatObj->delete();
|
||||
$wananchiUserObj->delete();
|
||||
// 提交事务
|
||||
Db::commit();
|
||||
} catch (\Exception $e) {
|
||||
// 回滚事务
|
||||
Db::rollback();
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
$wechat_id = $wananchiData['id'];
|
||||
$where[] = ['exp',Db::raw("FIND_IN_SET($wechat_id,verifying_wechat_ids)")];
|
||||
$activityModel = new \app\api\model\wdsxh\activity\Activity();
|
||||
$activityVerifyingData = $activityModel
|
||||
->where($where)
|
||||
->select();
|
||||
if (!empty($activityVerifyingData)) {
|
||||
foreach ($activityVerifyingData as $v) {
|
||||
$verifying_wechat_ids_array = explode(',',$v['verifying_wechat_ids']);
|
||||
foreach ($verifying_wechat_ids_array as $kk=>&$vv) {
|
||||
if ($vv == $wechat_id) {
|
||||
$vv = $appletUserWechatObj['id'];
|
||||
}
|
||||
}
|
||||
$verifying_wechat_ids = implode(',',$verifying_wechat_ids_array);
|
||||
$v->verifying_wechat_ids = $verifying_wechat_ids;
|
||||
$v->save();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (false === $result) {
|
||||
$this->error('整合公众号数据失败');
|
||||
}
|
||||
Token::clear($token_user_id);
|
||||
}
|
||||
|
||||
$appletUserWechatObj->mobile = $mobile;
|
||||
$result = $appletUserWechatObj->save();
|
||||
|
||||
if (false === $result) {
|
||||
$this->error('绑定失败');
|
||||
}
|
||||
|
||||
$memberApplyObj = (new MemberApply())
|
||||
->where('mobile',$mobile)
|
||||
->where('state','2')
|
||||
->where('channel',3)
|
||||
->where('child_state','6')
|
||||
->where('pay_method','1')
|
||||
->find();
|
||||
$memberObj = (new Member())->where('mobile',$mobile)->find();
|
||||
if ($memberApplyObj && empty($memberApplyObj['wechat_id']) && $memberObj && empty($memberObj['wechat_id'])) {
|
||||
$memberApplyObj->wechat_id = $userWechatObj->id;
|
||||
$memberApplyObj->save();
|
||||
|
||||
$memberObj->wechat_id = $userWechatObj->id;
|
||||
$memberObj->save();
|
||||
|
||||
$memberPayObj = (new Pay())->where('member_id',$memberObj['id'])->where('paid','2')
|
||||
->where('channel','3')
|
||||
->where('pay_method','4')
|
||||
->where('delivery_state',2)
|
||||
->order('id desc')
|
||||
->find();
|
||||
if ($memberPayObj && empty($memberPayObj['wechat_id'])) {
|
||||
$memberPayObj->wechat_id = $userWechatObj->id;
|
||||
$memberPayObj->save();
|
||||
}
|
||||
}
|
||||
|
||||
$this->success('绑定成功',$data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user