微信能不能用qq登录找到微信在外地登录地方

刚才微信被异地登陆,有谁知道如何查找异地登陆信息??谢谢
全部答案(共2个回答)
异地登陆微信会提醒,反之QQ也会提醒
聊天界面的右下角有个+号,点击后有个“位置”选项,点开它就能自动定位了,,,前提是连接了网络。
首先我要知道你的手机是什么系统 IOS还是安卓?
QQ会员有这个功能.
如果你不是会员,就麻烦一点,不过也还是可以
在程序安装目录下面以旧QQ号命名的文件夹中找到user.db文件,复制它;
  接着再到新号的...
要先把EXCEL文件另存为*.csv格式,
然后装一个360或者qq手机助手,按照软件提示导入手机
答: 微信人工投票买票最低价格是2毛一票,根据难度给客户报价,报价是按票算的,就是每票多少钱这样,一般是0.2-0.4元一票。做这个行业的。成本是多少我们都清楚的,也...
答: 同学习的目的是什么?
1、为了一技之长,养家糊口
2、为了一个兴趣爱好
3、为了考试及格
4、为了....
总之,不管是学什么,目的都是为了提高在某个方面的知识...
答: 找到对方的IP,输入IE地址里就行了!
每家运营商的DNS都不同,而且各省的也不同。你可以问问你的网络提供商,他们会告诉你的。(也可以通过分别访问域名和IP来检查DNS是否正常,访问域名不行,而访问IP可以,则说明DNS设置不对)
另外,如果ADSL-电脑没问题,一般ADSL-路由器也没问题的。而且采用ADSL拨号的话,DNS可以不设置的,拨号成功后会自动取得DNS服务器。
问题可能出在路由器设置上。进去检查一下吧。看看上网方式,上网用户名密码是否正确。
(有个问题要注意一下,有些地方的运营商会限制使用路由器或者限制接入数量,一般是采取绑定网卡MAC地址的方式,如果路由器设置都正常,试试路由器的MAC地址克隆功能,把电脑网卡的MAC复制过去)
海鸟的种类约350种,其中大洋性海鸟约150种。比较著名的海鸟有信天翁、海燕、海鸥、鹈鹕、鸬鹚、鲣鸟、军舰鸟等。海鸟终日生活在海洋上,饥餐鱼虾,渴饮海水。海鸟食量大,一只海鸥一天要吃6000只磷虾,一只鹈鹕一天能吃(2~2.5)kg鱼。在秘鲁海域,上千万只海鸟每年要消耗?鱼400×104t,它们对渔业有一定的危害,但鸟粪是极好的天然肥料。中国南海著名的金丝燕,用唾液等作成的巢被称为燕窝,是上等的营养补品。
无锡至少有两所正规大学:
1、江南大学
2、南京农业大学无锡渔业学院。由于它不直接在无锡召本科生,所以许多人不知道这个学校:它位于山水东[西?]路九号,拥有约20位正教授/研究员,80位副教授/副研究员,和多位首席科学家。去年还有中国工程院的院士一名。
1、江南大学坐落于太湖之滨的江南名城——江苏省无锡市,是教育部直属的国家“211工程”重点建设高校。
  享有“轻工高等教育明珠”美誉的江南大学,有着久远的历史渊源和深厚的文化底蕴。在1902年创建的三江师范学堂基础上发展起来的中央大学(现南京大学)是江南大学办学的前身。1952年全国高校院系调整时,南京大学食品工业系、浙江大学农化系、江南大学食品工业系以及复旦大学、武汉大学的有关系科合并组建成南京工学院(现东南大学)食品工业系。1958年该系整建制东迁无锡,成立无锡轻工业学院,1995年更名为无锡轻工大学,1998年由隶属中国轻工总会划转直属教育部。2001年1月,经教育部批准,无锡轻工大学、江南学院、无锡教育学院合并组建江南大学。
  学校学科涉及经济学、法学、教育学、文学、理学、工学、农学、医学、管理学等九大门类,设有生物工程学院、食品学院、纺织服装学院、化学与材料工程学院、设计学院、机械工程学院、通信与控制工程学院、信息工程学院、商学院、法政学院、文学院、师范学院、理学院、外国语学院、土木工程系、医学系、艺术系、体育系等18个院(系),共56个本科专业,全日制在校本科学生18500余人。成人学历教育在籍学生5000余人,网络学历教育在籍学生1万余人。还有经教育部批准的中外合作办学的莱姆顿学院及与社会力量合作办学的江南大学太湖学院。
  学校设有轻工技术与工程、食品科学与工程等2个博士后流动站和10个博士点,覆盖发酵工程等16个二级博士学科专业和39个硕士学科专业,基本包涵了轻工、纺织、食品的全部领域。现有在校各类硕士研究生、博士研究生2500余人。学校拥有4个国家级和部省级重点学科,建有教育部、国家计委批准的“国家生命科学与技术人才培养基地”,培养本硕连读、本硕博连读的高层次人才。食品科学、发酵工程等2个国家重点学科在国内同类学科中具有独特优势,实力雄厚,处于领先地位,在国际上有较大影响。经近50年的建设与发展,江南大学已成为一所规模结构较为合理,教学质量优异,科研水平上乘,社会服务盛誉,各方面均得到社会公认,在国内外具有较高知名度的多科性大学。
  学校师资力量雄厚,现有专任教师1519名,其中中国工程院院士3名(2名为双聘院士),教授160名,副教授456名。由300多名博士生导师、硕士生导师组成的学术带头群体,为高层次人才培养、科技创新和社会服务奠定了厚实的基础。学校始终坚持社会主义办学方向,坚持以育人为本,把为经济建设和社会发展培养高质量的人才作为学校的根本任务。经过多年努力,形成了具有自身特点的人才培养体系和教学质量保障体系,做到人才培养与市场需求紧密结合,培养高素质创新型的专门人才。学校注重学生综合素质、基础知识和实践能力的培养,如在本科教学中,将相对狭窄的专业对口教育转到本科通识加特色教育;推进多样化的人才培养方式,学生通过辅修、第二专业、第二学位等途径培养复合型人才;让学生早期介入科研活动,从科研实践中感受和理解知识产生和发展过程,培养学生科学素养、科学精神、创新能力。学校十分重视校园精神文明建设。一年一度的江南之春文化艺术节、科技节、金秋体育节等活动精彩纷呈,暑期社会实践、校园文化生活丰富多彩。在大学生数学建模竞赛、数学竞赛、电子制作竞赛、机器人竞赛、艺术设计竞赛等全国性比赛中,学生连年获得大奖。建校以来,学校已为国家输送了数万名毕业生,许多毕业生已成为各条战线的科技精英和领导骨干。
  作为我国轻工、食品、生物技术高科技的摇篮与依托单位之一,“九五”期间,学校承担并完成了大批国家重大科技攻关项目及省部级应用基础研究课题,其中有70多项研究成果填补了国内空白,并达到了国际先进水平,30多项科研成果荣获国家和省级科技进步奖。“十五”以来,学校科研实力进一步增强,科技项目和科技成果逐年增多。2003年取得国家、部省级以上科技成果奖励20项,其中有国家科学技术发明二等奖(一等奖空缺)一项,中国石油和化学工业科学技术一等奖一项等。2004年,科技总经费9000多万元,获准立项的纵向科研项目97项,横向科研270多项;鉴定或验收科技成果86项,其中30%以上成果达到国际领先或国际先进水平。全校教职工共发表各类论文2700多篇,出版专著130多部,被国际三大检索收录论文143篇。学校承担的国家“十五”科技攻关“农产品深加工”、“发酵工程关键技术”课题全面通过结题验收并进入后期滚动;国家自然科学基金项目获资助13项;获部省级以上科技成果奖励8项,其中1项科研成果获得江苏省科技进步一等奖;全年申请专利356项,学校专利申请量位居全国高校第7名、江苏省第1名;人文社科领域承担的项目、层次、经费等方面都有较大增长。
  学校重视面向经济建设主战场,加快科技创新,推进科技成果产业化,建有科技部、国家计委批准的“发酵技术国家工程研究中心”等10个国家级、省部级研究中心、实验室。建立了由海尔集团、茅台酒集团、青岛啤酒集团、北京燕京啤酒集团、绍兴黄酒集团、江苏小天鹅集团等100多家企事业单位加盟的董事会,注重学校与企业、社会之间的联系,促进了产学研的结合和为社会各方面的服务。各院(系)还建有二级董事会,共有400余家企事业单位参加。学校十分重视发挥在轻工、食品、艺术设计、纺织、环境、化工、生物医药等方面的科技优势,积极为全国轻工纺织行业的科技进步、产品开发、人才知识更新服务,积极参与国家西部大开发和为江苏省沿江发展战略、苏北发展战略及海上苏东发展战略服务,积极适应无锡市支柱产业的创新发展、科技和人才需求,在科研开发、技术服务、人才培养等方面与企业开展全面合作,推动企业的技术改造和产品更新换代。与地方政府合资建立的省级大学科技园,成为高科技研究项目的重要孵化基地,为国民经济和社会发展作出贡献。由于学校的优质服务,中国电信、丹尼斯克(中国)有限公司、嘉里粮油(深圳)商务拓展有限公司、东海粮油工业(张家港)有限公司、国民淀粉上海化学有限公司、三得利(中国)投资有限公司、青岛啤酒集团、重庆啤酒集团、杰能科生物工程有限公司、广州天赐高新材料科技有限公司、国际特品(ISP)(香港)有限公司、东洋之花化妆品有限公司等大型企业都在学校设立各类奖学、奖教金,每年发放的奖学金总额达600多万元。
  学校与国内外的教学科研交流合作频繁,是教育部批准的首批接受外国留学生和港澳台学生的高校。自六十年代开始,就接受和培养来自世界各国的留学生,现有本科、硕士、博士等各级各类留学生260余人。学校已与20多个国家和地区的44所大学建立了紧密的校际交流关系,并与美国、加拿大、日本等近20个国家的高校、机构开展办学、科研等方面的合作。目前正在执行的校际合作与交流项目有17个,其中与澳大利亚、英国一流大学之间的“2+2”学分互认合作项目受到学生的欢迎。学校聘请了50多位国外著名的学者和教授担任学校的名誉教授或客座教授,每年举办国际及双边学术交流会,已逐步成为轻纺、食品、艺术设计等领域的国际交流中心。
  学校图书馆现有藏书152.76万余册、电子图书37.40万册,中外文期刊3100余种,建有教育部科技查新工作站。学校编辑出版自然科学、人文社会科学、食品与生物技术、教育科学等4种学报及《冷饮与速冻食品工业》和《电池工业》杂志,向国内外公开发行。
  在教育部、省、市政府的大力支持下,地处无锡蠡湖新城、太湖之畔,占地3100多亩的学校新校区已建成面积36万平方米。新校区以“生态校园•曲水流觞”为设计理念,融青瓦白墙的江南建筑风格与小溪、树林、草坪的多层次园林空间为一体,展现绿色、水乡、文化韵味。设施先进、功能齐全、环境优美的现代化校园,为莘莘学子学习研究提供了良好的条件。
  钟灵毓秀的江南山水,造就了江南校园开拓进取的学术氛围;蕴涵深厚的人文传统,赋予了江南学子锐意求新的创造精神。迈入新世纪,学校迎来了改革、发展的良好机遇,“211工程”将重点建设和发展工业生物技术、食品科学工程和安全、工业设计创新系统、纤维制品现代加工技术、中小企业管理与发展、轻工过程信息化科学与工程等6个优势和特色明显的学科群,进一步提升学校在轻纺、食品等学科领域的优势地位,使学校的整体办学水平和人才培养质量得到全方位的提高。
  积百载跬步,创世纪辉煌。江南大学提出的发展总体目标是,经过五至十年时间的努力,把学校建成以工为主、理工结合、工理文交融,科技教育与人文教育协调发展,具有鲜明特色、先进水平,在国内有较大影响的教学研究型开放式多科性大学;通过不断创特色、上水平、求发展、增实力,力争在本世纪中叶,把学校建成国内一流、国际有影响、部分学科达到国际先进水平的综合性大学。
