| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\client\models\v1\alipay;
- use app\models\User;
- use app\modules\admin\models\AlipayThirdForm;
- use app\utils\Alipay\Alipay;
- use Overtrue\Socialite\SocialiteManager;
- use yii\base\BaseObject;
- use yii\base\Model;
- use yii\helpers\Json;
- use app\models\SaasUser;
- use app\modules\client\models\v1\BindForm;
- use app\models\Share;
- use yii\log\Logger;
- use app\utils\Alipay\alipaySdk\aop\request\AlipaySystemOauthTokenRequest;
- use AopClient;
- use app\models\StoreAliMini;
- use app\models\Option;
- include_once "./utils/Alipay/alipaySdk/aop/AopClient.php";
- class AuthForm extends \app\modules\client\models\ApiModel
- {
- public $store_id;
- public $authCode;
- public $isv_appid;
- public $response;
- public $mini_id;
- public $share_user_id;
- /**
- * @var SocialiteManager $socialite
- */
- public $socialite;
- public function rules()
- {
- return [
- [['store_id', 'share_user_id','mini_id'], 'integer'],
- [['authCode', 'response'], 'required'],
- [['authCode', 'response'], 'trim'],
- [['authCode', 'response','isv_appid'], 'string']
- ];
- }
- /**
- *
- */
- public function codeAnalysis()
- {
- $user = $this->socialite->create('alipay')->tokenFromCode($this->authCode);
- \Yii::warning($user);
- }
- /**
- * 用户登录注册
- * @return array|mixed|null
- */
- public function analysisPhone()
- {
- \Yii::getLogger()->log("支付宝配置",Logger::LEVEL_ERROR);
- if (!$this->validate()) {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0]
- ];
- }
- $response = Json::decode($this->response);
- if (empty($response['response'])) {
- return [
- 'code' => 1,
- 'msg' => 'response 不能为空'
- ];
- }
- if(is_isv()){
- $aop = new AopClient();
- // $store = StoreAliMini::find()->where(['id'=>$this->mini_id])->one();
- $aop->appId = Option::get("alipay_appid",0,'saas')['value'];;
- $aop->rsaPrivateKey = Option::get("alipay_app_private_key",0,'saas')['value'];
- $aop->alipayrsaPublicKey=Option::get("alipay_public_key",0,'saas')['value'];
- $aop->apiVersion = '1.0';
- $aop->signType = "RSA2";
- $aop->postCharset="utf-8";
- $aop->format='json';
- $request = new AlipaySystemOauthTokenRequest();
- $request->setGrantType("authorization_code");
- $request->setCode($this->authCode);
- $auth_token = Option::get("ali_template_token",0,'saas')['value'];
- if(!empty($this->mini_id)){
- $mini = StoreAliMini::findOne($this->mini_id);
- $auth_token = !empty($mini->auth_token)?$mini->auth_token:$auth_token;
- }
- $result = $aop->execute ($request, null, $auth_token); //第三方应用代小程序模板调用接口必须传入
- $result = json_encode($result);
- $result = json_decode($result,true);
- $token = $result['alipay_system_oauth_token_response'];
- }else{
- // 获取user_id
- $token = $this->socialite->create('alipay')->tokenFromCode($this->authCode);
- }
- \Yii::getLogger()->log($token,Logger::LEVEL_ERROR);
- if (empty($token['user_id'])) {
- return [
- 'code' => 1,
- 'msg' => '获取user_id失败'
- ];
- }
- $alipay_config = self::getAlipayConfig();
- if (empty($alipay_config) && !is_isv()) {
- return [
- 'code' => 1,
- 'msg' => '支付宝配置信息不能为空'
- ];
- }
- $aes_key = $alipay_config['aes_key'];
- if(is_isv()){
- $aes_key = Option::get("ali_template_aes",0,'saas')['value'];//支付宝三方小程序模板AES密钥
- if(!empty($this->mini_id)){
- $mini = StoreAliMini::findOne($this->mini_id);
- $aes_key = !empty($mini->aes_key)?$mini->aes_key:$aes_key;
- }
- }
- $result = openssl_decrypt(base64_decode($response['response']), 'AES-128-CBC', base64_decode($aes_key), OPENSSL_RAW_DATA);
- // 获取手机号解密
- if (!$result) {
- return [
- 'code' => 1,
- 'msg' => '解密失败'
- ];
- }
- $res = Json::decode($result);
- if ($res['code'] != '10000') {
- return $res;
- }
- $mobile = $res['mobile'];
- // 创建平台会员saas_user
- $saas_user = SaasUser::find()->where(['mobile' => $mobile, 'is_delete' => SaasUser::DELETE_STATUS_FALSE])->one();
- if (!$saas_user) {
- $saas_user = new SaasUser();
- $saas_user->access_token = \Yii::$app->security->generateRandomString();
- $saas_user->avatar = \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl . '/web/v1/statics/images/avatar.png';
- $saas_user->mobile = $mobile;
- $saas_user->name = substr_replace($mobile, '****', 3, 4);
- $saas_user->store_id = $this->store_id;
- $saas_user->save();
- }
- $user = User::findOne(['store_id' => $this->store_id, 'binding' => $mobile]);
- if (!$user) {
- $user = new User();
- $user->type = User::USER_TYPE_NORMAL;
- $user->binding = $mobile;
- $user->avatar_url = \Yii::$app->request->hostInfo . '/web/v1/statics/images/avatar.png';
- $user->username = \Yii::$app->security->generateRandomString();
- $user->nickname = substr_replace($mobile, '******', 3, 2);
- $user->password = \Yii::$app->security->generatePasswordHash(\Yii::$app->security->generateRandomString(), 5);
- $user->auth_key = \Yii::$app->security->generateRandomString();
- $user->access_token = \Yii::$app->security->generateRandomString();
- $user->is_delete = User::USER_NOT_DELETE;
- $user->alipay_open_id = $token['user_id'];
- $user->store_id = $this->store_id;
- $user->platform = User::USER_FROM_ALIPAY; // 支付宝
- if (!$user->save()) {
- return [
- 'code' => 1,
- 'msg' => '登录失败',
- 'data' => $user->getErrorSummary(false)[0]
- ];
- }
- } else {
- if (empty($user->alipay_open_id)) {
- $user->alipay_open_id = $token['user_id'];
- $user->save();
- }
- }
- if ($user->blacklist == '1') {
- return [
- 'code' => 1,
- 'msg' => '您的账号已被限制登录!',
- ];
- }
- $share = $share_user = null;
- if ($this->share_user_id > 0) {
- // 绑定上下级
- $bindForm = new BindForm();
- $bindForm->store_id = $this->store_id;
- $bindForm->user_id = $user->id;
- $bindForm->parent_id = $this->share_user_id;
- $bindForm->condition = 0;
- $bindForm->save();
- }
- if ($user->parent_id > 0) {
- $share = Share::findOne(['user_id' => $user->parent_id]);
- $share_user = User::findOne(['id' => $share->user_id]);
- }
- $data = [
- 'nickname' => $saas_user->name,
- 'binding' => $saas_user->mobile,
- 'id' => $user->id,
- 'is_distributor' => $user->is_distributor ? $user->is_distributor : 0,
- 'avatar_url' => $saas_user->avatar,
- 'errCode' => 0,
- 'parent' => $share ? ($share->name ? $share->name : $share_user->nickname) : '总店',
- 'money' => $user->money ? $user->money : 0,
- 'blacklist' => $user->blacklist ? $user->blacklist : 0,
- 'access_token' => $saas_user->access_token,
- 'level' => $user->level ? $user->level : -1,
- 'is_clerk' => $user->is_clerk === null ? 0 : $user->is_clerk,
- 'integral' => $user->integral === null ? 0 : $user->integral,
- 'is_saas_clerk' => (int)$user->is_saas_clerk,
- ];
- return [
- 'code' => 0,
- 'msg' => '登录成功',
- 'data' => $data,
- ];
- }
- }
|