GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — 小程序请求有时会出现 Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ · Issue #359 · binarywang/WxJava

小程序请求有时会出现 Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ #359

New issue
Copy link
New issue
Copy link
Closed
Closed
小程序请求有时会出现 Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $#359
Copy link
Labels
小程序

Description

@ghs0223
ghs0223
opened on Oct 30, 2017
Issue body actions

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
at com.google.gson.Gson.fromJson(Gson.java:887)
at com.google.gson.Gson.fromJson(Gson.java:852)
at com.google.gson.Gson.fromJson(Gson.java:801)
at com.google.gson.Gson.fromJson(Gson.java:773)
at cn.binarywang.wx.miniapp.bean.WxMaUserInfo.fromJson(WxMaUserInfo.java:23)
at cn.binarywang.wx.miniapp.api.impl.WxMaUserServiceImpl.getUserInfo(WxMaUserServiceImpl.java:41)

Activity

Next
  1. binarywang commented on Oct 30, 2017

    @binarywang
    binarywang
    on Oct 30, 2017 · Hidden as abuse
    show commentMore actions
  2. ghs0223 commented on Oct 30, 2017

    @ghs0223
    ghs0223
    on Oct 30, 2017 · Hidden as abuse
    Author
    show commentMore actions
  3. binarywang
    added
    等待确认[WaitingForConfirmation]
    on Nov 10, 2017
  4. binarywang
    closed this as completedon Nov 22, 2017
  5. jinriyang commented on Apr 13, 2018

    @jinriyang
    jinriyang
    on Apr 13, 2018 · Hidden as abuse
    show commentMore actions
  6. Tigerioo commented on Apr 13, 2018

    @Tigerioo
    Tigerioo
    on Apr 13, 2018 · Hidden as abuse
    show commentMore actions
  7. guoyangyang commented on Apr 19, 2018

    @guoyangyang
    guoyangyang
    on Apr 19, 2018 · Hidden as abuse
    show commentMore actions
  8. guoyangyang commented on Apr 19, 2018

    @guoyangyang
    guoyangyang
    on Apr 19, 2018 · Hidden as duplicate
    show commentMore actions
  9. binarywang
    reopened this on Apr 19, 2018
  10. binarywang commented on Apr 22, 2018

    @binarywang
    binarywang
    on Apr 22, 2018
    Owner
    More actions

    https://www.cnblogs.com/guansixu/articles/6484872.html 楼上遇到问题的各位请参考此文,不知是否有帮助

    Reacted by 花卷, Binary Wang, Leo and taylorzhi
  11. guoyangyang commented on Apr 26, 2018

    @guoyangyang
    guoyangyang
    on Apr 26, 2018
    More actions

    @binarywang 感谢回复。我这边遇到的问题和你分享的文章相似。

    回头翻了一下小程序开发手册,发现开发过程中忽略了下面这段注意事项。
    getphonenumber

    修改了调用wx.login顺序后,问题解决。

    Reacted by cainiao00x, Binary Wang, 简单的你我1314, alei, BBBigBro, anguangpei, Leo, Taiyi, youmoo, Janyd and 7 more
    Reacted by Taiyi and 0katekate0
    Reacted by Taiyi and Star-Fall
  12. binarywang
    closed this as completedon May 12, 2018
  13. binarywang
    changed the title [-]小程序解密用户信息是,经常会出现com.google.gson.JsonSyntaxException: java.lang.IllegalStateException[/-] [+]小程序解密用户信息经常会出现com.google.gson.JsonSyntaxException[/+] on May 15, 2018
  14. binarywang
    added
    not a problem
    小程序
    on May 15, 2018
  15. 37 remaining items

  16. longzhiwuing commented on Aug 26, 2020

    @longzhiwuing
    longzhiwuing
    on Aug 26, 2020 · Hidden as abuse
    show commentMore actions
  17. RmanzzZ commented on Oct 17, 2020

    @RmanzzZ
    RmanzzZ
    on Oct 17, 2020 · Hidden as resolved
    show commentMore actions
  18. tianyahaijiaowxp commented on Nov 12, 2020

    @tianyahaijiaowxp
    tianyahaijiaowxp
    on Nov 12, 2020 · Hidden as abuse
    show commentMore actions
  19. RmanzzZ commented on Nov 12, 2020

    @RmanzzZ
    RmanzzZ
    on Nov 12, 2020
    More actions

    怎么这个问题感觉都没有特别明确的回答啊
    下面代码报错
    WxMaPhoneNumberInfo phoneNoInfo = this.wxMaService.getUserService().getPhoneNoInfo(session.getSessionKey(), encryptedData, iv);
    java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

    都没有个实质的回答

    已解决 还是顺序的问题
    image

    Reacted by Binary Wang, 0katekate0 and Lick-liu
  20. weiqilong commented on Jan 30, 2021

    @weiqilong
    weiqilong
    on Jan 30, 2021 via email
    More actions
    原因是前端的authcode码失效了 ---原始邮件--- 发件人:&quot;jiaoqianjin&quot;<[email protected]&gt; 发送时间:2021年1月30日 星期六 上午11:43 收件人:&quot;Wechat-Group/WxJava&quot;<[email protected]&gt; 抄送:&quot;小熊羔子&quot;<[email protected]&gt;;&quot;Comment&quot;<[email protected]&gt; 主题:Re: [Wechat-Group/WxJava] 小程序请求有时会出现 Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ (#359) 我也遇到这个问题了,是WxMaCryptUtils.decrypt(sessionKey,&nbsp;encryptedData,&nbsp;ivStr)这个方法返回值是乱码,传入的参数没问题 您好,请问这个问题您当时是怎么解决的,我现在也遇到了传入参数没问题,返回参数乱码 &mdash; You&nbsp;are&nbsp;receiving&nbsp;this&nbsp;because&nbsp;you&nbsp;commented. Reply&nbsp;to&nbsp;this&nbsp;email&nbsp;directly,view&nbsp;it&nbsp;on&nbsp;GitHub,&nbsp;orunsubscribe.
  21. sav7ng commented on Feb 27, 2021

    @sav7ng
    sav7ng
    on Feb 27, 2021
    More actions

    @weiqilong 可以爬一下楼,问题解决方案都在上面,可以一步一步排查。

  22. KaimingLuo commented on Mar 24, 2021

    @KaimingLuo
    KaimingLuo
    on Mar 24, 2021
    More actions

    确认下前后端传递的参数有没有做UrlEncode/UrlDecode,因为encryptedData里会包含特殊字符在传递参数时被转义,可能服务器端实际拿到的参数encryptedData并不是前端实际获取到的值,导致SDK调用微信相应接口时无法解密而报错,只要保证前端实际获取到的encryptedData和服务器端调用SDK时传入的encryptedData一致就不会报错的,SDK中方法并无问题;建议让前后台都打印下日志,看下服务端最终使用的参数值是否还是前端获取到的原始值呢。

    重要:有朋友反映按照以上描述处理后还是会偶尔出现这个解密问题,那么可能就是前后端没有协同好了,忽略了每次调用wx.login时微信都会刷新sessionkey,可能造成后台使用了旧的/过期的sessionkey去解密而失败,一般开发小程序时有一个原则,前端只要调用wx.login就必须通知后台使用最新的code刷新sessionkey!所以正确的做法应该是:

    1. 前端调用wx.checkSession,检查session是否过期
    2. 如果session过期,则前端调用wx.login并通知后台使用auth.code2Session刷新sessionkey
    3. 前端调用wx.getShareInfo,获取微信返回的encryptedData和iv
    4. 前端调用后台接口,后台使用encryptedData解密用户信息

    PS:wx.request对GET/POST传递字符串参数时会自动做encodeURIComponent,SpringBoot某些场景下form表单参数是会自动做UrlDecode的...

    注意事项官方说明

    wx.request官方API文档
    获取用户信息
    获取用户手机号码
    服务端解密开放数据

    我也遇到偶尔解密失败的问题,看完大佬们的回答,调查后发现是顺序问题。前端先调用了getUserInfo,再调用wx.login,拿着旧的加密信息和新的session去解密了。。
    不过,现在直接从session中拿openid、unionid,用户信息用getUserProfile拿明文,不用再去解密了0.0?

  23. HeyChiang commented on Aug 11, 2021

    @HeyChiang
    HeyChiang
    on Aug 11, 2021
    More actions

    解密手机号的时候,遇到了相同的问题,原因是用固定的 session_key + encryptedData+ iv 解密,但是encryptedData 或者 iv 可能是一次性的,解密完之后就不能再用了

    我亲自测试了, session_key + encryptedData+ iv 可以重复使用postman拿到手机号码,并不是你说的一次性。

  24. q127981 commented on Oct 31, 2021

    @q127981
    q127981
    on Oct 31, 2021
    More actions

    image
    简单粗暴的一个解决方法,既然拿到的sessionKey是过期的,那么就再拿一次

    Reacted by guyu
  25. IllusionOops commented on Nov 25, 2021

    @IllusionOops
    IllusionOops
    on Nov 25, 2021
    More actions

    前端获取到用户手机号信息,然后打印,接着使用postman调用后端接口,由后端进行用户手机号信息解密。
    偶尔会出现这种情况:成功、失败交替进行;大部分情况:多次失败,偶尔成功。
    这个错误到底是什么原因?
    我现在是测试阶段,仅仅通过前端打印数据,然后通过postman发起post请求进行接口调用,完全不存在前端重复调用登录接口导致sessionkey失效问题,也没有调用其他接口。
    当出现失败报错的时候,我使用文本对比工具对比过前端打印的数据和后端打印的数据,完全一致!!!

    每个人的回答我都看了,但是依然没懂这个错误到底是什么原因···能否告知下

  26. liuguofeng-java commented on Jan 29, 2022

    @liuguofeng-java
    liuguofeng-java
    on Jan 29, 2022 · Hidden as spam
    show commentMore actions
  27. liuguofeng-java commented on Jan 29, 2022

    @liuguofeng-java
    liuguofeng-java
    on Jan 29, 2022
    More actions

    找到问题了先调用login在调用getphonenumber

    image

    Reacted by 一马平川, beam, psyke99, quando, Tanke_TD and Pangolin
  28. longtimeGo commented on Mar 14, 2023

    @longtimeGo
    longtimeGo
    on Mar 14, 2023
    More actions

    我这边遇到了线下可以获取到用户信息,到线上就报错,错误信息提示中如下列:

    com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
    at com.google.gson.Gson.fromJson(Gson.java:888)
    at com.google.gson.Gson.fromJson(Gson.java:853)
    at com.google.gson.Gson.fromJson(Gson.java:802)
    at com.google.gson.Gson.fromJson(Gson.java:774)
    at cn.binarywang.wx.miniapp.bean.WxMaUserInfo.fromJson(WxMaUserInfo.java:29)
    at cn.binarywang.wx.miniapp.api.impl.WxMaUserServiceImpl.getUserInfo(WxMaUserServiceImpl.java:38)

    代码层面:(getPhoneNoInfo不报错,getUserInfo会报上述的错)
    wxPhoneInfo = wxMaService.getUserService().getPhoneNoInfo(sessionKey, request.getMobileEncryptedData(), request.getMobileIvStr());
    wxUserInfo = wxMaService.getUserService().getUserInfo(sessionKey, request.getUserInfoEncryptedData(), request.getUserInfoIvStr());

  29. binarywang
    unpinned this issue on Jun 17, 2023
  30. wgsdiv commented on Aug 27, 2024

    @wgsdiv
    wgsdiv
    on Aug 27, 2024
    More actions

    image 简单粗暴的一个解决方法,既然拿到的sessionKey是过期的,那么就再拿一次

    code只能使用一次吧

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    小程序

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      You are visitor 01402503 — GeezerVison does not store the pages you look up.
      Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.