2、南京农业大学无锡渔业学院是南京农业大学与中国水产科学研究院淡水渔业研究中心,在多年联合办学的基础上于1993年7月成立的,她依托南京农业大学雄厚的基础教学条件,和淡水渔业研究中心优越的专业教学条件,为我国及国际水产事业的发展培养了一大批优秀的专业技术人员和管理人才。
学院的宗旨是以推进我国和发展中国家的渔业科学和渔业生产,使渔业产品在当今人类改革食物结构,提高营养水平,创造经济财富方面起重要作用。通过努力,使该院成为一个国际性的渔业科学教育和研究中心。
学院座落在风景秀丽的太湖之滨,中国著名的旅游城市--无锡的西南角上,与中央电视台太湖影视基地相邻,离市区仅10公里之遥,依山傍水,环境十分幽美,交通便利,有1路和820路公交车直达。学院占地面积26公顷,建筑面积达35000多平方米。
南京农业大学从1984年开始和淡水渔业研究中心联合办学,设淡水渔业专业(专科)。学院于1994年新开设了“淡水渔业”本科专业。现设水产养殖本、专科专业,水产养殖博士点和硕士点,每年招收博士生、硕士、本科、专科各种层次。
该院长期招收外国留学生,为亚太地区名国培养淡水渔业的技术人才,今后还将进一步提高留学生的办学层次,招收硕士研究生,在招收留学生方面曾受到联合国FAO和UNDP、亚洲水产养殖中心网(NACA)的大力支持。
设有以中国工程院院士夏德全研究员为主的淡水鱼类遗传育种生物技术研究室、营养与饲料、特种水产养殖室、水产品病害研究室、渔业环境保护、渔业经济与信息中心、内陆水域增养殖等7个教研室。学院现有教职员工340名,其中具中高级职称的教师有80名。有突出贡献的农业部中青年专家和享受政府特殊津贴的18人。现有博士3人,硕士25人。
在科学研究方面,先后承担和圆满完成了国家自然科学基金、“八六三”、国家攻关和省、部级课题190多项,获得各类奖励成果85项,其中国家科技进步二等奖1项,国家科技进步三等奖4项。92年获农业部农业机构综合科研能力奖。
在多年的联合办学的实践中,南京农业大学无锡渔业学院的领导非常重视提高学院的教学质量,办学条件逐年得到改善,教学管理趋于完善,教风好、学风正,经过多年的努力,学院的各项办学条件已得到改善,教学手段已基本实现了现代化,配备了语音室、电脑房和先进的电教中心。
学院非常重视发展工作。依托淡水渔业研究中心,综合利用经贸部TCDC培训项目的人力、财力、物力。扎实提高教学质量,改善教学条件,学院领导在经费许可的情况下,投入大量的资金,进行教学设施的改造和教学仪器、设备的添置,积极改善学院的办学备件。建院六年来,学院不断改进教学设施,提高教学质量,目前已拥有教学楼、实验室、图书馆、学生宿舍楼、语音室、电脑房、活动健身房、学生食堂、足球场、蓝球场、大客车、教学实习基地等设施,为国家培养水产专业人才创造了较好的条件。
铝属于两性金属,遇到酸性或碱性都会产生不同程度的腐蚀,尤其是铝合金铸件的孔隙较多,成分中还含有硅和几种重金属,其防腐蚀性能比其他铝合金更差,没有进行防护处理的铝铸件只要遇到稍带碱性或稍带酸性的水,甚至淋雨、水气、露水等就会受到腐蚀,产生白锈。
解决的办法。
铝铸件完成铸造后,在机械加工前,先要进行表面预处理,如预先对铸件进行喷砂,涂上一道底漆(如锌铬黄底漆),在此基础上再进行机械加工,以避免铸铝件在没有保护的情况下放久了被腐蚀。
婴儿2-3个月时的吮手是一种暂时性的现象,它随着婴儿由口唇快感期转向肛门快感期,手的功能随年月的增长,会向探求性功能方向发展,他会自然而然地将自己的小手从吮吸中解放出来,会以更大的兴趣去触摸周围各种物体和多种多样的玩具,这为智能开发开辟了新天地。
一般的感冒,症状较轻,如流清涕,打喷嚏,对胎儿影响不大,也不必服药,休息几天就会好的。但在妊娠早期(5-14周),主要是胎儿胚胎发育器官形成的时间,若患流行性感冒,且症状较重,则对胎儿影响较大,此间服药对胎儿也有较大风险
正常宝宝出生后4个月,在成人扶持下可短时间维持坐的姿势;6个月时能抱坐于大人膝盖之上,如独立坐着,身体会向前倾,须用手支撑;大约7个月时,才能独立地坐一会儿。宝宝坐得过早过晚都不好。妈妈可以先与宝宝玩“引拉游戏”。即让宝宝仰卧在床上,妈妈面对宝宝,一边和宝宝说:“妈妈帮你坐起来玩好吗?”一边慢慢用双手拉其胳膊,拉至坐姿后,将其扶直,稍坐片刻后,再帮助仰卧床上,反复进行3~6次。也可以让宝宝靠着沙发背坐或靠在妈妈胸前坐来进行靠坐练习,还可以在地毯上用几个大垫子围成一个三角形让宝宝靠坐在其中。刚开始训练坐时,宝宝经常会左右摇摆或身子前倾,此时妈妈可教他用双手在前支撑一下。
 首先,父母要理解,孩子的各种异常行为是学习的过程,不要随便给孩子贴上“自私”、“坏孩子”的道德标签。要有耐心,要学会等待。要了解孩子的成长不是一天之内完成的,需要的是一个漫长的过程,这样,父母才能以平常心对待孩子出现的各种波动。
  其次,父母要在孩子的学习过程中用正确的方法帮助孩子。要制止孩子错误的做法,最重要的是要给孩子示范正确的做法。光是批评他,孩子还是不知所措。像前面提到的情况,妈妈可以告诉依依:“你喜欢天天,可以告诉她,如果想抱她,要先请她同意,不能把她弄疼。”
