Успешный вызов интерфейса индекса wx, неудачный вызов интерфейса индекса wx

Успешный вызов интерфейса

Первоначально это был просто вызов индексного интерфейса wx.Код Python выглядит следующим образом:

urllib3.disable_warnings()
page = SessionPage()
state = page.post(url='https://search.weixin.qq.com/cgi-bin/wxaweb/wxindex',
									json={
											"openid": "xxxxxxxxxxx",
											"search_key": "xxxxxxxxxxxx",
											"cgi_name": "GetMultiChannel",
											"query": ["母亲节"],
											"start_ymd": "20210422",
											"end_ymd": "20230518"
									},
									headers={
											'Host': 'search.weixin.qq.com',
											'referer': 'https://servicewechat.com/wxc026e7662ec26a3a/42/page-frame.html',
											'user-agent': 'Mozilla/5.0 (Linux; Android 7.1.2; SM-G9810 Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.131 Mobile Safari/537.36 MMWEBID/3687 MicroMessenger/8.0.27.2220(0x28001B36) WeChat/arm32 Weixin NetType/WIFI Language/zh_CN ABI/arm32 MiniProgramEnv/android',
											'Content-Type': 'application/json'
									}, show_errmsg=True,
									verify=False)
print('state:' + str(state))
print('响应:' + page.html)

Код очень простой, по перехвату Чарльза параметры собираются, и запрос выполняется напрямую!

Неудачный вызов интерфейса

Когда я был счастлив, я отправил еще один запрос, и ответ стал таким: {"code":-10000, "msg": "авторизация не удалась."}, не удалось!
Невероятно, я пробовал еще несколько раз, но авторизация все время не удалась, я уверен, действительно не удалась!
Поэтому я начал искать причины неудачи.
После многократного сравнения параметров Чарльза выяснилось, что search_key в запросе является динамическим параметром, который будет периодически меняться.
Итак, следующий контент посвящен изучению того, почему и как изменяется search_key.

обратный источник

Данные индекса wx поступают из небольшой программы wx index, поэтому необходимо перевернуть wxapkg и изучить исходный код.
Найдите на эмуляторе соответствующий пакет апплета wxapkg, перетащите его, распакуйте с помощью wxappUnpacker и обнаружите массу ошибок.
Основная причина - ошибка конфигурации app.json, Ошибка: xxx.js, _typeof3 не является функцией и другие ошибки. После устранения их по одной используйте инструмент разработки wx, чтобы открыть исходный код и просмотреть соответствующий код:

i = require("./login"),
r = i.checkLogin
	
! function a(h) {
          return r().then(function (r) {
            h && n.setId();
            var l = t(t({
              openid: r.openid,
              search_key: r.search_key
            }, n.data), e);
            n.log("➡️", "request\n", l), n.timestamp = Date.now(), 
            wx.request({
              url: "https://search.weixin.qq.com/cgi-bin/wxaweb/".concat(n.cgi),
              data: l,
              method: "POST",
              header: {
                "Content-Type": "application/json"
              },
              success: function (t) {
               ......

Видно, что запрошенный параметр search_key поступает из r.search_key, r — из i.checkLogin, i — из входа в систему, find login.js, а checkLogin определяется следующим образом:

checkLogin: function () {
    var n = wx.getStorageSync(e);
    return n ? new Promise(function (e) {
      e(JSON.parse(n));
    }) : r();
  }

Следовательно, search_key в параметре — это значение, полученное из кэша, а место его хранения:

	return wx.login({
          success: function (o) {
            ! function t() {
              return wx.request({
                url: "https://search.weixin.qq.com/cgi-bin/searchweb/weapplogin",
                data: {
                  appid: "appidxxxxxxxxxxxxxxxxxx",
                  js_code: o.code
                },
                success: function (o) {
                  var r = o.data,
                    u = void 0 === r ? {} : r;
                  try {
                    0 == u.errcode ? (wx.setStorageSync(e, JSON.stringify(u.data)), c = 0, i = null,
                      n(u.data)) : a(u, "weapplogin", t);
                  } catch (n) {
                    a(n, "weapplogin", t);
                  }
                },
                fail: function (n) {
                  a(n, "weapplogin", t);
                }
              });
            }();
          },

Таким образом, сохраненное значение поступает из ответа интерфейса cgi-bin/searchweb/weapplogin, и этому интерфейсу необходимо передать два параметра appid и js_code. Appid легко назвать, а js_code берется из кода wx.login, что сделать непросто.
После долгих поисков я не увидел подробного описания wx.login(), но согласно некоторым сообщениям в Интернете говорится, что уже существует зрелая платформа авторизации wx, и код можно получить через свою платформу без вызова wx.login().
Поэтому попытка вызвать индекс wx через интерфейс в конечном итоге терпит неудачу.

наконец

Итак, наконец, кто из воротил вводит платформу авторизации?

рекомендация

отblog.csdn.net/AJian759447583/article/details/130749984