From a9da43c26cf34b2d591c9938388df02575208df7 Mon Sep 17 00:00:00 2001 From: sunday <153788231@qq.com> Date: Thu, 18 Apr 2024 22:16:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/components/ApiController.php | 2 +- .../member/controllers/LoginController.php | 8 +++- .../services/MemberOfficeAccountService.php | 37 +++++++++++++++++-- .../src/BsPaySdk/core/BsPayClient.php | 18 ++++----- plugins/hftx-pay/src/services/HfPay.php | 6 ++- 5 files changed, 53 insertions(+), 18 deletions(-) diff --git a/app/common/components/ApiController.php b/app/common/components/ApiController.php index 1b08ba69..e55e7aa0 100644 --- a/app/common/components/ApiController.php +++ b/app/common/components/ApiController.php @@ -55,4 +55,4 @@ class ApiController extends BaseController { return $this->ignoreAction; } -} \ No newline at end of file +} diff --git a/app/frontend/modules/member/controllers/LoginController.php b/app/frontend/modules/member/controllers/LoginController.php index 20d00bca..3b6d407d 100644 --- a/app/frontend/modules/member/controllers/LoginController.php +++ b/app/frontend/modules/member/controllers/LoginController.php @@ -18,6 +18,7 @@ use app\common\models\Protocol; use app\common\services\Session; use app\frontend\models\MemberShopInfo; use app\frontend\modules\member\services\factory\MemberFactory; +use app\frontend\modules\member\services\MemberOfficeAccountService; use app\frontend\modules\member\services\MemberService; use Illuminate\Contracts\Encryption\DecryptException; @@ -33,15 +34,17 @@ class LoginController extends ApiController $uniacid = \YunShop::app()->uniacid; $mid = Member::getMid(); - //判断是否开启微信登录 if (\YunShop::request()->show_wechat_login) { return $this->init_login(); } + if (request()->input('iscode') == 1 || request()->input('code')!=1) { + $className = new MemberOfficeAccountService(); + $className->getWechatOpenid(); + } if (!empty($type)) { $member = MemberFactory::create($type); - if ($member !== null) { $msg = $member->login(); @@ -231,6 +234,7 @@ class LoginController extends ApiController $data['title2'] = $registerSet['title2'] ? : '登录尽享各种优惠权益!'; $data['login_page_mode'] = $registerSet['login_page_mode'] ? : 0; $data['login_banner_url'] = $registerSet['login_banner'] ? yz_tomedia($registerSet['login_banner']): ''; + $data['login_diy_url'] = $registerSet['login_diy_url'] ? : ''; $registerSet['login_mode'] || $registerSet['login_mode'] = []; $data['mobile_code_login'] = !$registerSet['login_mode'] || in_array('mobile_code',$registerSet['login_mode']) ? 1 : 0;//开启手机验证码登录 diff --git a/app/frontend/modules/member/services/MemberOfficeAccountService.php b/app/frontend/modules/member/services/MemberOfficeAccountService.php index 32572500..96f4a35b 100644 --- a/app/frontend/modules/member/services/MemberOfficeAccountService.php +++ b/app/frontend/modules/member/services/MemberOfficeAccountService.php @@ -1,7 +1,7 @@ memberLogin($userinfo); if($member_id) event(new \app\common\events\member\MemberLoginEvent($member_id)); - Session::set('member_id', $member_id); setcookie('Yz-Token', encrypt($userinfo['access_token'] . '\t' . ($userinfo['expires_in'] + time()) . '\t' . $userinfo['openid'] . '\t' . $scope), time() + self::TOKEN_EXPIRE); } else { $this->_setClientRequestUrl(); $oauth->redirect()->send(); - exit; } - redirect($this->_getClientRequestUrl())->send(); exit; } + + public function getWechatOpenid() + { + $uniacid = \YunShop::app()->uniacid; + $code = \YunShop::request()->code; + $account = AccountWechats::getAccountByUniacid($uniacid); + $appId = $account->key; + $appSecret = $account->secret; + $state = 'yz-' . session_id(); + $callback = ($_SERVER['REQUEST_SCHEME'] ? $_SERVER['REQUEST_SCHEME'] : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + $authurl = $this->_getAuthBaseUrl($appId, $callback, $state); + $tokenurl = $this->_getTokenUrl($appId, $appSecret, $code); + if (!empty($code)) { + $redirect_url = base64_decode(\YunShop::request()->page).'&code=1'; + $token = \Curl::to($tokenurl) + ->asJsonResponse(true) + ->get(); + if (!empty($token) && !empty($token['errmsg']) && $token['errmsg'] == 'invalid code') { + return show_json(5, 'token请求错误'); + } + $userinfo = $this->getUserInfo($appId, $appSecret, $token); + if (is_array($userinfo) && !empty($userinfo['errcode'])) { + \Log::debug('微信登陆授权失败-' . $userinfo['errcode']); + return show_json(-3, '微信登陆授权失败'); + } + Session::set('wx_open_id', $token['openid']); + redirect($redirect_url)->send(); + } else { + redirect($authurl)->send(); + } + } + /** * 获取用户信息 * diff --git a/plugins/hftx-pay/src/BsPaySdk/core/BsPayClient.php b/plugins/hftx-pay/src/BsPaySdk/core/BsPayClient.php index 47426ef1..41ad6e80 100644 --- a/plugins/hftx-pay/src/BsPaySdk/core/BsPayClient.php +++ b/plugins/hftx-pay/src/BsPaySdk/core/BsPayClient.php @@ -1,4 +1,5 @@ merChantKey); } - // 处理页面接口请求 if ($tag) { $data['params']['needSign'] = true; // 请求加签名 $data['params']['needVerfySign'] = false; // 返回数据不验证签名 } - return self::post($data['funcCode'], $data['params'], "", $this->merChantKey); } catch (Exception $e) { echo $e->getMessage(); @@ -55,9 +54,10 @@ class BsPayClient extends BsPay /** * 对象转换数组 - * @param object $object 待转化参数对象 + * @param object $object 待转化参数对象 */ - public function objectToArray($object) { + public function objectToArray($object) + { $class = new ReflectionClass($object); $properties = $class->getProperties(); $arrayData = array(); @@ -66,8 +66,8 @@ class BsPayClient extends BsPay // 转换接口参数 foreach ($properties as $key => $value) { $attrName = $value->getName(); - $method = 'get'.ucfirst($attrName); - if ( $class->hasMethod($method) ) { + $method = 'get' . ucfirst($attrName); + if ($class->hasMethod($method)) { $attrValue = $class->getMethod($method)->invoke($object); if (isset($attrValue)) { if ($attrName != "extendInfos") { @@ -91,4 +91,4 @@ class BsPayClient extends BsPay return $data; } -} \ No newline at end of file +} diff --git a/plugins/hftx-pay/src/services/HfPay.php b/plugins/hftx-pay/src/services/HfPay.php index e1e890ca..3b15e501 100644 --- a/plugins/hftx-pay/src/services/HfPay.php +++ b/plugins/hftx-pay/src/services/HfPay.php @@ -7,6 +7,7 @@ use app\common\helpers\Url; use app\common\models\Member; use app\common\models\PayOrder; use app\common\services\Pay; +use app\common\services\Session; use BsPaySdk\core\BsPay; use BsPaySdk\core\BsPayClient; use BsPaySdk\request\V2TradePaymentJspayRequest; @@ -80,6 +81,7 @@ class HfPay extends Pay $op = "{$this->payTpye[$this->TradeType]}订单支付 订单号:" . $data['order_no']; $this->log($data['extra']['type'], $this->payTpye[$this->TradeType], $data['amount'], $op, $data['order_no'], Pay::ORDER_STATUS_NON, \YunShop::app()->getMemberId()); + $this->notify_url = Url::shopSchemeUrl('payment/hfpay/notifyUrl.php'); // 2.组装请求参数 $request = new V2TradePaymentJspayRequest(); @@ -166,7 +168,7 @@ class HfPay extends Pay case 'T_H5': $openid = Member::getOpenIdForType(\YunShop::app()->getMemberId()); $data['wx_data'] = [ - 'openid' => $openid + 'openid' => $openid?: Session::get('wx_open_id') ]; break; case 'A_JSAPI': @@ -202,4 +204,4 @@ class HfPay extends Pay { } -} \ No newline at end of file +}