给宝宝选用水果时,要注意与体质、身体状况相宜。舌苔厚、便秘、体质偏热的宝宝,最好给吃寒凉性水果,如梨、西瓜、香蕉、猕猴桃、芒果等,它们可以败火;秋冬季节宝宝患急慢性气管炎时,吃柑橘可疏通经络,消除痰积,因此有助于治疗。但柑橘不能过多食用,如果吃多了,会引宝宝上火,每天给宝宝吃二到三个即要打住;当宝宝缺乏维生素A、维生素C时,多吃含胡萝卜素的杏、甜瓜及葡萄柚,能给身体补充大量的维生素A和维生素C;在秋季气候干燥时,宝宝易患感冒咳嗽,可以给宝宝经常做些梨粥喝,或是用梨加冰糖炖水喝,因为梨性寒,可润肺生津、清肺热,从而止咳祛痰,但宝宝腹泻时不宜吃梨。另外,皮肤生痈疮时也不宜吃桃,这样会使宝宝病情更为加重。
我们在户外进行徒步时也会遇到凹凸不平的山路,当我们在凹凸不平的山路上前进的时候,登山杖可以保持你的身体平衡,避免一些摔倒或磕磕绊绊的发生。
森派蛋糕培训学校不错,就在罗湖东晓路那边,以传授西点、面包制作技术及蛋糕裱花技术为主的培训学校,在行业中享有盛誉。
建议你了解下金铝质品牌。因为他家做的工程比较多,这个业内已经有一定口碑,相信大众的选择没有错。希望可以帮助到你哦,采纳。
体验式拓展训练无论是从形式上还是内容上都满足个人和企业在素质提升方面的需求,让学员在深刻的体验中,从新认识自我,激发自身的潜能,在能力和素质方面得到进一步的提升。
方式有很多种:一是路线的不同,有舒适型名山大川 游览,还有野外体验型,比如峡谷溯溪穿越、登山;带给了员工新一轮的工作和生活的激情,沟通和谐了工作环境,凝聚了公司文化向心力。根据参与人员的不同, 过程中可以住星级宾馆,也可以体验野外露营,可以闲庭信步更可以喊着口号,相互激励着穿越于风景优美的自然风景释放激情,最重要的是旅游中安排的拓展体验项目,可以最大能量的体现公司文化核心的凝聚力。
正在加载...
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415  近排在做微信接口开发,所以总结一下微信授权登录并获取用户信息 这个接口的开发流程。
一、首先你的微信公众号要获得相应的AppID和AppSecret,申请微信登录且通过审核后,才可开始接入流程。
二、授权流程
1、流程说明
2、获取access_token时序图:
三、开发(我的用是CI框架,其实用什么框架都一样,MVC模式就行了)
1、请求CODE
  weixin.php
