没认证的微信怎么认证服务号获取openidd

还没有任何记录...
怎么通过js获取微信用户的openid?
来源:懒人建站作者:微信开发日期: 18:31人气:次
如火如荼通过js获取用户的openid?希望通过openid来识别用户,目前微信服务号在网页获取微信用户openid就这两种方法,订阅号只能通过图文或文本消息打开网页,自己传用户的openid。
问:我的应用场景是给用户发的会员卡,希望通过openid来识别用户,来展示相应的会员卡,类似微生活上的会员卡菜单。不知道微信为啥不开放这个接口。怎么通过js获取微信用户的openid?
通过菜单打开url,在网页页面里获得用户的openid,
获取微信用户的openid目前有两种方法:
一是先回复一条图文消息,将用户的openid带在链接上,然后用户通过点击图文消息的链接打开最终的页面,这么做用户体验非常非常不好,而且每个菜单都得这么干;
二是调用服务号的高级接口,可是我们大部分都是用订阅号。
那怎么通过js获取微信用户的openid?
答:目前微信服务号在网页获取微信用户openid就这两种方法,订阅号只能通过图文或文本消息打开网页,自己传用户的openid。
如果微信订阅号什么都能做,那划分订阅号与微信服务号的意义在哪呢?
本文链接:/wxkaifa/.html
怎么通过js获取微信用户的openid?由懒人建站收集整理,您可以自由传播,请主动带上本文链接
就是免费分享,觉得有用就多来支持一下,没有能帮到您,懒人也只能表示遗憾,希望有一天能帮到您。
(责任编辑:懒人建站)
怎么通过js获取微信用户的openid?-相关文章
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
微信开发-人气榜
懒人建站为您提供-基于jquery特效,jquery弹出层效果,导航菜单代码,下拉菜单代码和jquery焦点图片代码,懒人建站关注软件界面设计,WEB/后台/手机/软件UI设计、建站素材、html5和CSS3新技术等。微信今天又调整了下公众平台的认证体系,开放了订阅号垂涎已久的 “” 接口。根据微信公众平台的,新的认证体系审核会更严格,但同时也会更加安全,经过认证之后,用户将在微信中看到认证公众号特有的标识。
不过在账号选择上依旧没有完全放开,暂时支持所有的服务号,以及政府、传统媒体、明星等非企业类型的订阅号申请全新的微信认证,经过微信认证之后,订阅号将获得 “自定义菜单” 接口权限。
而此前已经获得 “自定义菜单” 接口的服务号,经过认证之后,将获得中所有接口权限,但比较遗憾的是,依旧不包括大家普遍期待的 “支付接口”。不过据不少创业者透露,申请微信支付接口也并不是不可能,但现在只针对完成 300 元认证的服务号,知名商家,交 5 万保证金的开放,门槛比较高。根据微信公众平台的介绍,服务号可获得的高级接口主要包括下面九大接口:
语音识别:通过语音识别接口,用户发送的语音,将会同时给出语音识别出的文本内容。
客服接口:通过客服接口,公众号可以在用户发送过消息的 24 小时内,向用户回复消息。
OAuth2.0 网页授权:通过网页授权接口,公众号可以请求用户授权。
生成带参数二维码:通过该接口,公众号可以获得一系列携带不同参数的二维码,在用户扫描关注公众号后,公众号可以根据参数分析各二维码的效果。
获取用户地理位置:通过该接口,公众号能够获得用户进入公众号会话时的地理位置(需要用户同意)。
获取用户基本信息:通过该接口,公众号可以根据加密后的用户 OpenID,获取用户的基础信息,包括头像、昵称、性别、地区。
获取关注者列表:通过该接口,公众号可以获取所有关注者的 OpenID。
用户分组接口:通过分组接口,公众号可以在后台为用户移动分组,或创建、修改分组。
上传下载多媒体文件:通过该接口,公众号可以在需要时在微信服务器上传下载多媒体文件。
还有内什么,认证需要 300 元 / 次原创文章,作者:鏡宇cupl,如若转载,请注明出处:/p/209383.html“看完这篇还不够?如果你也在创业,并且希望自己的项目被报道,请告诉我们!”
分享到鏡宇cupl编辑winner winner, chicken dinner创业者们,如果你或你的朋友想被36氪报道,请狠戳这里&&&&0 篇文章总数0 万总阅读量创业经历0投资案例0进入下一轮0成功退出关注领域投资阶段计划今年投资0投资案例我们会挑选你的个人页面中前三个投资案例展示在该区域中,若你还没有投资案例,建议尽快去个人页面添加,以便读者全方位的了解你的投资历程!0投资案例0入驻投资人机构成员我们会挑选本机构中职位最高的四位投资人展示在该区域
赞助商链接
新浪董事长曹国伟成新浪最大股东近日,新浪(纳斯达克证券代码:SINA)对外公布,已在11月6日依据6月1日公布的一项受法律约束的认购协议,完成向归属于公司董事长兼CEO曹国伟的一个特殊目的实体(SPV)定向增发普通股1100万股,对价总计为4.5639亿美元。曹国伟通过此番增持,持有新浪1246.7万股,占新浪交易达成后总股本17.9%。新浪原来大股东Platinum Investment Management Limited持股比例被稀释到仅为5.98%,曹国伟成为新浪最大股东。另外,新浪近期还举行了年度股东大会,再次选举汪延和张颂义为新浪董事。股东还批准并任命普华永道中天会计师事务所为公司在截至日财年独立审计师。美团表示对停用支付宝事件并不知情,阿里称正在核实11月20日不断有消息称,美团在广州的地推团队要求每个地推人员至少下线两家支付宝商家,撤掉支付宝的宣传海报和付款指示牌,并且让商家彻底关闭在支付宝上的店铺。对此美团表示并不知情,正在核实,而阿里巴巴也有相似表示:“近日,我们接到部分商户反应称,其店内的支付宝物料被某团购网站的地推人员粗暴撕毁和踩踏,并且被要求下架支付宝店铺。我们正在核实相应的情况。”目前,BAT都在O2O领域积极投资,但对于外界盛传的阿里巴巴撤资美团传闻,双方均表示并不知情。酷派 ivvi 手机发布,配指纹识别最低 999 元11月20日消息,酷派集团对外发布了独立手机品牌 ivvi,新手机采用金属机身设计,加入了指纹识别功能,最低999元,Pro版1399元,尊享版1499元,将在会后全国ivvi线下实体店进行发售。在配置方面,ivvi手机配备4.7英寸屏幕,同时加入了2.5D弧面玻璃,机身背部加入指纹识别模块,ivvi称新机的指纹解锁速度可以达到0.24秒。同时,该手机采用高通骁龙MSM8916处理器,辅以2GB运行内存以及16GB机身存储空间,并运行Android 4.4.4定制系统,支持TD-LTE/TD-SCDMA/WCDMA/GSM网络,电池容量为1800mAh,配备前置500W+后置800W像素的镜头。可穿戴技术运动服Athos获得3550万美元C轮融资Athos成立于2012年,总部位于加州红木市。该公司是为用户提供可穿戴科技运动服用于跟踪运动者心率和呼吸频率等人体功能的科技公司。公司称其有两个目标,首先是帮助运动员展现更好的比赛成绩,同时根据运动中收集的数据避免在运动中受伤。公司表示,在后期希望可以达到那块机构出现了疲劳状态,怎样的运动强度可以使运动者免受伤害。该公司CEO Dhananja Jayalath称,将把新的投资用于Athos技术制造的提升和品牌建立。本轮由Social Capital领投,其余跟投的公司包括,DCM,Felix Capital,Joe Lacob,Lightspeed Venture Partners, MAS Holdings, True Venutres。MIT 研究出人体可吸收传感器,可监测生命体征今日,美国麻省理工学院的研究员研制出一款人体可吸收的传感器,可以监测生命体征指标,尤其是人体消化系统的数据。该传感器外部包裹着一个硅树脂胶囊,大约是一个杏仁大小,可以在短期或长期内对病人的体征数据进行监测。近几年生命体征监测领域有很多产皮异军突起,如大规模诞生的可穿戴设备,但该研发团队称,这样的设备必须与皮肤接触,因此使用范围有限,比如烧伤的病人就无法使用可穿戴设备,但可吸收传感器就能解决这个问题。研发员Giovanni Traverso表示,希望这些胶囊传感器能在体内停留1-2天。瑞士手表出货量创六年新低据瑞士海关部门公布的最新统计数据显示,瑞士传统手表行业在10月的出货量下滑了12%,总货值为20亿美元,创下了近6年来的新低。瑞士手表10月在其优势市场香港的份额首次跌破了40%。据了解,瑞士手表出口量遭遇了自2009年第三季度以来的最大季度下滑。而下滑主要原因是由于包括中国大陆、中国香港、中国台湾、新加坡、阿联酋和韩国在内这些市场销量的总体下滑。据悉,瑞士手表制造业大约占据了该国总出口量约10%,而由于受到智能手表的冲击,该比例已经从今年初开始持续下跌了3.2%。苹果承认 iPad Pro 假死,但暂无解决方案当地时间周四晚,苹果在自己的官网上发布了一份支持文档,承认iPad Pro的假死问题,但是并未透露是否将为这一问题给出永久有效的解决方案。虽然iPad Pro上市不久,但有许多用户反应该产品频繁出现假死的问题,即在使用过程中莫名其妙的出现无法唤醒的现象,且无论用户如何操作实体按钮或者触摸屏幕都没有任何反应,唯一的解决办法是同时按下Home键+电源按键10秒进行强制重启,但是根据各苹果论坛的的消息,这一问题是因为给苹果设备进行过长时间的充电后引起的。对此,苹果给出的官方回应也认可了这一解决办法,但却没有就此给出任何永久有效的解决方案。苹果方面仅仅表示,公司目前正在着手调查这一问题,并会在获得任何新信息后及时向用户公布。Google拒绝俄罗斯对其进行的“反垄断”决议据BBC报道,俄罗斯联邦反垄断组织在此前限定Google在11月18日之前更改其与其他手机公司的合约并注明Google的软件不需要强制被安装。俄罗斯方面称,Google如果在限定日期前不修改协议,将会遭到相当于Google在俄罗斯2014年15%营收的罚款。然而,离最后限定日期已经过去两天,Google并没有更改任何协议。Google在本月18日的俄罗斯官方博客中表示,“Google打算挑战俄罗斯的该项决议,并会解释为何这项决议是没有根据的”。据悉,俄罗斯联邦反垄断组织在今年9月声称Google要求手机公司安装Google软件构成了行业垄断,特别是YouTube和Google的图标和地图服务都被安插在了安卓手机界面的中部。Google方面称,Google从未强制要求厂商安装Google旗下软件,并且之前也有厂家从设备中删除Google软件,而这些都能表明Google并没有形成所谓的“垄断”。视频直播社交平台“映客”获得千万级
A 轮融资11月20日消息,日前,一款视频直播社交平台“映客”宣布完成千万级A 轮融资,由赛富基金、金沙江创投和紫辉创投领投,多米音乐跟投。映客的创始人是多米音乐的联合创始人奉佑生,他曾经在去年年底推人多米音乐副总裁的职位。今年年初,国外视频直播社交应用Meerkat和Periscope走红,令奉佑生产生了做视频直播平台的想法。映客是偏时尚类的生活直播的软件,主要面向90后,在今年5月正式上线,主要要采用明星效应和口碑传播方式,并配备一支30人的外聘审核团队,来保证平台直播内容的健康度。Telegram关闭78个散播ISIS内容的频道据FOX NEWS消息,由于受到法国巴黎恐怖事件的影响,加密通讯平台Telegram近日宣布,已关闭78个公开散布与ISIS有关内容的频道。然而即便Telegram关闭了这些IS的频道,IS也能很快重组并建立新的频道,5分钟后这些恐怖分子便会再次上线。此前,ISIS曾利用Telegram宣称对巴黎恐怖事件负责,且通过网络发布了一张炸弹的照片,称是用来炸毁俄罗斯客机的炸弹。虽然关闭了这些频道,但Telegram表示在网站上表达意见的个人用户是受保护的,假如用户在网站上批评政府,Telegram不会对其有处于政治目的的审查,否则违背了Telegram的创办原则。西澳政府或外包其IT基础设施项目据ZDnet消息,西澳政府日前正在考虑削减IT方面的支出,削减额度为数百万美元。而要达到这一目标,最有效的方法就是将国家的IT基础设施外包。西澳政府目前开始了GovNext-ICT项目,该项目旨在为西澳政府创造全新的IT供应方式。财政部长Bill Marmion称,GovNext-ICT项目使得政府只需要支付使用费用,而不需要支付维修或是操作费用,这样政府能更专注于提供政府服务,这也使得政府每年能节省约6500万澳元。如果继续保持现在的自有和经营模式,西澳政府在未来十年将花费约30亿澳元。西澳已不是澳大利亚第一个考虑基础设施外包的政府了,此前昆士兰和维多利亚州政府都采取过这方面的行动。Splunk发布第三季度财报,现任CEO将退休据ZDnet消息,大数据软件公司Splunk近日发布了第三季度财报。财报显示这一财季公司净亏损7230万美元,每股亏损57美分,调整后每股亏损5美分,华尔街此前预期为每股盈利1美分,总收入1.744亿美元,高于华尔街预计的1.602亿美元。总收入较去年同期增长50%。同时Splunk宣布,公司现任CEO兼总裁Godfrey Sullivan即将退休,高级副总裁Doug Merritt将接替Sullivan的职务。Splunk还提升了公司的营收预期,到2016年1月,公司总收入有望达6.5亿美元,高于此前8月公布的6.28亿美元至6.32亿美元。第四季度中,Splunk的总收入预计将在2亿美元至2.02亿美元之间。谷歌开放Hangouts游客访问功能据ZDnet消息,谷歌目前在其视频聊天会议软件Hangouts上开放了游客访问这一新功能,会议组织者可以邀请没有谷歌账户的人参与会议。此前,没有谷歌账号的人在被邀请参加视频聊天会议时,会被要求注册一个谷歌账号。此次更新后,用户可直接通过谷歌日历上的邀请加入会议,且只需要键入名字即可。这虽然只是Hangouts的一个小更新,但对谷歌来说确是十分重要的一步,这家科技巨头现在正致力于推倒其服务周边的壁垒,这项新功能将会使越来越多的人使用Hangouts作为商务视频会议工具,有助于谷歌与WebEx和Adobe竞争。Workday第三季度财报发布,AON将成其客户据ZDnet消息,企业人力资源管理软件商Workday近日公布了第三季度财报,净亏损达7780万美元,每股约合41美分,收入约为3.03亿美元。汤森路透消息,华尔街此前预计不按照美国通用会计准则的每股亏损为4美分,但显然Workday的亏损已经超出了华尔街的预计。但Workday的前景还是光明的,该公司第四季度营收预计在3亿1700万美元至3亿2000万美元之间,将比去年同比增长40%-41%。该公司表示正在努力拓展金融领域的客户,且称全球最大的保险集团AON(怡安)将使用其公司的金融管理软件。亚马逊推出免费编剧应用Amazon Screenwriter据外媒消息,亚马逊近日推出了一款免费的基于云的应用Amazon Screenwriter,使用这一应用可以为电影和电视剧创作剧本。亚马逊并不是第一个提供免费编剧应用的公司,此前Trelby和Celtx均推出过免费版本。亚马逊的这款应用在键入时能自动生成格式,且支持PDF、FDX格式文件的导入和导出,作品将被保存在云端,且可以在Mac和PC端离线使用。亚马逊这款产品的独特之处在于可与亚马逊内容制作相连接,近日开始接受电视剧脚本,美国作家协会和动画协会的成员可以通过Amazon Screenwriter递交剧本。美国提议苹果和谷歌破译加密手机据NBC消息,为了防止恐怖袭击,近日曼哈顿地方检察官Attorney Cyrus在一项报告中提议,国会议员应要求苹果和谷歌这类科技公司破译加密过的智能手机。由于现在苹果和安卓系统的手机在出厂设置中都默认加密手机的所有内容,因而不知道PIN码或是密码的人无法知道手机里的内容,包括警察、法院以及制造该设备的公司。且Vance工作室曾指出,由于设备采用了加密功能,因而检方在2014年9月至2015年10月之间无法对111部智能手机进行检查。该项报告中还称,智能手机的加密已经对我们破解和起诉犯罪的工作造成了真正的阻碍。New balance发布首款3D打印跑鞋据外媒消息,在竞争对手adidas之后,New Balance近日发布其首款3D打印跑鞋。这款跑鞋是与3DSystems合作研制的,鞋底材料采用了最新研发的弹性粉末和DuraForm Flex TPU。新百伦称,使用这种材料可以使得跑鞋底部的缓冲气垫提供更柔软、更耐用的用户体验,承受更高强度和重量,达到最优平衡的效果,作为跑鞋,使跑步者感到舒适是最重要的。该限量版跑鞋预计在明年一月的CES上面世,但直到明年四月才会在波士顿开卖,全球其他New Balance零售店则要更晚一些售卖。目前尚不清楚这款跑鞋的售价。Facebook推出捐赠筹款新工具据NBC消息,Facebook近日推出了一个新工具,该工具致力于使得民众的捐款更加便捷。Facebook用户自2013年起便能通过Facebook来向慈善机构捐款,现在慈善机构可以在Facebook上为重大事项创建一个主页,这个主页用于筹款,且能使人们更近距离地了解一项筹款活动是如何达到目标的。CEO扎克伯格在一条Facebook推送中称,目前他们正在进一步测试为非盈利组织制作的资金筹集工具,且希望能使用户更便捷地对自己关注的项目进行支持。同时Facebook也对“Donate”按钮进行了升级,人们可以更容易地进行捐款。诺基亚称收购阿尔卡特-朗讯将有利于其5G业务据FORTUNE消息,诺基亚CEO Rajeev Suri近日称,收购其竞争对手阿尔卡特-朗讯将有助于诺基亚在缩减成本的基础上,在新技术研发上取得突破,如5G移动设备的制造等。此前诺基亚曾宣布将以换股方式出价166亿美元收购阿尔卡特-朗讯。这项收购协议达成后,诺基亚预计明年将开展5G网络的研发,且2020年5G业务将成为主流。Suri还称,到目前为止,阿尔卡特-朗讯已投入了约47亿欧元用于研发5G网络,而诺基亚却只投入了一半不到,合并后双方将比合并前拥有更大量的资金来进行5G研发。夏普鼓励员工购买自家产品夏普目前正在劝说他们的员工购买自家产品以促进销量。夏普目前表示,并不强制员工购买其产品,但确实希望旗下员工可以在购买相同种类产品的时候可以选择自家产品购买。日本当地媒体报道称,夏普目前已经给上至总监下至一般员工设定了产品购买的目标。目前该公司在由于其LCD业务的持续亏损而受到来自银行的压力。此外,该公司最新一季的财报显示,运营利润已经同比下降了86%,其中LCD业务亏损1.02亿美元。据外界分析,以电视和太阳能板著称的夏普公司目前在北美市场的困境主要来自于中国和台湾地区的低价竞争。
为你推送和解读最前沿、最有料的科技创投资讯
36Kr股权投资
汇集行业内最优质创业项目的股权投资平台
聚集15家顶级投资机构的专业互联网融资平台
聚集全球最优秀的创业者,项目融资率接近97%,领跑行业微信OAuth网页认证 - Naso技术随笔/备忘录 - ITeye技术网站
博客分类:
最近要写一个通过微信OAuth协议的网页认证接口,在网上找了一轮,没有找到有什么现成好的代码,就打算自己写算了。
首先因为微信的接口都是https的,用HttpClient实现的话因为不清楚是否支持https,所以计划用ajax在客户端完成认证。不过这个绝对是一个十分愚蠢的想法,因为ajax跨域是一个不可逾越的障碍,只不过开始考虑的不周到,直到开始编码的时候才发现,而且还脑袋抽筋的想去解决它,真是耽误不少时间。
Ajax行不通以后,逼着使用HttpClient在后台实现了。还是担心HttpClient不支持https,所以在网上看了很久,大部分都是说要导入证书什么的,十分复杂。不过还是迫于无奈,只好找到HttpClient的文档直接就开始实验,发现原来这样访问https HttpClient 是完全支持的,和普通的http没有什么不同,之前的担心多余了,还浪费了好多时间去了解。
正式开始,其实微信的认证并不复杂。首先是要调用一个认证URL,引导用户授权(如果有必要),然后微信会回调指定的回调URL,成功的话返回code 参数,通过code就可以继续获取access_token 和 openid,如果之前用户授权的话,还可以获得用户昵称和地址等一些信息。
下面是组装认证URL和处理回调的代码,是从一个HttpServlet和 struts 代码里面直接裁出来的,就是这么个意思而已,编译不过的。
第一步,首先要构造一个认证URL,因为这个URL里面包含了回调URL和一个可以带过去的参数,所以一般还是要先自行组装一下。这里面有个地方要注意,state 参数协议里面说是仅支持字母和数字的,所以最好还是用来传一些简单的参数好了,有些人喜欢把一堆参数通过base64加密后放进state 里面传递,但我发现有些情况下还是容易出错,不要冒险的好。
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
StringBuffer sbrCallbackUrl = new StringBuffer();
StringBuffer sbrWeiXinAuthUrl = new StringBuffer();
StringBuffer sbrParamer = new StringBuffer();
boolean boolFastAuth =
int nServerPort = 0;
int nPortalPageId = 0;
String strToUser = request.getParameter("to_user");
if (null == strToUser || strToUser.trim().length()&=0) {
log.error("WeixinWebAuth fail,need ToUser");
//这个参数是用来指定是否需要引导用户到授权页面
String strFastAuth = request.getParameter("fast");
if (null != strFastAuth ) {
("Fast auth modle");
boolFastAuth =
String strAppId = "appid";//FIXME
if (null == strAppId || strAppId.trim().length()&=0) {
log.error("WeixinWebAuth fail,need appid");
String strAppSecret = " AppSecret ";//FIXME
if (null == strAppSecret || strAppSecret.trim().length()&=0) {
log.error("WeixinWebAuth fail,need AppSecret");
sbrParamer.append(PARAM); //FIXME
sbrCallbackUrl.append(request.getScheme()+"://");
sbrCallbackUrl.append(request.getServerName());
sbrCallbackUrl.append(CALL_BACK_URL);
//组装认证URL
sbrWeiXinAuthUrl.append(WEIXIN_WEB_AUTH_URL);
sbrWeiXinAuthUrl.append("?");
sbrWeiXinAuthUrl.append("appid=" + strAppId);
sbrWeiXinAuthUrl.append("&");
sbrWeiXinAuthUrl.append("redirect_uri=" + java.net.URLEncoder.encode(sbrCallbackUrl.toString(),"UTF-8"));
sbrWeiXinAuthUrl.append("&");
sbrWeiXinAuthUrl.append("response_type=code");
sbrWeiXinAuthUrl.append("&");
if (!boolFastAuth) {
sbrWeiXinAuthUrl.append("scope=snsapi_userinfo");
sbrWeiXinAuthUrl.append("scope=snsapi_base");
sbrWeiXinAuthUrl.append("&");
sbrWeiXinAuthUrl.append("state="+sbrParamer);
sbrWeiXinAuthUrl.append("#wechat_redirect");
("Goto weixin auth path:" + sbrWeiXinAuthUrl);
response.sendRedirect(sbrWeiXinAuthUrl.toString());
组装完地址,直接重定向过去。
第二步,就是要处理回调过来的信息。这个其实也比较简单。
import java.util.HashM
import java.util.M
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import net.sf.json.JSONO
import mons.httpclient.HttpC
import mons.httpclient.methods.PostM
import org.apache.struts.action.ActionF
import org.apache.struts.action.ActionF
import org.apache.struts.action.ActionM
public class WeixinWebAuthCallbackAction extends Action {
private final String strAccessTokenUrl = "https://api./sns/oauth2/access_token";
private final String strGetUserInfoUrl = "https://api./sns/userinfo";
protected ActionForward executeAction(ActionMapping mapping,
ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
String strWeixinCallbackCode =
String strParamers =
("微信web认证获取帐号开始");
strWeixinCallbackCode = request.getParameter("code");
("return code:" + strWeixinCallbackCode);
strParamers = request.getParameter("state");
("return :" + strParamers);
if (null == strWeixinCallbackCode || strWeixinCallbackCode.equals("authdeny")
|| null == strParamers || strParamers.isEmpty()) {
("用户拒绝授权");
request.setAttribute("errcode", 1);
request.setAttribute("errmsg", "用户拒绝授权");
return mapping.findForward("fail");
String strAccessToken =
String strUserOpenId =
String strNickName = "";
String strSex = "";//123
String address = "";
String strAppId = "AppId";//FIXME
String strAppSecret = "AppSecret";//FIXME
Map&String, String& mapAccessToken = getAccessTokenAndUid(strWeixinCallbackCode, strAppId, strAppSecret);
if (null == mapAccessToken || null != mapAccessToken.get("errcode")) {
("获取访问token错误");
if (null != mapAccessToken) {
request.setAttribute("errcode", mapAccessToken.get("errcode"));
request.setAttribute("errmsg", mapAccessToken.get("errmsg"));
return mapping.findForward("fail");
strAccessToken = mapAccessToken.get("access_token");
strUserOpenId = mapAccessToken.get("openid");
Map&String, String& mapUserInfo = getUserInfo(strAccessToken, strUserOpenId);
if (null != mapUserInfo) {
if(null != mapUserInfo.get("errcode")){
("获取用户信息错误");
request.setAttribute("errcode", mapUserInfo.get("errcode"));
request.setAttribute("errmsg", mapUserInfo.get("errmsg"));
return mapping.findForward("fail");
strNickName = mapUserInfo.get("nickname");
strSex = mapUserInfo.get("sex");
("weixin web auth,user:"+strNickName+" sex:"+strSex);
return mapping.findForward("success");
private Map&String , String& getAccessTokenAndUid(String strCode,String strAppId,String strAppSecret){
String responseDate = "" ;
Map&String , String& token =
PostMethod postMethod = new PostMethod(strAccessTokenUrl);
postMethod.addParameter("appid", strAppId);
postMethod.addParameter("secret",strAppSecret);
postMethod.addParameter("code",strCode);
postMethod.addParameter("grant_type","authorization_code");
HttpClient client = new HttpClient();
client.executeMethod(postMethod);
responseDate = postMethod.getResponseBodyAsString();
} catch (Exception e) {
log.error(e.getMessage());
e.printStackTrace();
if(responseDate.trim().length()&0){
token = new HashMap&String, String&();
JSONObject jsonData = JSONObject.fromObject(responseDate);
if (jsonData.has("errcode")) {
log.error("Get access token fail,reason:" + jsonData.getString("errmsg"));
token.put("errcode", jsonData.getString("errcode"));
token.put("errmsg", jsonData.getString("errmsg"));
("Get access_token:"+jsonData.getString("access_token")+";openid:"+jsonData.getString("openid"));
token.put("access_token", jsonData.getString("access_token"));
token.put("openid", jsonData.getString("openid"));
private Map&String , String& getUserInfo(String strAccessToken,String strOpenId){
String responseDate = "" ;
Map&String , String& token =
PostMethod postMethod = new PostMethod(strGetUserInfoUrl);
postMethod.addParameter("access_token", strAccessToken);
postMethod.addParameter("openid",strOpenId);
postMethod.addParameter("lang","zh_CN");
HttpClient client = new HttpClient();
client.executeMethod(postMethod);
responseDate = postMethod.getResponseBodyAsString();
} catch (Exception e) {
log.error(e.getMessage());
e.printStackTrace();
if(responseDate.trim().length()&0){
token = new HashMap&String, String&();
JSONObject jsonData = JSONObject.fromObject(responseDate);
if (jsonData.has("errcode")) {
("Get user info fail,reason:["+jsonData.getString("errcode")+ "]" + jsonData.getString("errmsg"));
//这个是没用户授权,不能取用户信息的返回错误码,文档没提及,随时可能变的
if (48001 == jsonData.getLong("errcode")) {
("Can't get userinfo,but wo can continue.");
token.put("errcode", jsonData.getString("errcode"));
token.put("errmsg", jsonData.getString("errmsg"));
if (!jsonData.has("openid") || !jsonData.has("nickname")) {
("No user info available");
("weixin web auth,user:"+jsonData.getString("nickname")+" sex:"+jsonData.getString("sex")
+ " province:"+jsonData.getString("province")+" city:"+jsonData.getString("city")
+ " country:"+jsonData.getString("country"));
token.put("openid", jsonData.getString("openid"));
token.put("nickname", jsonData.getString("nickname"));
token.put("sex", jsonData.getString("sex"));
token.put("province", jsonData.getString("province"));
token.put("city", jsonData.getString("city"));
token.put("country", jsonData.getString("country"));
浏览: 26007 次
来自: 广州
这样做存在一个问题, 就是1个任务会执行多遍, lock只能保 ...
博主好,能给个原代码吗?正在做这个,也是资料找的焦头烂额!邮箱 ...
能解决问题就是好的解决方案!
看了你这文章很有感触,我也工作6年了,之前一个大型项目里面做l ...
楼主,等你工作十年之后,过而立之年之后,30多岁程序员会很迷茫 ...

我要回帖

更多关于 微信网页获取openid 的文章

 

随机推荐