UserForm.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\client\models\v1;
  8. use app\models\Option;
  9. use app\models\User;
  10. use app\modules\admin\models\AlipayThirdForm;
  11. use app\modules\client\models\ApiModel;
  12. use app\utils\Alipay\alipaySdk\aop\request\AlipaySystemOauthTokenRequest;
  13. use app\utils\Wechat\WechatMini;
  14. use Exception;
  15. use Overtrue\Socialite\SocialiteManager;
  16. use Yansongda\Pay\Gateways\Wechat;
  17. use yii\helpers\Json;
  18. class UserForm extends ApiModel
  19. {
  20. public $store_id;
  21. public $user_id;
  22. public $code;
  23. public $encryptedData;
  24. public $iv;
  25. public $phone;
  26. public $phone_code;
  27. public $bind_type;
  28. public $binding;
  29. public $platform;
  30. /**
  31. * Undocumented function
  32. *
  33. * @Author LGL 24963@qq.com
  34. * @DateTime 2021-02-04
  35. * @desc: 微信小程序授权绑定手机号
  36. * @return array
  37. */
  38. public function WxBinding () {
  39. try {
  40. $session = self::getWechat()->auth->session($this->code);
  41. $decryptedData = self::getWechat()->encryptor->decryptData($session['session_key'], $this->iv, $this->encryptedData);
  42. $user = User::findOne(['id' => get_user_id()]);
  43. $user->binding = $decryptedData['phoneNumber'];
  44. if (!$user->save()) {
  45. throw new Exception("保存失败");
  46. }
  47. } catch (\Exception $e) {
  48. return [
  49. 'code' => 1,
  50. 'msg' => $e->getMessage()
  51. ];
  52. }
  53. return [
  54. 'code' => 0,
  55. 'msg' => '绑定成功',
  56. 'data' => [
  57. 'dataObj' => $decryptedData['phoneNumber']
  58. ]
  59. ];
  60. }
  61. public function userEmpower()
  62. {
  63. if (!$this->validate()) {
  64. return [
  65. 'code' => 1,
  66. 'msg' => $this->getErrorSummary(false)[0],
  67. ];
  68. }
  69. if ($this->bind_type != 2) {
  70. return [
  71. 'code' => 1,
  72. 'msg' => '参数错误'
  73. ];
  74. }
  75. $user = User::find()->where(['store_id' => $this->store_id, 'id' => $this->user_id])->one();
  76. $mobile = $this->phone;
  77. if (!$mobile) {
  78. return [
  79. 'code'=>1,
  80. 'msg'=>'请输入手机号'
  81. ];
  82. }
  83. $message = \Yii::$app->cache->get('code_cache'.$mobile);
  84. if (!$this->phone_code) {
  85. return [
  86. 'code'=>1,
  87. 'msg'=>'请输入验证码'
  88. ];
  89. }
  90. if (!$message) {
  91. return [
  92. 'code'=>1,
  93. 'msg'=>'请先发送短信'
  94. ];
  95. }
  96. if (!$message->validate(intval($this->phone_code))) {
  97. return [
  98. 'code'=>1,
  99. 'msg'=>'验证码不正确'
  100. ];
  101. }
  102. $user->binding = $this->phone;
  103. if ($user->save()) {
  104. \Yii::$app->cache->delete('code_cache'.$mobile);
  105. return [
  106. 'code' => 0,
  107. 'msg'=>'保存成功'
  108. ];
  109. } else {
  110. return [
  111. 'code' => 1,
  112. 'msg' => 'fail'
  113. ];
  114. }
  115. }
  116. public function getOpenId($code, $params = []) {
  117. $mini_id = get_mini_id();
  118. $store_id = get_store_id();
  119. if (!empty($code)) {
  120. if (is_wechat_platform()) {
  121. $app = WechatMini::getWechatConfig($store_id, $mini_id);
  122. $result = $app->auth->session($code);
  123. $params['wechat_open_id'] = $result['openid'];
  124. $params['session_key'] = $result['session_key'];
  125. }
  126. if (is_alipay_platform()) {
  127. $form = new AlipayThirdForm();
  128. $form->method = "alipay.open.auth.token.app";
  129. $form->bind_store_id = get_store_id();
  130. if (is_isv()) {
  131. $request = new AlipaySystemOauthTokenRequest();
  132. $request->setGrantType("authorization_code");
  133. $request->setCode($code);
  134. $result = $form->miniCommon($request, 1, $mini_id, 0, 1);
  135. $params['ali_user_id'] = $result->user_id;
  136. $params['ali_open_id'] = $result->open_id;
  137. } else {
  138. if (\Yii::$app->prod_is_dandianpu() && self_mini() === false) {
  139. $alipay_config = Json::decode(Option::get('one_store_alipay_config', 0, 'saas', '')['value']);
  140. } else {
  141. $config_cache = \Yii::$app->cache->get('alipay_config_cache_' . $store_id);
  142. if ($config_cache) {
  143. $alipay_config = Json::decode($config_cache);
  144. } else {
  145. $alipay_config = Json::decode(Option::get(Option::OPTOPN_KEY, $store_id, 'alipay')['value']);
  146. }
  147. }
  148. $config = [
  149. 'alipay' => [
  150. 'client_id' => $alipay_config['app_id'],
  151. 'rsa_private_key' => $alipay_config['app_private_key'],
  152. ]
  153. ];
  154. $socialite = new SocialiteManager($config);
  155. $res_code = $socialite->create('alipay')->tokenFromCode($code);
  156. $params['ali_user_id'] = $res_code['user_id'];
  157. $params['ali_open_id'] = $res_code['open_id'];
  158. }
  159. }
  160. }
  161. return [
  162. $params['wechat_open_id'], $params['ali_user_id'], $params['ali_open_id'], $params['session_key']
  163. ];
  164. }
  165. }