class weixinController extends CI_Controller {
public $userInfo;
public $wxId;
public function __construct(){
parent::__construct();
//只要用户一访问此模块,就登录授权,获取用户信息
$this-&userInfo = $this-&getWxUserInfo();
* 确保当前用户是在微信中打开,并且获取用户信息
* @param string $url 获取到微信授权临时票据(code)回调页面的URL
private function getWxUserInfo($url = '') {
//微信标记(自己创建的)
$wxSign = $this-&input-&cookie('wxSign');
//先看看本地cookie里是否存在微信唯一标记,
//假如存在,可以通过$wxSign到redis里取出微信个人信息(因为在第一次取到微信个人信息,我会将其保存一份到redis服务器里缓存着)
if (!empty($wxSign)) {
//如果存在,则从Redis里取出缓存了的数据
$userInfo = $this-&model-&redisCache-&getData("weixin:sign_{$wxSign}");
if (!empty($userInfo)) {
//获取用户的openid
$this-&wxId = $userInfo['openid'];
//将其存在cookie里
$this-&input-&set_cookie('wxId', $this-&wxId, 60*60*24*7);
return $userInfo;
//获取授权临时票据(code)
$code = $_GET['code'];
if (empty($code)) {
if (empty($url)) {
$url = rtirm($_SERVER['QUERY_STRING'], '/');
//到WxModel.php里获取到微信授权请求URL,然后redirect请求url
redirect($this-&model-&wx-&getOAuthUrl(baseUrl($url)));
获取code的Controller代码
&  Wxmodel.php
class WxModel extends ModelBase{
public $appId;
public $appSecret;
public $token;
public function __construct() {
parent::__construct();
//审核通过的移动应用所给的AppID和AppSecret
$this-&appId = 'wx0000';
$this-&appSecret = '00000';
$this-&token = '';
* 获取微信授权url
* @param string 授权后跳转的URL
* @param bool 是否只获取openid,true时,不会弹出授权页面,但只能获取用户的openid,而false时,弹出授权页面,可以通过openid获取用户信息
public function getOAuthUrl($redirectUrl, $openIdOnly, $state = '') {
$redirectUrl = urlencode($redirectUrl);
$scope = $openIdOnly ? 'snsapi_base' : 'snsapi_userinfo';
$oAuthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this-&appId}&redirect_uri={$redirectUrl}&response_type=code&scope=$scope&state=$state";
return $oAuthUrl;
获取code的Model代码
这里附上请求参数说明和返回值说明
  请求参数说明:
  响应返回值说明:
  当请求成功,会redirect到请求参数中的redirect_uri的值中去,其实又回到weixin.php的$this-&userInfo = $this-&getWxUserInfo();这行去,然后再一次进入到getWxUserInfo()方法,此时
//获取授权临时票据(code)
$code = $_GET['code'];
&这行也已经能获取得到code的值了。接着进行第二步。
2、通过code获取access_token
  weixin.php
class weixinController extends CI_Controller {
public $userInfo;
public $wxId;
public function __construct(){
parent::__construct();
//只要用户一访问此模块,就登录授权,获取用户信息
$this-&userInfo = $this-&getWxUserInfo();
* 确保当前用户是在微信中打开,并且获取用户信息
* @param string $url 获取到微信授权临时票据(code)回调页面的URL
private function getWxUserInfo($url = '') {
//微信标记(自己创建的)
$wxSign = $this-&input-&cookie('wxSign');
//先看看本地cookie里是否存在微信唯一标记,
//假如存在,可以通过$wxSign到redis里取出微信个人信息(因为在第一次取到微信个人信息,我会将其保存一份到redis服务器里缓存着)
if (!empty($wxSign)) {
//如果存在,则从Redis里取出缓存了的数据
$userInfo = $this-&model-&redisCache-&getData("weixin:sign_{$wxSign}");
if (!empty($userInfo)) {
//获取用户的openid
$this-&wxId = $userInfo['openid'];
//将其存在cookie里
$this-&input-&set_cookie('wxId', $this-&wxId, 60*60*24*7);
return $userInfo;
//获取授权临时票据(code)
$code = $_GET['code'];
if (empty($code)) {
if (empty($url)) {
$url = rtirm($_SERVER['QUERY_STRING'], '/');
//到WxModel.php里获取到微信授权请求URL,然后redirect请求url
redirect($this-&model-&wx-&getOAuthUrl(baseUrl($url)));
/***************这里开始第二步:通过code获取access_token****************/
$result = $this-&model-&wx-&getOauthAccessToken($code);
//如果发生错误
if (isset($result['errcode'])) {
return array('msg'=&'授权失败,请联系客服','result'=&$result);
//到这一步就说明已经取到了access_token
$this-&wxId = $result['openid'];
$accessToken = $result['access_token'];
$openId = $result['openid'];
//将openid和accesstoken存入cookie中
$this-&input-&set_cookie('wx_id', $this-&wxId, 60*60*24*7);
$this-&input-&set_cookie('access_token', $accessToken);
获取access_token的控制器代码
  WxModel.php
class WxModel extends ModelBase{
public $appId;
public $appSecret;
public $token;
public function __construct() {
parent::__construct();
//审核通过的移动应用所给的AppID和AppSecret
$this-&appId = 'wx0000';
$this-&appSecret = '00000';
$this-&token = '';
* 获取微信授权url
* @param string 授权后跳转的URL
* @param bool 是否只获取openid,true时,不会弹出授权页面,但只能获取用户的openid,而false时,弹出授权页面,可以通过openid获取用户信息
public function getOAuthUrl($redirectUrl, $openIdOnly, $state = '') {
$redirectUrl = urlencode($redirectUrl);
$scope = $openIdOnly ? 'snsapi_base' : 'snsapi_userinfo';
$oAuthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this-&appId}&redirect_uri={$redirectUrl}&response_type=code&scope=$scope&state=$state#wechat_redirect";
return $oAuthUrl;
* 获取access_token
public function getoAuthAccessToken($code) {
return json_decode(file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this-&AppId}&secret={$this-&AppSecret}&code={$authCode}&grant_type=authorization_code",true);
获取access_token的Model代码
这里附上参数说明
  请求参数说明:
  响应返回值说明:
  当返回错误时是这样子的:
3、通过access_token调用接口(获取用户信息)  获取access_token后,进行接口调用,有以下前提:
  (1)access_tokec有效且未超时;
  (2)微信用户已授权给第三方应用账号相应的接口作用域(scope)。
  以下是获取用户信息的代码
  weixin.php
class weixinController extends CI_Controller {
public $userInfo;
public $wxId;
public function __construct(){
parent::__construct();
//只要用户一访问此模块,就登录授权,获取用户信息
$this-&userInfo = $this-&getWxUserInfo();
* 确保当前用户是在微信中打开,并且获取用户信息
* @param string $url 获取到微信授权临时票据(code)回调页面的URL
private function getWxUserInfo($url = '') {
//微信标记(自己创建的)
$wxSign = $this-&input-&cookie('wxSign');
//先看看本地cookie里是否存在微信唯一标记,
//假如存在,可以通过$wxSign到redis里取出微信个人信息(因为在第一次取到微信个人信息,我会将其保存一份到redis服务器里缓存着)
if (!empty($wxSign)) {
//如果存在,则从Redis里取出缓存了的数据
$userInfo = $this-&model-&redisCache-&getData("weixin:sign_{$wxSign}");
if (!empty($userInfo)) {
//获取用户的openid
$this-&wxId = $userInfo['openid'];
//将其存在cookie里
$this-&input-&set_cookie('wxId', $this-&wxId, 60*60*24*7);
return $userInfo;
//获取授权临时票据(code)
$code = $_GET['code'];
if (empty($code)) {
if (empty($url)) {
$url = rtirm($_SERVER['QUERY_STRING'], '/');
//到WxModel.php里获取到微信授权请求URL,然后redirect请求url
redirect($this-&model-&wx-&getOAuthUrl(baseUrl($url)));
/***************这里开始第二步:通过code获取access_token****************/
$result = $this-&model-&wx-&getOauthAccessToken($code);
//如果发生错误
if (isset($result['errcode'])) {
return array('msg'=&'授权失败,请联系客服','result'=&$result);
//到这一步就说明已经取到了access_token
$this-&wxId = $result['openid'];
$accessToken = $result['access_token'];
$openId = $result['openid'];
//将openid和accesstoken存入cookie中
$this-&input-&set_cookie('wx_id', $this-&wxId, 60*60*24*7);
$this-&input-&set_cookie('access_token', $accessToken);
/*******************这里开始第三步:通过access_token调用接口,取出用户信息***********************/
$this-&userInfo = $this-&model-&wx-&getUserInfo($openId, $accessToken);
//自定义微信唯一标识符
$wxSign =substr(md5($this-&wxId.'k2a5dd'), 8, 16);
//将其存到cookie里
$this-&input-&set_cookie('wxSign', $wxSign, 60*60*24*7);
//将个人信息缓存到redis里
$this-&library-&redisCache-&set("weixin:sign_{$wxSign}", $userInfo, 60*60*24*7);
return $userInfo;
获取用户信息的Controller
  WxModel.php
class WxModel extends ModelBase{
public $appId;
public $appSecret;
public $token;
public function __construct() {
parent::__construct();
//审核通过的移动应用所给的AppID和AppSecret
$this-&appId = 'wx0000';
$this-&appSecret = '00000';
$this-&token = '';
* 获取微信授权url
* @param string 授权后跳转的URL
* @param bool 是否只获取openid,true时,不会弹出授权页面,但只能获取用户的openid,而false时,弹出授权页面,可以通过openid获取用户信息
public function getOAuthUrl($redirectUrl, $openIdOnly, $state = '') {
$redirectUrl = urlencode($redirectUrl);
$scope = $openIdOnly ? 'snsapi_base' : 'snsapi_userinfo';
$oAuthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this-&appId}&redirect_uri={$redirectUrl}&response_type=code&scope=$scope&state=$state#wechat_redirect";
return $oAuthUrl;
* 获取access_token
public function getoAuthAccessToken($code) {
return json_decode(file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this-&AppId}&secret={$this-&AppSecret}&code={$authCode}&grant_type=authorization_code",true);
* 获取用户信息
public function getUserInfo($openId, $accessToken) {
$url = 'https://api.weixin.qq.com/sns/userinfo';
//获取用户微信账号信息
$userInfo = $this-&callApi("$url?access_token=$accessToken&openid=$openId&lang=zh-CN");
if ($userInfo['errcode']) {
return array('msg'=&'获取用户信息失败,请联系客服', $userInfo);
$userInfo['wx_id'] = $openId;
return $userInfo;
* 发起Api请求,并获取返回结果
* @param string 请求URL
* @param mixed 请求参数 (array|string)
* @param string 请求类型 (GET|POST)
* @return array
public function callApi($apiUrl, $param = array(), $method = 'GET') {
$result = curl_request_json($error, $apiUrl, $params, $method);
//假如返回的数组有错误码,或者变量$error也有值
if (!empty($result['errcode'])) {
$errorCode = $result['errcode'];
$errorMsg = $result['errmsg'];
} else if ($error != false) {
$errorCode = $error['errorCode'];
$errorMsg = $error['errorMessage'];
if (isset($errorCode)) {
//将其插入日志文件
file_put_contents("/data/error.log", "callApi:url=$apiUrl,error=[$errorCode]$errorMsg");
if ($errorCode === 40001) {
//尝试更正access_token后重试
$pos = strpos(strtolower($url), 'access_token=');
if ($pos !==false ) {
$pos += strlen('access_token=');
$pos2 = strpos($apiUrl, '&' ,$pos);
$accessTokened = substr($apiUrl, $pos, $pos2 === false ? null : ($pos2 - $pos));
return $this-&callApi(str_replace($accessTokened, $this-&_getApiToken(true), $apiUrl), $param, $method);
}catch (WeixinException $e) {
//这里抛出异常,具有的就不详说了
throw new WeixinException($errorMessage, $errorCode);
return $result;
* 获取微信 api 的 access_token 。 不同于 OAuth 中的 access_token ,参见
http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96access_token
* @param bool 是否强制刷新 accessToken
private function _getApiToken($forceRefresh = false) {
//先查看一下redis里是否已经缓存过access_token
$accessToken = $this-&library-&redisCache-&get('Weixin:AccessToken');
if($forceRefresh || empty($accessToken)) {
$result = $this-&callApi("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this-&appId}&secret={$this-&appSecret}");
$accessToken = $result['access_token'];
$expire = max(1, intval($result['expires_in']) - 60);
//将access_token缓存到redis里去
$this-&library-&redisCache-&set('Weixin:AccessToken', $accessToken, $expire);
return $accessToken;
获取用户信息的Model
  Common.php
发起一个HTTP(S)请求,并返回json格式的响应数据
@param array 错误信息
array($errorCode, $errorMessage)
@param string 请求Url
@param array 请求参数
@param string 请求类型(GET|POST)
@param int 超时时间
@param array 额外配置
@return array
public function curl_request_json(&$error, $url, $param = array(), $method = 'GET', $timeout = 10, $exOptions = null) {
$error = false;
$responseText = curl_request_text($error, $url, $param, $method, $timeout, $exOptions);
$response = null;
if ($error == false && $responseText & 0) {
$response = json_decode($responseText, true);
if ($response == null) {
$error = array('errorCode'=&-1, 'errorMessage'=&'json decode fail', 'responseText'=&$responseText);
//将错误信息记录日志文件里
$logText = "json decode fail : $url";
if (!empty($param)) {
$logText .= ", param=".json_encode($param);
$logText .= ", responseText=$responseText";
file_put_contents("/data/error.log", $logText);
return $response;
发起一个HTTP(S)请求,并返回响应文本
@param array 错误信息
array($errorCode, $errorMessage)
@param string 请求Url
@param array 请求参数
@param string 请求类型(GET|POST)
@param int 超时时间
@param array 额外配置
@return string
public function curl_request_text(&$error, $url, $param = array(), $method = 'GET', $timeout = 15, $exOptions = NULL) {
//判断是否开启了curl扩展
if (!function_exists('curl_init')) exit('please open this curl extension');
//将请求方法变大写
$method = strtoupper($method);
$ch = curl_init();
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
if (isset($_SERVER['HTTP_USER_AGENT'])) curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
if (isset($_SERVER['HTTP_REFERER'])) curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
switch ($method) {
case 'POST':
curl_setopt($ch, CURLOPT_POST, true);
if (!empty($param)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, (is_array($param)) ? http_build_query($param) : $param);
case 'GET':
case 'DELETE':
if ($method == 'DELETE') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
if (!empty($param)) {
$url = $url.(strpos($url, '?') ? '&' : '?').(is_array($param) ? http_build_query($param) : $param);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_URL, $url);
//设置额外配置
if (!empty($exOptions)) {
foreach ($exOptions as $k =& $v) {
curl_setopt($ch, $k, $v);
$response = curl_exec($ch);
$error = false;
//看是否有报错
$errorCode = curl_errno($ch);
if ($errorCode) {
$errorMessage = curl_error($ch);
$error = array('errorCode'=&$errorCode, 'errorMessage'=&$errorMessage);
//将报错写入日志文件里
$logText = "$method $url: [$errorCode]$errorMessage";
if (!empty($param)) $logText .= ",$param".json_encode($param);
file_put_contents('/data/error.log', $logText);
curl_close($ch);
return $response;
获取用户信息的自定义函数
  通过以上三步调用接口,就可以获取到用户的微信账号信息了。
  大家可以认真看看代码, 里面很多地方我都带上了注释,很容易理解。希望想学习的朋友可以认真看看。
  如果此博文有哪里讲得让人难以理解的,欢迎留言交流,如文章有解释出的地方,欢迎指出。
  如果您觉得能在此博文学到新知识,请在下方为我顶一个,如文章有解释错的地方,欢迎指出。
 & 互相学习,共同进步!
阅读(...) 评论()

我要回帖

更多关于 微信商户平台登录 的文章

 

随机推荐