吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6791|回复: 32
收起左侧

[其他转载] 禾匠4.4.8微信授权接口修复教程

[复制链接]
stone009 发表于 2021-7-1 20:21
本帖最后由 stone009 于 2021-7-1 21:32 编辑

有很多坛友反应禾匠 4.4.8 获取用户信息失败,今天看了下源码,主要是因为微信修改了获取用户信息规则导致的。另外,我用的禾匠见这个帖子 https://www.52pojie.cn/forum.php ... hlight=%BA%CC%BD%B3
见微信文档:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801

废话不多说,看下如何解决吧。

前端部分
首先找到前端登录弹框的文件,文件位于:src/components/basic-component/app-layout/app-user-login/app-user-login.vue
登录按钮代码:
[JavaScript] 纯文本查看 复制代码
<button class="login-btn"
                            :open-type="openType"
                            scope="userInfo"
                            @getAuthorize="getUserInfo"
                            @getuserinfo="getUserInfo"
                            @click="getUserInfoClick"
                    >
                    </button>

这个按钮写在一个条件编译判断里面,如果是5+小程序就会显示这个按钮,但是微信已经修改了规则,所以明显这个就有问题了。但是之前开发者的逻辑也不想进行太大的修改(主要是懒+避免出现乱七八糟的bug),所以我们修改代码如下:
[JavaScript] 纯文本查看 复制代码
<!-- #ifndef MP-WEIXIN -->
                    <button class="login-btn"
                            :open-type="openType"
                            scope="userInfo"
                            @getAuthorize="getUserInfo"
                            @getuserinfo="getUserInfo"
                            @click="getUserInfoClick"
                    >
                    </button>
                    <!-- #endif -->
                    <!-- #ifdef MP-WEIXIN -->
                    <button class="login-btn"
                            scope="userInfo"
                            @getAuthorize="getUserInfo"
                            @getuserProfile="getUserProfile"
                            @click="getUserProfileClick"
                    >
                    </button>
                    <!-- #endif -->

这里稍微调整了一下,如果是微信小程序则显示 getProfile 这个按钮,其他小程序平台还是显示原来那个按钮。接着我们新增两个方法来处理微信小程序端的点击事件。
[JavaScript] 纯文本查看 复制代码
getUserProfileClick(e) {
              // #ifdef MP
              this.$store.commit('user/showLoginModal', false);
              const resolve = this.$user.getUserInfoResolve;
              const reject = this.$user.getUserInfoReject;
              this.$event.on(this.$const.EVENT_USER_LOGIN, true).then(() => {
                this.$jump({
                  open_type: 'reload'
                })
              });
              uni.getUserProfile({
                desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
                success: (res) => {
                  console.log(res)
                  if (res.errMsg !== 'getUserProfile:ok') {
                    this.$store.commit('user/showLoginModal', true);
                    return reject(res.errMsg);
                  } else {
                    return resolve(res);
                  }
                }
              })
              // #endif
            }

OK,登录弹窗这边就修改完成了,这边主要修改了微信小程序端获取用户信息的方式,以适应微信规则的调整。

接着处理一下登录那边的JS文件,文件位于:src/core/user.js
找到 getAccessToken() 方法(13行),这里主要修改一下提交的数据。因为之前是基于 getUserInfo 方法获取用户信息的,现在改成了 getUserProfile 数据格式发生了一些变化,所以这里也需要修改一下提交数据的格式。
在 uni.login 的 success 回调里面,修改就行了:
[JavaScript] 纯文本查看 复制代码
let data
                        // #ifdef MP-WEIXIN
                        data = {
                            encryptedData: userInfoResult.encryptedData,
                            iv: userInfoResult.iv,
                            rawData: userInfoResult.rawData,
                            signature: userInfoResult.signature,
                            code: loginResult.code,
                        };
                        // #endif
                        // #ifndef MP-WEIXIN
                        data = {
                            encryptedData: userInfoResult.detail.encryptedData,
                            iv: userInfoResult.detail.iv,
                            rawData: userInfoResult.detail.rawData,
                            signature: userInfoResult.detail.signature,
                            code: loginResult.code,
                        };
                        // #endif


OK,前端部分我们已经修改完了。

后端部分
我之前调试的时候发现登录弹框没有弹出来(如果已经配置好了 SSL 证书应该不会有这个问题了),排查发现返回接口的路由有点问题,如果有童鞋遇到没有弹出登录弹框的,可以尝试修改一下后端文件 forms/common/CommonAppConfig.php
找到 getDefaultPageList 方法,将
[PHP] 纯文本查看 复制代码
$picUrl = str_replace('http://', 'https://', $picUrl);

