From 8d1f68a61cfe53f3b10d53ad54c50a76d87b857b Mon Sep 17 00:00:00 2001
From: gongfuxiang <2499232802@qq.com>
Date: Wed, 2 Jan 2019 01:55:03 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
application/api/controller/User.php | 39 +++
extend/base/Wechat.php | 238 ++++++++++++++++++
public/appmini/old/wechat/app.js | 43 ++--
public/appmini/old/wechat/app.json | 4 +-
.../appmini/old/wechat/pages/cart/cart.json | 2 -
.../appmini/old/wechat/pages/cart/cart.wxml | 66 +++--
.../appmini/old/wechat/pages/login/login.js | 12 +-
.../appmini/old/wechat/pages/login/login.wxml | 9 +-
.../appmini/old/wechat/pages/login/login.wxss | 10 +
9 files changed, 355 insertions(+), 68 deletions(-)
create mode 100644 extend/base/Wechat.php
diff --git a/application/api/controller/User.php b/application/api/controller/User.php
index 033537560..1593caf1f 100644
--- a/application/api/controller/User.php
+++ b/application/api/controller/User.php
@@ -102,6 +102,45 @@ class User extends Common
}
}
+ /**
+ * 微信小程序获取用户授权
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @date 2018-11-06
+ * @desc description
+ */
+ public function WechatUserAuth()
+ {
+ $result = (new \base\Wechat('111', '222'))->GetAuthSessionKey(input('authcode'));
+ if($result !== false)
+ {
+ return DataReturn('授权登录成功', 0, $result);
+ }
+ return DataReturn('授权登录失败', -100);
+ }
+
+ /**
+ * 微信小程序获取用户信息
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @date 2018-11-06
+ * @desc description
+ */
+ public function WechatUserInfo()
+ {
+ $result = (new \base\Wechat('100', '200'))->DecryptData(R('encrypted_data'), input('iv'), input('openid'));
+
+ if(is_array($result))
+ {
+ $result['openid'] = $result['openId'];
+ $result['referrer']= isset($this->data_post['referrer']) ? intval($this->data_post['referrer']) : 0;
+ return UserService::AuthUserProgram($result, 'wechat_openid');
+ }
+ return DataReturn('获取用户信息失败', -100);
+ }
+
/**
* 百度小程序获取用户信息
* @author Devil
diff --git a/extend/base/Wechat.php b/extend/base/Wechat.php
new file mode 100644
index 000000000..7bbbf0867
--- /dev/null
+++ b/extend/base/Wechat.php
@@ -0,0 +1,238 @@
+_appid = $app_id;
+ $this->_appsecret = $app_secret;
+ }
+
+ /**
+ * [DecryptData 检验数据的真实性,并且获取解密后的明文]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2017-12-30T18:20:53+0800
+ * @param [string] $encrypted_data [加密的用户数据]
+ * @param [string] $iv [与用户数据一同返回的初始向量]
+ * @param [string] $openid [解密后的原文]
+ * @return [array|string] [成功返回用户信息数组, 失败返回错误信息]
+ */
+ public function DecryptData($encrypted_data, $iv, $openid)
+ {
+ // 登录授权session
+ $login_key = 'wechat_user_login_'.$openid;
+ $session_data = GS($login_key);
+ if($session_data === false)
+ {
+ return 'session key不存在';
+ }
+ $aes_key = base64_decode($session_data['session_key']);
+
+ if(strlen($iv) != 24)
+ {
+ return 'iv长度错误';
+ }
+ $aes_iv = base64_decode($iv);
+
+ $aes_cipher = base64_decode($encrypted_data);
+ $result = openssl_decrypt($aes_cipher, "AES-128-CBC", $aes_key, 1, $aes_iv);
+ $data = json_decode($result, true);
+ if($data == NULL)
+ {
+ return '数据解密失败';
+ }
+ if($data['watermark']['appid'] != $this->_appid )
+ {
+ return 'appid不匹配';
+ }
+
+ // 缓存存储
+ $data_key = 'wechat_user_info_'.$openid;
+ SS($data_key, $data);
+
+ return $data;
+ }
+
+ /**
+ * [GetAuthSessionKey 根据授权code获取 session_key 和 openid]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2017-12-30T18:20:53+0800
+ * @param [string] $authcode [用户授权码]
+ * @return [string|boolean] [失败false, 成功返回appid|]
+ */
+ public function GetAuthSessionKey($authcode)
+ {
+ // 请求获取session_key
+ $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$this->_appid.'&secret='.$this->_appsecret.'&js_code='.$authcode.'&grant_type=authorization_code';
+ $result = $this->HttpRequestGet($url);
+ if(!empty($result['openid']))
+ {
+ // 从缓存获取用户信息
+ $key = 'wechat_user_login_'.$result['openid'];
+
+ // 缓存存储
+ SS($key, $result);
+ return $result['openid'];
+ }
+ return false;
+ }
+
+ /**
+ * [MiniQrCodeCreate 二维码创建]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2018-01-02T19:53:10+0800
+ * @param [array] $params [输入参数]
+ * @return [string] [成功返回文件流, 失败则空]
+ */
+ public function MiniQrCodeCreate($params)
+ {
+ // 参数校验
+ if(empty($params['path']))
+ {
+ return '页面地址不能为空';
+ }
+ $params['width'] = empty($params['width']) ? 1000 : intval($params['width']);
+
+ // 获取access_token
+ $access_token = $this->GetMiniAccessToken();
+ if($access_token === false)
+ {
+ return '';
+ }
+
+ // 网络请求
+ $url = 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token='.$access_token;
+ $data = [
+ 'path' => $params['path'],
+ 'width' => $params['width'],
+ ];
+ return $this->HttpRequestPost($url, json_encode($data), false);
+ }
+
+ /**
+ * [GetMiniAccessToken 获取access_token]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2018-01-02T19:53:42+0800
+ */
+ private function GetMiniAccessToken()
+ {
+ // 缓存key
+ $key = $this->_appid.'_access_token';
+ $result = GS($key);
+ if($result !== false)
+ {
+ if($result['expires_in'] > time())
+ {
+ return $result['access_token'];
+ }
+ }
+
+ // 网络请求
+ $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->_appid.'&secret='.$this->_appsecret;
+ $result = $this->HttpRequestGet($url);
+ if(!empty($result['access_token']))
+ {
+ // 缓存存储
+ $result['expires_in'] += time();
+ SS($key, $result);
+ return $result['access_token'];
+ }
+ return false;
+ }
+
+ /**
+ * [HttpRequestGet get请求]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2018-01-03T19:21:38+0800
+ * @param [string] $url [url地址]
+ * @return [array] [返回数据]
+ */
+ private function HttpRequestGet($url)
+ {
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 500);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
+ curl_setopt($curl, CURLOPT_URL, $url);
+
+ $res = curl_exec($curl);
+ curl_close($curl);
+ return json_decode($res, true);
+ }
+
+ /**
+ * [HttpRequestPost curl模拟post]
+ * @author Devil
+ * @blog http://gong.gg/
+ * @version 1.0.0
+ * @datetime 2017-09-25T09:10:46+0800
+ * @param [string] $url [请求地址]
+ * @param [array] $data [发送的post数据]
+ * @param [array] $is_parsing [是否需要解析数据]
+ * @return [array] [返回的数据]
+ */
+ private function HttpRequestPost($url, $data, $is_parsing = true)
+ {
+ $curl = curl_init();
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_TIMEOUT, 500);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
+ curl_setopt($curl, CURLOPT_URL, $url);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
+ curl_setopt($curl, CURLOPT_POST, true);
+
+ $res = curl_exec($curl);
+ if($is_parsing === true)
+ {
+ return json_decode($reponse, true);
+ }
+ return $res;
+ }
+
+}
+?>
\ No newline at end of file
diff --git a/public/appmini/old/wechat/app.js b/public/appmini/old/wechat/app.js
index e57f341a4..fa8687fb5 100755
--- a/public/appmini/old/wechat/app.js
+++ b/public/appmini/old/wechat/app.js
@@ -205,18 +205,6 @@ App({
}
},
- /**
- * 获取本系统用户信息
- */
- GetMyUserInfo() {
- var user = this.GetUserCacheInfo();
- if (user == false) {
- return null;
- } else {
- return user.my_user || null;
- }
- },
-
/**
* 从缓存获取用户信息
*/
@@ -225,9 +213,6 @@ App({
if ((user || null) == null) {
return false;
}
- if ((user.my_user || null) == null) {
- user.my_user = null;
- }
return user;
},
@@ -258,17 +243,21 @@ App({
// 请求授权接口
wx.getSetting({
success(res) {
+ console.log('app.js 授权部分');
+ wx.navigateTo({
+ url: "/pages/login/login"
+ });
if (!res.authSetting['scope.userInfo']) {
- wx.authorize({
- scope: 'scope.userInfo',
- success() {
- $this.user_auth_login(object, method);
- },
- fail: (e) => {
- wx.hideLoading();
- $this.showToast('授权失败');
- }
- });
+ // wx.authorize({
+ // scope: 'scope.userInfo',
+ // success() {
+ // $this.user_auth_login(object, method);
+ // },
+ // fail: (e) => {
+ // wx.hideLoading();
+ // $this.showToast('授权失败');
+ // }
+ // });
} else {
$this.user_auth_login(object, method);
}
@@ -314,7 +303,7 @@ App({
success: (res) => {
if (res.code) {
wx.request({
- url: $this.get_request_url('GetWechatUserLogin', 'User'),
+ url: $this.get_request_url('WechatUserAuth', 'user'),
method: 'POST',
data: { authcode: res.code },
dataType: 'json',
@@ -358,7 +347,7 @@ App({
success: function (res) {
// 远程解密数据
wx.request({
- url: $this.get_request_url('GetWechatUserInfo', 'User'),
+ url: $this.get_request_url('WechatUserInfo', 'user'),
method: 'POST',
data: { encrypted_data: res.encryptedData, iv: res.iv, openid: openid },
dataType: 'json',
diff --git a/public/appmini/old/wechat/app.json b/public/appmini/old/wechat/app.json
index f22cf359e..955c7c089 100755
--- a/public/appmini/old/wechat/app.json
+++ b/public/appmini/old/wechat/app.json
@@ -1,8 +1,8 @@
{
- "pages": [
+ "pages": ["pages/cart/cart",
"pages/index/index",
"pages/goods-category/goods-category",
- "pages/cart/cart",
+
"pages/user/user",
"pages/web-view/web-view",
"pages/login/login",
diff --git a/public/appmini/old/wechat/pages/cart/cart.json b/public/appmini/old/wechat/pages/cart/cart.json
index c75670bbf..312ca36b1 100755
--- a/public/appmini/old/wechat/pages/cart/cart.json
+++ b/public/appmini/old/wechat/pages/cart/cart.json
@@ -1,7 +1,5 @@
{
"enablePullDownRefresh": true,
"usingComponents": {
- "list-item": "mini-antui/es/list/list-item/index",
- "swipe-action": "mini-antui/es/swipe-action/index"
}
}
\ No newline at end of file
diff --git a/public/appmini/old/wechat/pages/cart/cart.wxml b/public/appmini/old/wechat/pages/cart/cart.wxml
index 9f077a1ee..f370ef7e7 100755
--- a/public/appmini/old/wechat/pages/cart/cart.wxml
+++ b/public/appmini/old/wechat/pages/cart/cart.wxml
@@ -1,41 +1,39 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+ {{spec.type}}:{{spec.value}}
+
+
+
+
+ -
+
+ +
-
-
-
-
-
-
-
-
- {{item.title}}
-
-
- {{spec.type}}:{{spec.value}}
-
-
-
-
- -
-
- +
-
-
-
-
- ¥{{item.price}}
- ¥{{item.original_price}}
- x{{item.stock}}
-
+
+
+ ¥{{item.price}}
+ ¥{{item.original_price}}
+ x{{item.stock}}
-
+
diff --git a/public/appmini/old/wechat/pages/login/login.js b/public/appmini/old/wechat/pages/login/login.js
index 293a89dea..d2a9eddfc 100755
--- a/public/appmini/old/wechat/pages/login/login.js
+++ b/public/appmini/old/wechat/pages/login/login.js
@@ -20,9 +20,19 @@ Page({
wx.setNavigationBarTitle({title: '手机绑定'});
// 设置用户信息
- this.setData({params: option, user: app.GetUserCacheInfo()});
+ this.setData({
+ params: option,
+ user: app.GetUserCacheInfo() || null
+ });
},
+ /**
+ * 登录授权事件
+ */
+ get_user_info_event(e) {
+ console.log(e, e.detail.userInfo)
+ }
+
/**
* 输入手机号码事件
*/
diff --git a/public/appmini/old/wechat/pages/login/login.wxml b/public/appmini/old/wechat/pages/login/login.wxml
index b28406139..3737c480e 100755
--- a/public/appmini/old/wechat/pages/login/login.wxml
+++ b/public/appmini/old/wechat/pages/login/login.wxml
@@ -1,4 +1,4 @@
-
+
-
\ No newline at end of file
+
+
+
+ 确认登录授权,为您提供更优质的服务
+
+
diff --git a/public/appmini/old/wechat/pages/login/login.wxss b/public/appmini/old/wechat/pages/login/login.wxss
index c322498fc..48bd97576 100755
--- a/public/appmini/old/wechat/pages/login/login.wxss
+++ b/public/appmini/old/wechat/pages/login/login.wxss
@@ -46,4 +46,14 @@ page{
bottom: 34rpx;
height: 90rpx;
line-height: 90rpx;
+}
+
+/**
+ 授权登录
+*/
+.wx-login {
+ padding-top: 30%;
+}
+.wx-login button {
+ margin-top: 30rpx;
}
\ No newline at end of file