注释(上线后再取消注释)
或者修改为:
[PHP] 纯文本查看 复制代码
if (!getenv('YII_DEBUG')) {
            $picUrl = str_replace('http://', 'https://', $picUrl);
        }

注:需要自己在根目录添加 .env 环境变量文件,并配置对应的环境变量值,这种方式更推荐。

接着上面,后端获取用户信息失败出问题的文件就是这个文件:vendor/luweiss/wechat/src/Wechat/Wechat.php
但是它又是一个第三方库的文件,所以基于 no hack core 原则我们是不建议修改它的,但是基本上大家都是不会升级了吧,所以修改也无所谓了。。
修改这个很简单,加一行代码就搞定。找到 decryptData 方法,在最后的 return 前面添加一行代码:
[PHP] 纯文本查看 复制代码
$dataObj['openId'] = $sessionData['openid'];


OK,大功告成。觉得有用的小伙伴给个免费的CB呢



链接:https://pan.baidu.com/s/1belEL0wu7C0KoPwlWpzW5Q
提取码:52pj






修改文件.zip

6.82 KB, 下载次数: 161, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 14吾爱币 +12 热心值 +12 收起 理由
飞天的火车王 + 1 + 1 谢谢@Thanks!
csxiaorui + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xspzxw + 1 + 1 谢谢@Thanks!
kevinfsz + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
shengsibu + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
程序猿-小新 + 1 + 1 谢谢@Thanks!
sjzxckj + 1 + 1 热心回复!
chinawolf2000 + 1 + 1 热心回复!
lgc81034 + 1 谢谢@Thanks!
互联网事 + 1 + 1 热心回复!
夕阳下的背影 + 1 + 1 热心回复!
wei00514 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
jy00366599 + 1 谢谢@Thanks!
shileiye + 1 + 1 等了好久终于把你等到,评分给你,马上去实操。

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| stone009 发表于 2021-7-3 18:56
旧城旧人 发表于 2021-7-2 16:02
id      级别  大小       CRC        修改时间             文件 (说明)
---------------------------- ...

你发的这些文件我都查看了下,基本上都是第三方库的,不存在后门。
可以自行下载对应的源码查看:
Yii 2.0.21 下载地址:https://github.com/yiisoft/yii2/releases/tag/2.0.21
Codeception 2.5 下载地址:https://github.com/Codeception/Codeception/releases/tag/2.5.0
phpspec/prophecy 1.8.1下载地址:https://github.com/phpspec/prophecy/releases/tag/1.8.1
旧城旧人 发表于 2021-7-2 16:02
Lopht 发表于 2021-7-1 21:46
楼主,先查个后门先吧。

id      级别  大小       CRC        修改时间             文件 (说明)
--------------------------------------------------------------------------------------------------------------------------------------------
00001   5     14605      47147EFF   21-01-27 17:01:04    禾匠4.4.8\448\vendor\phpspec\prophecy\readme.md  『`执行 参数:{[method.As a matter of fact, the call that we made earlier (]:"method".as a matter of fa...』
00002   2     38528      E00BE7DC   21-01-27 17:01:04    禾匠4.4.8\448\vendor\phpunit\phpunit\src\util\test.php  『\preg_replace()』
00003   1     13762      78F7D89E   21-01-27 17:01:04    禾匠4.4.8\448\vendor\codeception\codeception\tests\data\claypit\c3.php  『可疑引用:["phar://__DIR__/codecept.phar/autoload.php"]』
00004   3     88         0F15940C   21-01-27 17:01:04    禾匠4.4.8\448\vendor\curl\curl\tests\server\php-curl-test\post_multidimensional.php  『流数据echo』
00005   5     276        DFE95EAB   21-01-27 17:01:04    禾匠4.4.8\448\vendor\phpunit\phpunit\src\util\php\eval-stdin.php  『eval后门』
00006   2     3222       4CE6ED0D   21-01-27 17:01:04    禾匠4.4.8\448\vendor\symfony\contracts\httpclient\test\fixtures\web\index.php  『[可疑]file_get_contents 参数 :("php://input")』

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Lopht + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

软件我来了 发表于 2021-7-1 20:35
wei00514 发表于 2021-7-1 20:57
这个可以有
15108194544 发表于 2021-7-1 21:24
问题解决了吗
15108194544 发表于 2021-7-1 21:25
感谢,源码能不能再发下呀
Lopht 发表于 2021-7-1 21:46
楼主,先查个后门先吧。
taxuewuhen 发表于 2021-7-1 21:50
这个可以有
katitus 发表于 2021-7-1 22:48
感谢分享!!!!!!
fengjewel 发表于 2021-7-2 05:40
谢谢分享
wz15 发表于 2021-7-2 09:29
估计有后门
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表