• 微信公众号开发中,有这么一个场景,点击模板消息中详情url进入到第三方的界面的问题,不知道别的大神是怎么做的,我第一种方法是,老老实实的按照官方文档去做。方法1:通过网页授权,获取到code,再通过code获取...

    在微信公众号开发中,有这么一个场景,点击模板消息中详情url进入到第三方的界面的问题,不知道别的大神是怎么做的,我第一种方法是,老老实实的按照官方文档去做。

    方法1:通过网页授权,获取到code,再通过code获取openid,再根据openid请求接口,获取自己需要的参数。https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=第三方url&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    这样做在实际开发中受到了很大限制。

    方法2:需要的参数直接在上面的url中携带。当然需要自己处理一下,直接一次传很多参数,js获取不到,传递一个是可以获取到的,没弄明白为什么。

    传递一个参数:(这样可以直接在js里获取到这里传递的一个参数mcssn)
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx3aa9835c4b466364&redirect_uri=http://ip:port/view/index.html?mcssn=11111111111111111111&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect

    传递多个参数:(只获取到了一个,不知道为什么)
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx3aa9835c4b466364&redirect_uri=http://ip:port/view/index.html?mcssn=11111111111111111111&teacct=123456&mccode=22222222&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect

    传递多个参数:(想办法处理一下,自己的多个参数不用&连接,我这里用*连接了)
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx3aa9835c4b466364&redirect_uri=http://ip:port/view/index.html?mcssn=11111111111111111111*teacct=123456*mccode=22222222&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect

    这样在js里可以用var urlSearch = location.search; 来获取传递过来的参数。这里直接贴出了写的方法:

    //调用方法
    $(document).ready(function(){
    var mcssn = getUrlParams("mcssn");
    var teacct= getUrlParams("teacct");
    var mccode= getUrlParams("mccode");
    console.log(mcssn);
    console.log(teacct);
    console.log(mccode);
    }); 
    
    function getUrlParams(names) {
    //获取?后面的参数
       var urlSearch = location.search;
       var urlValue="";
       //以?*&来拆分
       var params = urlSearch.split(/[?*&]/);
        for(var i=0;i<params.length;i++){
        //如果url参数里包含传递过来names字段,则取=后面的部分
            if(params[i].indexOf(names) >= 0 ){
                urlValue=params[i].split("=")[1];
                return urlValue;
            }
        }
    
       return urlValue;
    }   
    
    展开全文
  • 微信开放平台“开发资源”中网站... 据开发者资质认证处介绍:开发者资质认证通过后,微信开放平台帐号下的应用,将获得微信登录、智能接口、第三方平台开发等高级能力。 所以在微信第三方授权登陆获取用户信息...

    微信开放平台开发系列文章:

    微信开放平台开发第三方授权登陆(一):开发前期准备

    微信开放平台开发第三方授权登陆(二):PC网页端

    微信开放平台开发第三方授权登陆(三):Android客户端

    微信开放平台开发第三方授权登陆(四):微信公众号

    微信开放平台开发第三方授权登陆(五):微信小程序

     

    目录

    一、前期准备流程

    二、具体实现步骤

    1、注册邮箱账号

    2、注册微信开放平台账号、完善开发者资料

    3、申请开发者资质认证

    1)申请开发者资质认证

    2)选定类型

    3)填写“认证资料”

    4)填写“管理员信息”

    5)上传“企业基本信息”材料:

    6)进入填写发票及支付费用

    4、创建应用

    1)创建网站应用

    2)创建移动应用

    5、申请微信登陆功能

    三、注意事项

    四.主要提供材料

    五、特殊情况处理方案


    据微信开放平台“开发资源”中网站应用微信登陆功能开发指南描述:进行授权登陆接入前,需要先注册一个开发者账号,并拥有一个已经审核通过的网站应用,并获取AppID和APPSecret,然后申请微信登陆并通过审核后,可以接入流程进行开发。

    据开发者资质认证处介绍:开发者资质认证通过后,微信开放平台帐号下的应用,将获得微信登录、智能接口、第三方平台开发等高级能力。

    所以在微信第三方授权登陆获取用户信息开发前,需要做一些前期准备。目的是获取到AppID以及AppSecret,并成功申请微信登陆功能

    一、前期准备流程

    1、注册邮箱账号。

    2、根据邮箱账号注册微信开放平台账号,完善开发者资料。

    3、申请开发者资质认证、填写相关资料、填写发票、支付认证金额。提交并等待认证结果

    4、认证成功后,创建网站应用,填写基本信息、下载网站信息登记表填写并上传扫描件、填写授权回调域等。提交审核等待结果。

    5、认证成功后,创建移动应用,至少选择安卓、IOS、WP8其中一种平台

    6、创建应用成功后,申请微信登陆,等待审核结果,待审核通过后,可进行微信登陆的开发。

    注:创建应用和开发者资质认证可同时进行

    准备工作大致流程图

    二、具体实现步骤

    1、注册邮箱账号

    支持网易邮箱、QQ邮箱等常规邮箱。此邮箱将成为日后登陆开放平台的账号

     

    2、注册微信开放平台账号、完善开发者资料

    1)填写邮箱进行注册、开放平台将发送邮件到填写邮箱中,点击邮件上的地址进行开发者资料的完善。(开放平台注册地址:https://open.weixin.qq.com/cgi-bin/readtemplate?t=regist/regist_tmpl&lang=zh_CN

    2)开发者资料完善:主要填写注册人信息。如真实姓名、真实手机号码、联系地址、身份证号码。使用注册人的微信扫码绑定为管理员。提交信息。(邮件信息包含地址,点击后进行资料完善)

    3)完善资料后,根据邮箱及密码进行登录

     

    3、申请开发者资质认证

    1)申请开发者资质认证

    登录后,点击右上角邮箱号进入“基本资料”,点击“开发者资质认证”,显示未认证,点击“现在申请”。

    认证成功后,这里将变成认证成功:

    2)选定类型

    同意“微信开放平台开发者资质认证服务协议”,点击下一步。选择类型为“企业”,点击确定。

    注:类型包含了企业、网店商家、媒体(事业单位媒体、其他媒体)、政府及事业单位、其他组织(社会团体、民办非企业、其他组织)

    3)填写“认证资料”

    包括企业全称、组织机构代码、工商执照注册号、法定代表人/企业负责人姓名、经营范围(一般经营范围)、企业规模(选填)、企业开户名称、企业开户银行、企业银行账号。

    4)填写“管理员信息”

    包括账号管理员姓名、账号管理员部门与职位、账号管理员手机号、管理员座机、管理员电子邮件、身份证号。最后需要使用管理员的微信进行扫码。

    5)上传“企业基本信息”材料:

    需要准备的材料及要求如下

    I.组织机构代码证

    组织机构代码证必须在有效期范围内。必须是原件照片、扫描件或复印件加盖企业公章后的扫描件。图片不超2M

    II.企业工商营业执照

    中国大陆工商局或市场监督管理局颁发的工商营业执照,且必须在有效期内。要求原件照片、扫描件或者复印件加盖企业公章后的扫描件

    III.申请公函下载打印

    如果是一般企业需要先下载“一般企业申请认证公函”,个体下载“个体工商户申请认证公函”(见附件中“一般企业申请认证公函.doc”及“个体工商户申请认证公函.doc”或于网站中下载)。对下载的申请公函进行打印。

    IV.填写申请公函信息

    填写内容主要有(根据不同企业类型进行填写,只需要填写其中一个就可以):

    A.一般企业申请认证公函:

    a.企业信息:申请企业全称、官网(可缺省)、办公电话、办公地址、企业规模、企业简介(要说明企业经营范围,重要历程,主要产品和服务及覆盖区域等事项)、

    b.法定代表信息:法定代表人姓名、身份证号码、应用的Appid(这时还没有Appid,此项不填)、登陆Email、

    c.申请相关信息:申请认证理由、提供的服务、

    d.账号运营者信息 : 账号运营者姓名、部门及职位、身份证号、手机号、办公联系电话、电子邮箱

    e.填写认证申请公函:最后运营者签字并加盖企业章

    B.个体工商户申请认证公函:

    a.个体工商户信息:个体工商户全称、官网(可缺省)、办公电话、办公地址、规模、简介(主要说明经营范围,重要历程,主要产品和服务及覆盖区域等事项)

    b.经营者信息:经营者姓名、身份证号码、应用的Appid(这时还没有Appid,此项不填)、登陆Email

    c.申请相关信息:申请认证理由、提供的服务、

    d.账号运营者信息:账号运营者姓名、部门及职位、身份证号、手机号、办公联系电话、电子邮箱

    e.填写认证申请公函:最后运营者签字并加盖企业章

    V.对填写好的申请公函进行上传图片:

    上传加盖企业公章的原件照片或扫描件

    点击下一步。

    6)进入填写发票及支付费用

    等待认证结果。

    注:开发者认证费用为300.有效期一年,可在最后三个月申请年审续期

     

    4、创建应用

    1)创建网站应用

    进入开放平台首页(https://open.weixin.qq.com),点击上方“管理中心”,点击“网站应用”,点击“创建网站应用

    I.填写基本信息

    包括网站应用名称、英文名(选填)、应用简介、英文简介(选填)、应用官网。

    II.上传网站信息登记表扫描件及网站应用图片

           A. 网站信息登记表

    先下载《微信开放平台网站信息登记表》(见附件”微信开放平台网站信息登记表.doc”).然后进行填写打印。最后盖章,上传扫描件。图片不超过2M

    网站开放平台信息登记表填写内容包括:

    a. 网站信息:

    1)网站网址:要创建第三方准备使用的网址。

    2)网站备案号/许可证号

    3)主板单位名称/个人姓名

    4)单位/个人官网网址

    5)单位/个人所在地: 

    6)单位/个人简介:

    b. 开发者账户信息

    1)邮箱:注册微信开放平台的注册邮箱

    2)网站应用名称:与开放平台填写的网站应用名称一致

    c. 负责人信息

    1)  姓名

    2)  职务

    3)  联系人手机

    4)  责任人个人邮箱

    然后填写责任人签名。职务。以及填写日期,最后盖上申请公司的章

           B. 网站应用图片

    上传网站应用水印招聘。28*28像素以及108*108像素的png图片,大小不超过300k。

    上传完成后,点击下一步

    III.填写授权回调域

    填写合法的域名。第三方授权登陆后,只能回调到该域名下的页面。(即,开发的网站上线后的域名)

    审核时间大概7个工作日内(审核资料完整正确的话,大概3天左右能审核通过)

    审核不通过的话,会显示驳回,并且告知哪个环节审核不通过,可以重新修改再审,

    审核成功页面:

    2)创建移动应用

    进入开放平台首页(https://open.weixin.qq.com),点击上方“管理中心”,点击“移动应用”,点击“创建移动应用

    I.填写基本信息

    包括移动应用名称、英文名(选填)、应用简介、英文简介(选填)、应用官网。

    II.上传移动应用图片

        上传移动应用水印图片28*28像素的png图片,以及移动应用高清图片108*108像素的png图片。大小均不超过300k

    III.填写平台信息

         选择平台,一共有三种平台:ISO应用、Android应用和WP8应用

         至少选择一个平台,可以多选。

    A. IOS应用

           细分为iPhone和iPad,可多选

           这两种设备类型均需要提供“Bundle ID”(ISO应用唯一标识)、“测试版本Bundle ID”(ISO应用测试版本的BundleID)、“AppStore下载地址”(选填)

    B.Android应用

            需要提供 “应用签名” 和 “应用包名”,以及“应用下载地址(选填)”

         应用签名可以使用签名生成工具直接从安装当前应用的手机获取,应用签名由开发者签名该应用的keystore文件决定

         应用包名在manifest文件里声明,要和正式发布应用的包名一致。

    C.WP8 应用

            WP8应用只需要填写“应用下载地址(选填)”就可以了。

    注意:应用若还没有提交到应用市场,下载地址等可以暂时为空,提交到应用市场后,可修改下载地址。

     

    注:

    1.审核将在三个工作日内完成,目前只审核开发者的资质和真实性,不涉及应用内容本部,不需要开发者提交ipa文件或将含微信SDK的版本在AppStore上线后再审核,但要求开发者提供该应用已经上线的版本的下载地址

    2.同一应用在不同平台的版本应共用一个AppID

    审核成功后的页面(Android)

    5、申请微信登陆功能

    成功创建应用并审核通过后,点击应用右方“查看”可以查看应用详情。

    在“接口信息”一栏中,查看当前应用拥有的接口权限。

    选中“微信登陆”接口,点击右方申请开通,开通微信登陆功能。

     

    三、注意事项

    1、开发者资质认证结果只有成功或失败两种情况。审核费用与最终是否审核通过无关。每申请一次,就需要支付一次审核服务费用

    2、我方在完成在线申请及资料提交流程,并完成审核服务费用支付后,腾讯会在15个工作日内展开认证工作,我方应积极配合腾讯及第三方审核公司的认证需求,并有权随时了解、查询认证进度

    3.认证失败原因可能情况:

    1)由于我方原因,经腾讯三次系统通知用户调整申请内容,我方仍未能满足开发者资质认证要求的;

    2)由于我方原因:自用户付费之日起三十日,我方仍未能满足开发者资质认证要求之一;

    3)因其他原因而不能认证成功的情形

    4、网站应用和移动应用一个开发者最多只能登记10个。

     

    四.主要提供材料

    主要提供材料,详情见“具体实现步骤

    1. 微信开放平台登陆邮箱
    2. 开发者个人详细信息
    3. 企业信息及法人(负责人)信息(包括官网等)
    4. 企业账号管理员信息(包括微信扫码)
    5. 企业章
    6. 应用官网及备案号/许可证。 应用图标。

     

    五、特殊情况处理方案

    1.若我方向腾讯或者第三方审核机构提供的资料和信息如有变更的,应当及时采取以下措施:

    1)如处于认证过程中的资料和信息发生变更,用户应立即通知腾讯或负责认证订单的第三方审核机构更新有关资料及信息;

    2)如认证成功后资料和信息发生变更,用户应及时申请补充订单变更有关资料及信息;

    3)如认证成功后腾讯发现资料和信息存在错误,用户应及时申请补充订单更正有关资料及信息。

    展开全文
  • 对于刚开始接触第三方平台开发的人员来说,微信开发平台的文档相对比较复杂,现阶段网上博客文章较为杂乱零散,无法提供有效的指导。 通过本达人课的学习,读者将熟悉第三方平台中的授权流程、Token管理、相关功能的...

    课程介绍

    微信开放平台之第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台,让其帮助完成业务开发,且是基于微信 CRM 的必要组成模块之一。

    对于刚开始接触第三方平台开发的人员来说,微信开发平台的文档相对比较复杂,现阶段网上博客文章较为杂乱零散,无法提供有效的指导。

    通过本达人课的学习,读者将熟悉第三方平台中的授权流程、Token 管理、相关功能的开发等以及通过全网发布的测试,最终上线。让您真正能够从0到1完成第三方平台的搭建。

    为此本达人课主要分为三大部分,逐步介绍环境搭建到正式全网发布:

    第一部分:准备阶段,让你了解第三方平台。主要包括平台的申请以及开发环境的搭建,为后面实战阶段做准备。

    第二部分:实战阶段,针对业务场景进行具体的开发。主要包括平台授权流程以及利用基于第三方平台进行开发,包括场景二维码、分组以及自定义回复等功能。

    第三部分:上线阶段。详细介绍如何满足微信端的测试进行上线发布。

    作者介绍

    李杨,高级研发工程师。OCP 与 PMP 资格认证,曾任某培训机构 Hadoop 讲师;擅长 Java 开发、数据库设计以及开发等。现就职于一家初创公司,有同名公众号“LeeYond”。

    课程内容

    导读:浅谈微信开放平台之第三方平台

    导读

    如果你针对微信公众号进行过开发,那么你肯定曾在微信公众号后台,配置过自己的域名服务器以及密钥等信息。之后,基于这个配置,对该公众号进行定制化开发,例如自动登录、个人中心、自定义二维码等,乃至当你针对第二个微信公众号进行开发时,可能仍需要进行重复的步骤,并配置不同的域名以及密钥等。于此同时,每次开发,你还要保存公众号的账号密码,并需要获取公众号所有者的授权,过程不安全且繁琐。

    随着要维护的公众号数量逐步增加,需要投入的资源以及成本也随之增加(不同公众号需要不同的域名以及服务器资源)。此时你可能需要一个平台,能够同时管理这些公众号。无论具体的业务是什么场景,基于微信的开发必然是基于微信底层提供的各种接口,根据不同业务形态展开。为此我们可以通过抽象出功能层以及业务层来解构每个微信公众号的开发,其中功能层即微信提供的基础功能(回复消息/微信菜单管理/分组管理等),业务层即不同的业务场景。那么功能层就变成了第三方平台,一次开发供 N 个公众号使用,提供标准化的接口服务来满足业务的基础需求,业务层基于第三方平台进行其他更深的业务拓展,例如搭建 CRM 系统。

    那么如何使用第三方平台呢?对于第三方平台来说,可以通过扫描二维码授权给平台,帮助 N 多个公众号代实现业务,不再需要理解繁琐参数设置,并且密码不提供给开发者,保证安全。根据微信官方介绍,第三方平台的开放,让公众号或小程序运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关能力。

    第三方平台其本质是对于微信公众号开发底层功能层的抽象,不同公众号通过其授权将自身业务嵌入平台当中。

    第三方平台

    业务特点

    从业务特征上来说,第三方平台特点必须如图所示:

    第三方平台业务特征

    从具体的业务场景上说,第三方平台包括以下场景:

    1. 提供行业解决方案,如针对电商行业的解决方案,或针对旅游行业的解决方案等;
    2. 对公众平台功能的优化,如专门优化图文消息视觉样式和排版的工具,或专门定制的 CRM 用户管理功能,或功能强大的客服系统。

    数据安全

    在技术上,第三方平台是通过获得公众号或小程序的接口授权,然后代公众平台帐号调用各业务接口来实现业务的,例如其可以代公众号调用接口、代公众号处理消息和事件、代公众号发起网页授权等(其实部分功能与公众号开发重合)。所以第三方平台本质是针对单个公众号开发的升级。因此,第三方平台在调用各接口时,同样必须遵循公众平台运营规范。

    理论上当用户将公众号授权给第三方平台之后,第三方平台从某种程度上已经接手公众号,可以利用公众号的 Token 进行各种操作,例如修改菜单、自定义回复、创建分组等等。

    由于公众号授权给第三方平台,用户与公众号进行交互的信息将会传送到第三方平台的服务器上。微信为了保证数据的安全性,进行了较为复杂的授权流程,如下图所示:

    image_1c9rsoma7m711opu1ts41tt9ap39.png-26.5kB

    在后面的课程中,我会针对该流程进行详细讲解、分析,以及如何通过代码实现完整的授权。

    同时要求用户与公众号交互的信息加密传输(单独的公众号开发的时候是可以选择明文传输),并且有一套相对较为负责的加解密流程进行数据传输。官方描述为:首先请注意,开发者在接收消息和事件时,都需要进行消息加解密(某些事件可能需要回复,回复时也需要先进行加密)。但是,通过 API 主动调用接口(包括调用客服消息接口发消息)时,不需要进行加密。

    权限集合

    微信为第三方公众平台提供的服务包括公众号以及小程序,其中前者提供了20多种、后者近10种不同的权限类型。由于不同行业具有不同的特征,所以这些权限集合是可以根据自己需求进行个性化选择的,例如客户系统,CRM 系统所需要的权限集合是不一样的。

    并且当第三方平台进行全网发布时,根据选择不同的权限集合会进行相关的测试,只有当平台通过测试之后,其他公众号才能授权给该平台,利用该平台代实现业务。

    所以综合来看第三方平台开发是一个相对复杂的工程,对于一个刚接触第三方平台开发的同学来说,想要快速上手是一个相对来说比较困难的事情。同时由于现阶段网络上关于第三方平台介绍的文章残次不齐,进行信息筛选将花费较多的时间成本。

    达人课目标

    第三方平台开发流程及问题

    第三方平台从申请到全网发布主要经历如下几个步骤:

    1. 授权流程
    2. 公众号相关接口开发
    3. 小程序相关接口开发(不在此次课程范围)
    4. 测试以及发布。

    对于步骤1来说,微信每10分钟会向服务器推送一个 Verfiy Ticket,平台需要利用该 Ticket 获取 Component Access Token,利用该 Token 结合用户授权码才可能完成整个授权过程。这里涉及到 Token 保存问题、Token 失效刷新问题、用户授权信息保存问题、用户授权的公众号 Token 刷新问题等。功能性的实现相对比较简单,但是作为系统来说,必须总体的设计才能稳定提供的服务。

    对于步骤2来说,微信针对公众号提供大约20+权限集合,每一种权限集合可能对应不同的应用场景,并且每种权限集合需要的参数以及接口都不相同。如何合理的设计我们的类,使我们相对优雅的进行开发,这都是我们需要考虑的问题

    对于步骤4来说,微信为了保障平台的稳定性,发布时需要进行测试,然而这是基于步骤1、2较好的完成的基础上,如何快速的通过测试,以及不同的测试报错如何快速定位,都是摆在我们面前的问题。

    达人课特点

    笔者当初开发时,进行相关信息检索发现文章质量较差,无法提供合理的指导,所以比较了解刚接触平台开发时可能遇到的具体问题。

    为此本达人课将从第三方平台申请开始到发布结束,系统的介绍每个步骤可能遇到的问题,以及提供相对合理的解决方案。同时针对关键的一些功能进行单独的讲解,例如:个性二维码、自定义分组以及自定义回复等。

    同时本达人课并不是单纯的讲接口的功能实现,而是结合具体的业务场景规划我们的数据库、相应类的设计以及具体的功能设计。并且会在课程中放上具体的步骤或者代码,有兴趣的同学可以按照具体的步骤进行开发,逐步搭建属于自己的平台。

    结束语

    本次开发主要使用的语言为 Java,采用 SSM(Spring+SpringMVC+Mybaits)框架,同时数据库表结构设计部分可能采用维度建模的思想。

    如果有什么问题或者在课程中想要着重了解的地方,可以在我的读者圈或者关注我同名公众号“LeeYond”(微信号:Mist_L)与我联系,此外有意向换工作的 Java 小伙伴,也可以与我联系。

    备注: 为了更好的学习本达人课,读者可能需要对 Java 有一定的了解,并对操作系统有一定的了解,熟悉 JDK 安装/Tomcat 安装以及相关环境变量配置等。为了更好的学习本课程,可能需要对 Maven 有一定的了解。

    其次由于后面可能会涉及到数据库表结构的设计,所以需要对数据库也要有一定的了解。由于第三方平台开发相对比较复杂,读者最好首先熟悉一下官方文档以及相关流程。

    第01课:准备阶段——开发环境准备以及第三方平台申请

    本文的重点主要介绍第三方平台开发环境的信息,现列出相关的配置信息。

    环境准备

    硬件环境

    • 开发环境:普通 PC 机器(我的配置是 I5/8G/256G SSD);
    • 生产环境:根据具体的业务场景配置硬件需求。

    软件环境

    (1)开发环境:

    • 操作系统:Windows、Linux、Mac OS 都可以进行开发;
    • 软件要求:JDK1.7+,Tomcat8.X,MariaDB10.X(其他数据库也可以,但本文讲解后开发都使用 MariaDB),IntelliJ IDEA,开发框架选用的 SSM(Spring+SpringMVC+Mybatis);
    • 其他要求:由于申请第三方平台需要域名,可能需要内网穿透工具,例如花生壳或者其他类似工具,Maven环境,需要将 JAVA_PATH 等添加到环境变量中

    (2)生产环境:

    • 操作系统:Linux(建议非必须)
    • 软件要求::JDK1.7+ ,Tomcat8.X, MariaDB10.X
    • 其他要求:服务器需要绑定域名(当然继续使用内网穿透工具也OK,但是1.专业性问题2.带宽问题),需要配置环境变量

    (3)部分软件下载地址:

    申请平台

    申请平台之前必须有一个正在运行的 Web 环境,否则无法通过后面的申请,为此我们需要先创建一个项目之后才能进行申请。

    创建项目

    (1)主要利用 Maven 创建开发项目,以 IntelliJ IDEA 为例,大致过程是选择 “File” -> “New” -> “Project” -> “Maven” -> “Create From archetype”。

    选择 webapp 之后点击 “Next”:

    image_1c9rogkoa94074fqbs12cg1nqim.png-400.2kB

    根据具体情况填写相关信息之后点击“Next”:

    image_1c9rolua3mt3ck71e9n1svlil813.png-26.6kB

    为了加快项目创建,我一般会配置 archetypeCatalog 如下图所示:

    image_1c9rp1mlq1m035rahnq1oes13jr20.png-113.3kB

    保存之后点击“Next”配置项目保存路径:

    image_1c9rp43tm1qpsc1b16n5u1me82d.png-29.2kB

    点击“Finish”完成创建。

    (2)配置 Spring+SpringMVC+Mybatis 环境。网上有太多的文章,大家可以直接搜索,进行配置。

    (3)设置域名(如果有域名的话,可以跳过)。利用内网穿透工具绑定二级域名,并且启动服务。

    (4)启动 Tomcat。此部分大家可以上网查相关资料,在此略过。

    申请平台

    1.点击微信开发平台信息填写页面,注册账号。

    2.开发者资质认证。

    登录之后到 “账号中心” -> “开发者资质认证”,其中该资质认证必须是企业,不能是个人,并且还要300元,审核还是很快的,似乎一天不到。

    3.申请平台。

    申请主要分为四步,包括输入基本信息、选择权限、填写开发资料、等待审核,进入“管理中心”-> “第三方平台” -> “创建第三方平台”进入申请页面。

    (1)输入基本信息

    根据实际情况填写输入基本信息并上传 ICON,点击“下一步”:

    image_1c9rq2fge1esdq7p1ao41to6fge2q.png-235kB

    (2)选择权限

    本课程主要针对公众号,在公众号下面选择权限集合如下图所示:

    image_1c9rq6unr1tk4qttf8811oj14r1m.png-172.5kB

    其中“开放平台账户管理”是实现基于微信 CRM 中的必须选择的选项(当然选择的每一个都很重要)。

    (3)填写开发资料(重要)

    1)授权流程相关。

    image_1c9rqbto21oi8d1v1qqi1ng87kr13.png-63.8kB

    • 授权发起域名:就是你本机的域名,前面不需要加 http,例如 “http://www.baidu.com”,请填写 “www.baidu.com”。
    • 授权测试公众号列表:由于还没全网发布,所以需要添加你需要用来测试开发公众号的原始 id。
    • 授权事件接收 URL:以上面创建 project 为例,“www.baidu.com/gitchat/component/event” 其中粗体根据实际情况填写,申请过程中不会验证该 URL 有效性。这个 URL 主要接收微信的一些参数,相当重要。

    2)授权后实现业务。

    image_1c9rqqbls7ck1757i2i1s621mde13.png-114.9kB

    • 消息校验 Token:密钥,根据自己喜好按照要求填写;
    • 消息加解密 Key:长度43的字符串,随意发挥;
    • 消息与事件接收 URL:此 URL 是每个公众号授权之后发消息到你服务器上的 URL,以截图为例,A、B 公众号授权之后,A 的消息会发送到 “www.baidu.com/gitchat/wechat/A/callback”,B 的消息会发送到 “www.baidu.com/gitchat/wechat/B/callback”,其中 “/gitchat/wechat/\$APPID\$/callback” 根据实际情况填写,但是主要域名必须授权流程中授权发起页域名一致。
    • 公众号开发域名:与授权流程中授权发起页域名一致。并且需要下载 txt 文件,并保存到 Tomcat 下面的 webapps/ROOT。不需要重启服务。

    3)其他。

    根据实际情况填写你的本机 IP,不然后期无法刷新相关 Token。

    image_1c9rr9bp01c7m187dqni14lgh8b1g.png-19.3kB

    点击提交,等待审核。

    (4)等待审核

    基本上,这个审核还是很快的,1-2天基本上都能审核完成。

    当审核通过之后,点击详情查看平台的 AppID 以及 AppSecret(妥善保存),后面需要根据这两个 ID 进行平台 Token 的刷新等。

    附录: 由于后面加解密可能会出现异常:“java.security.InvalidKeyException:illegal Key Size”,请在官方网站下载 JCE 无限制权限策略文件(JDK7 的下载地址,JDK8 也可以用该文件)。

    下载后解压,可以看到 localpolicy.jar 和 USexport_policy.jar 以及 readme.txt,如果安装了 JRE,将两个 Jar 文件放到 %JRE_HOME%\lib\security 目录下覆盖原来的文件;如果安装了JDK,将两个 Jar 文件放到 %JDK_HOME%\jre\lib\security 目录下覆盖原来文件。

    第02课:实战阶段——公众号授权流程解析
    第03课:实战阶段——平台以及用户 Token 存取方案设计及开发
    第04课:实战阶段——场景二维码开发
    第05课:实战阶段——分组功能开发
    第06课:实战阶段——自定义回复功能开发
    第07课:上线阶段——全网发布以及上线

    阅读全文: http://gitbook.cn/gitchat/column/5acf5c1ff8164454a349ed6f

    展开全文
  • Thinkphp版的微信公众号第三方代授权
  • 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平台开发第三方授权登陆(四):微信...

     

    微信开放平台开发系列文章:

    微信开放平台开发第三方授权登陆(一):开发前期准备

    微信开放平台开发第三方授权登陆(二):PC网页端

    微信开放平台开发第三方授权登陆(三):Android客户端

    微信开放平台开发第三方授权登陆(四):微信公众号

    微信开放平台开发第三方授权登陆(五):微信小程序

     

     

    目录

    一、需求

    二、开发流程

    三、具体实现步骤

    1.引导用户跳转到微信授权网页

    2. 通过code换取网页授权access_token

    3.根据token获取用户信息

    四、参数位置:


    一、需求

    根据需求,需要拥有第三方微信登录功能,并获取到用户信息。

    二、开发流程

    微信公众平台第三方授权登录的应用场景在于 : 在微信客户端(PC或APP)访问第三方网页,公众号可以通过网页授权机制,获取用户基本信息,实现业务逻辑。

    1用户同意授权,获取code

    2通过code换取网页授权access_token

    3通过access_token拉取用户信息(需scope为 snsapi_userinfo)

    公众号第三方授权获取用户信息基本流程

    三、具体实现步骤

    1.引导用户跳转到微信授权网页

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    参数

    说明

    appid

    公众号的唯一标识

    redirect_uri

    授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理

    response_type

    返回类型,请填写code

    scope

    应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )

    state

    重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

    #wechat_redirect

    无论直接打开还是做页面302重定向时候,必须带此参数

    如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。

    注意:code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期

     @RequestMapping("/login")
        public String wechatLogin(HttpServletRequest httpServletRequest) {
    
            // 应用授权作用域:
            // 当为snsapi_base时,不弹出授权页面,直接跳转,只能获取用户openid。
            // 当为snsapi_userinfo时,弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息
            String scope = "snsapi_userinfo";
    
            String state = UUID.randomUUID().toString().replaceAll("-","");
    
            // 采用redis等进行缓存state 使用sessionId为key 30分钟后过期,可配置
            RedisPoolUtil.setEx("wechat-mp-state-"+httpServletRequest.getSession().getId(), state, Integer.parseInt(env.getProperty("wechat.mp.exTime", "1800")));
    
            log.info("state= "+state);
    
            // 微信公众平台
            String get_auth_url = "https://open.weixin.qq.com/connect/oauth2/authorize?"
                    + "appid="
                    + env.getProperty("wechat.mp.appid")
                    + "&redirect_uri="
                    + env.getProperty("application.url")
                    + env.getProperty("wechat.mp.redirect_uri")
                    + "&response_type=code"
                    + "&scope="
                    + scope
                    + "&state="
                    + state
                    + "#wechat_redirect";
    
            log.info("URL:"+get_auth_url);
    
            return "redirect:" + get_auth_url;
        }

    2. 通过code换取网页授权access_token

    用户同意授权后,通过code换取网页授权access_token

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    参数

    说明

    appid

    公众号的唯一标识

    secret

    公众号的appsecret

    code

    填写第一步获取的code参数

    grant_type

    填写为authorization_code

    请求正确返回的结果样例:

    { "access_token":"ACCESS_TOKEN", //网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

    "expires_in":7200,  // access_token接口调用凭证超时时间,单位(秒)

    "refresh_token":"REFRESH_TOKEN", //用户刷新access_token

    "openid":"OPENID",  //用户唯一标识

    "scope":"SCOPE" }   //用户授权的作用域,使用逗号(,)分隔

    错误返回样例:

    {"errcode":40029,"errmsg":"invalid code"}


     

    @RequestMapping("/getInfo")
        public String getInfo(HttpServletRequest httpServletRequest, Model model) {
    
            String code = httpServletRequest.getParameter("code");
            String state = httpServletRequest.getParameter("state");
    
            String value = RedisPoolUtil.get("wechat-mp-state-"+httpServletRequest.getSession().getId());
    
            log.info("Code = " + code+"  . State="+state+"    value="+value);
    
            /* 如果state值不匹配,则为非法请求,抛出异常 */
            if (StringUtils.isEmpty(code)||StringUtils.isEmpty(state)||value==null || !state.equals(value)){
                throw new RuntimeException("非法请求");
            }
    
            // 通过code换取网页授权access_token
            String get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
                    "appid=" +
                    env.getProperty("wechat.mp.appid") +
                    "&secret=" +
                    env.getProperty("wechat.mp.secret") +
                    "&code=" +
                    code +
                    "&grant_type=authorization_code";
    
            log.info(get_access_token_url);
    
    
            JSONObject accessTokenJsonObject = HttpClientUtils.httpGet(get_access_token_url);
    
            checkResult(accessTokenJsonObject);
            // 成功获取
            String access_token = (String) accessTokenJsonObject.get("access_token");
            Integer expires_in = (Integer) accessTokenJsonObject.get("expires_in");//access_token接口调用凭证超时时间,单位(秒)
            String userOpenid = (String) accessTokenJsonObject.get("openid");//用户唯一标识
            String scope = (String) accessTokenJsonObject.get("scope");//用户授权的作用域,使用逗号(,)分隔
    
            // TODO:文档没有写返回unionid,需要在实际公众号中进行测试(绑定开放平台的会有),如果没有unionid,则用openid存储用户,虽然这并不是合理的做法。因为openid仅仅该公众号下的用户唯一标识。。。
    
    //        access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,
    //        refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权
    
            WeChatUserInfo weChatUserInfo = null;
    
            weChatUserInfo = null; //FIXME: 根据unionid从数据库中查询
            if (weChatUserInfo == null){
                weChatUserInfo = getMPWeChatUserInfo(access_token,userOpenid);
                // insert into database
    
            }
    
            if (weChatUserInfo.getUnionid()!=null){
                // 当前是绑定开放平台的公众号.Union将成为唯一标识
    
            }
    
            model.addAttribute(weChatUserInfo);
            return "wechatUser";
        }

    3.根据token获取用户信息

    http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

    参数

    描述

    access_token

    网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

    openid

    用户的唯一标识

    lang

    返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

    正确时返回的JSON数据包如下:

    {

    "openid":" OPENID",
    " nickname": NICKNAME,
    "sex":"1",
    "province":"PROVINCE"
    "city":"CITY",
    "country":"COUNTRY",
    "headimgurl":    "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
    "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
    }

    private WeChatUserInfo getMPWeChatUserInfo(String accessToken, String openId){
    
            String get_userInfo_url = "https://api.weixin.qq.com/sns/userinfo?" +
                    "access_token=" +
                    accessToken +
                    "&openid=" +
                    openId +
                    "&lang=zh_CN";
    
            JSONObject userInfoJsonObject = HttpClientUtils.httpGet(get_userInfo_url);
    
            checkResult(userInfoJsonObject);
    
            String user_openid = (String) userInfoJsonObject.get("openid");
            String user_nickname = (String) userInfoJsonObject.get("nickname");
            Integer user_sex = (Integer) userInfoJsonObject.get("sex");//用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
            String user_province = (String) userInfoJsonObject.get("province");
            String user_city = (String) userInfoJsonObject.get("city");
            String user_country = (String) userInfoJsonObject.get("country");//国家,如中国为CN,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
            String user_headimgurl = (String) userInfoJsonObject.get("headimgurl");//头像
            List user_privilege = (List) userInfoJsonObject.get("privilege");//用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
            String user_unionid = (String) userInfoJsonObject.get("unionid");
    
    
            WeChatUserInfo weChatUserInfo = new WeChatUserInfo();
            weChatUserInfo.setOpenid(user_openid);
            weChatUserInfo.setNickname(user_nickname);
            weChatUserInfo.setSex(user_sex);
            weChatUserInfo.setProvince(user_province);
            weChatUserInfo.setCity(user_city);
            weChatUserInfo.setCountry(user_country);
            weChatUserInfo.setHeadimgurl(user_headimgurl);
            weChatUserInfo.setPrivilege(StringTools.listToString(user_privilege));
            weChatUserInfo.setUnionid(user_unionid);
    
            log.info("用户信息如下:" +
                    "   opeinId:" + user_openid +
                    "   用户昵称:" + user_nickname +
                    "   用户的性别:" + user_sex +
                    "   省份:" + user_province +
                    "   城市:" + user_city +
                    "   国家:" + user_country +
                    "   头像:" + user_headimgurl +
                    "   用户特权信息:" + user_privilege +
                    "   UnionId:" + user_unionid
            );
    
            return weChatUserInfo;
        }
    

    四、参数位置:

    开放平台绑定公众号:

    展开全文
  • 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平台开发第三方授权登陆(四):微信...

     微信开放平台开发系列文章:

    微信开放平台开发第三方授权登陆(一):开发前期准备

    微信开放平台开发第三方授权登陆(二):PC网页端

    微信开放平台开发第三方授权登陆(三):Android客户端

    微信开放平台开发第三方授权登陆(四):微信公众号

    微信开放平台开发第三方授权登陆(五):微信小程序

     

    目录

    一、需求

    二、开发流程

    三、开发使用的技术及工具

    1.前端(小程序)

    1)自定义的全局变量

    2)index加载时进行登录

    3)授权页面authorization.wxml

    4)用户信息发送给后端

    5)用户详情页mine.wxml

    2.服务端(Java)

    1).配置文件新增小程序相关配置

    2)获取openid以及Sessionkey

    3).获取用户信息:


     

    开发小程序需要在公众平台注册一个小程序账号,然后获取到小程序的AppID和AppSecret。就可以进行第三方登陆授权开发。

    一、需求

    拥有第三方微信登录功能,并获取到用户信息。

    二、开发流程

    小程序:

    1. 微信小程序通过wx.login API进行登录获取code。由于AppID和AppSecret不能泄露给用户,根据code获取openid需要在服务端完成,所以需要将code发送给服务端

    (服务端),并且带上授权临时票据code参数;

    2. 服务端通过code和appid、APPSecret获取到openid和SessionKey。服务端需要返回自定义登录态给前端,不能返回SessionKey

    3. 前端保存自定义登录态,获取用户信息时携带自定义登录态给后端。

    获取Token的流程

    三、开发使用的技术及工具

    1、.后端采用IDEA2017 进行开发

    2、前端使用微信开发者工具V1.02进行开发

    3、使用fastJson对json数据进行处理

    四、具体实现步骤

    1.前端(小程序)

    目录结构如下:

    1)自定义的全局变量

    globalData: {
    
        userInfo: null,
    
        sessionkey:null
    
      }

    自定义userInfo用于存储用户信息

    sessionKey用于存储服务端发回给客户端的sessionkey

    2)index加载时进行登录

    用户登录后,服务端会返回一个sessionkey给客户端保存,如果为空,说明没有登录过,需要调用wx.login进行登录。

    调用wx.login后,微信会返回一个code给小程序,小程序需要通过这个code发送给自身的服务端来获取sessionkey和openid信息。

    onLoad: function() {
    
        var serverUrl = app.serverUrl;
    
        // 加载时,检查当前用户信息是否登录
    
        if (app.globalData.sessionkey != null) { // 已经登录了
    
          // 是否授权
    
          wx.getSetting({
    
            success: function(res) {
    
              if (res.authSetting['scope.userInfo']) {
    
                // 已经授权,可以直接调用 getUserInfo 获取头像昵称
    
                wx.getUserInfo({
    
                  success: function(res) {
    
                    app.globalData.userInfo = JSON.parse(res.rawData);
    
                  }
    
                })
    
              } else {
    
                // 还没有授权,则需要授权
    
                wx.redirectTo({
    
                  url: '../authorization/authorization'
    
                })
    
              }
    
            }
    
          })
    
        } else { // 还没有登录
    
          // 提示用户登录授权
    
          wx.login({
    
            success: res => {
    
              // 发送 res.code 到后台换取 openId, sessionKey, unionId
    
              if (res.code) {
    
                // 发送请求,服务端能获取到openid和unionid,之前登录过则可以获取到之前的用户信息。
    
                wx.request({
    
                  url: serverUrl + '/miniprogram/login/' + res.code, //请求路径
    
                  method: "GET",
    
                  success: function(res) {
    
                    app.globalData.sessionkey = res.data;
    
                    // 进入授权
    
                    wx.redirectTo({
    
                      url: '../authorization/authorization'
    
                    })
    
                  }
    
                })
    
              }
    
            }
    
          })
    
        }
    
    },

    登录成功后,重定向到授权页面

    3)授权页面authorization.wxml

    <view class='tag-title'>
    
      <image mode="widthFix" style=' width: 200rpx;height: 200rpx;margin-top:150rpx' src="/images/logo.jpg"></image>
    
    </view>
    
    <view wx:if="{{canIUse}}">
    
      <view style='text-align:center;margin-top:50rpx'>
    
        允许微信授权后,可体验更多功能</view>
    
      <view>
    
        <button open-type='getUserInfo' bindgetuserinfo="bindGetUserInfo" >授权登录</button>
    
        <button bindtap='navigateBack'>返回首页</button>
    
      </view>
    
    </view>
    
    <view wx:else style='text-align:center;margin-top:50rpx'>
    
      您的微信版本过低,请升级后再次体验</view>

    Button的open-type为getUserInfo时,点击后会调用bindgetuserinfo属性配置的函数,同时带上用户基本信息(不包括Openid等)

    4)用户信息发送给后端

    // 授权登录按钮
    
      bindGetUserInfo: function(e) {
    
        let that = this;
    
        var serverUrl = app.serverUrl;
    
        console.log(e.detail.userInfo)
    
        if (e.detail.userInfo) {  // 成功获取到信息
    
          app.globalData.userInfo = e.detail.userInfo
    
          // 这里可以将用户信息发送给后台
    
          // 获取到sessionkey
    
          if (app.globalData.sessionkey!=null){
    
            wx.request({
    
              url: serverUrl + '/miniprogram/userinfo', //请求路径,
    
              method: "GET",
    
              data: {
    
                // openid: this.openid,
    
                // unionid: this.unionid,
    
                key: app.globalData.sessionkey,
    
                nickname: app.globalData.userInfo.nickName, //获取昵称
    
                gender: app.globalData.userInfo.gender, //获取性别
    
                province: app.globalData.userInfo.province, //获取省份
    
                city: app.globalData.userInfo.city, //获取城市
    
                country: app.globalData.userInfo.country, //获取国家
    
                avatarUrl: app.globalData.userInfo.avatarUrl, //这些是用户的基本信息
    
                language: app.globalData.userInfo.language
    
              },
    
              success: function (res) {
    
                if (res.data.code == 0) {  // 请求成功
    
                  debugger
    
                  app.globalData.userInfo = res.data.data; // 以数据库中返回的数据为准
    
                  // 获取用户信息成功
    
                  wx.switchTab({
    
                    url: '../mine/mine'
    
                  })
    
                }
    
              }
    
            })
    
          }else{
    
            this.showZanTopTips('错误:SessionKey为null');
    
          }
    
    
    
        } else {
    
          this.showZanTopTips('您拒绝了微信授权');
    
        }
    
      },
    
    
    
    }));

    获取用户信息成功后,页面跳转到mine中显示用户详情信息

    5)用户详情页mine.wxml

    <view class="container more">
    
      <view class="userinfo">
    
        <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
    
        <text class="userinfo-nickname">{{userInfo.nickName}}</text>
    
              <text class="userinfo-nickname">性别:{{userInfo.gender === 1 ? '男':'女'}}</text>
    
              <text class="userinfo-nickname">城市:{{userInfo.city}}</text>
    
              <text class="userinfo-nickname">省份:{{userInfo.province}}</text>
    
              <text class="userinfo-nickname">国家:{{userInfo.country}}</text>
    
              <text class="userinfo-nickname">使用语言:{{userInfo.language}}</text>
    
      </view>
    
    </view>

    2.服务端(Java)

    服务端需要做的是:接受小程序前端发送的请求,根据发送过来的code,以及服务端保存的AppId和APPSecret等向微信服务端发送请求,获取到sessionkey和openid,然后将二者关联起来保存到session存储器中(Redis),返回给前端key值。

    接受小程序发送过来的key和用户基本信息,根据key从redis中获取openid,然后对数据库进行查询,若存在数据则封装后返回给前端,若无信息则向数据库中插入数据并返回给前端。

    1).配置文件新增小程序相关配置

    wechat.miniprogram.appid =

    wechat.miniprogram.appsecret =

    2)获取openid以及Sessionkey

    @ResponseBody
    
        @RequestMapping("/login/{code}")
    
        public String login(@PathVariable("code") String code) {
    
            String url = "https://api.weixin.qq.com/sns/jscode2session?" +
    
                    "appid=" +
    
                    env.getProperty("wechat.miniprogram.appid") +
    
                    "&secret=" +
    
                    env.getProperty("wechat.miniprogram.appsecret") +
    
                    "&js_code=" +
    
                    code +
    
                    "&grant_type=authorization_code";
    
            JSONObject object = HttpClientUtils.httpGet(url);
    
            // 请求,获取openid或unionid
    
            // 从数据库中查询是否存储
    
            // 成功获取
    
            String unionid = (String) object.get("unionid");
    
            String openid = (String) object.get("openid");//用户唯一标识
    
            // 会话密钥session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
    
            String session_key = (String) object.get("session_key");
    
            String key = "wechatminiprogramkey-" + UUID.randomUUID().toString().replaceAll("-", "");
    
            RedisPoolUtil.setEx(key, openid + "---" + session_key, 9600);
    
            return key;
    
    }

    3).获取用户信息:

    小程序能够获取用户基本信息,但是不包括openid等信息,仅有基本的昵称等信息,需要通过后端传输的key作为标识发送到前端,然后找到对应的openid来获取。

    @ResponseBody
    
    @RequestMapping(value = "/userinfo", method = RequestMethod.GET) // 获取用户信息
    
    public Result getOpenId(String key, MiniProgramBaseUserInfo miniProgramBaseUserInfo) {
    
            MiniProgramBaseUserInfo result = null;
    
            String value = RedisPoolUtil.get(key);
    
            if (value != null) {
    
                String values[] = value.split("---");
    
                String openid = values[0];
    
                // 从数据库中查询是否存储(根据openid查询)
    
                result = null; // TODO: 这里是查数据库操作
    
                if (result == null){ // 数据库中没有数据
    
                    // TODO: 向数据库中执行插入操作
    
                    // insert  weChatUserInfo
    
                    result = miniProgramBaseUserInfo;
    
                }
    
                return Result.success(result);
    
            return Result.error(SESSION_KEY_OVER_TIME); // SessionKey失效
    
        }
    
    

     

    展开全文
  • 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三):Android客户端 微信开放平台开发第三方授权登陆(四):微信...
  • 2.开放平台接入第三方应用,可以脱离公众号开发,扩展第三方应用 填写基本信息 勾选赋予权限 开发配置,关联的公众号取上面添加的公众号原始ID   3.授予开放平台账号权限 授权接入文档:...
  • 关于企业微信跳转第三方APP接口在官方文档里面已经是不存在了的,已经算是过时的js接口了。 企业微信官方JS-SDK 此接口为直接唤起APP非跳转到下载页面(目前只测试企业微信私有化版本有效) 调用到的js接口:...
  • 个人感觉微信第三方平台开发者这块的开发文档写的很不友好,很隐晦,我在开发的过程总结的一些东西,写出来给大家分享一下。恩,就这样吧。一、注册第三方平台账号 打开...
  • 微信网页第三方登录原理 标签: 微信开放平台和公众平台的区别 1.公众平台面向的时普通的用户,比如自媒体和媒体,企业官方微信公众账号运营人员使用,当然你所在的团队或者公司有实力去开发一些内容...
  • 微信公众号第三方平台的开放,让公众号运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关的处理能力,方便快捷,那如何才能开发出一个公众号第三方平台供一键授权呢?本文以JAVA作为后台...
  • 创建第三方平台这里解释一下第三方平台是干嘛用的。首先,我们在公众号的所有的消息,都是发完微信的服务器的,相当于用的微信的对话框,和微信服务器交互。相当于A&lt;—&gt;B这样的方式,现在我们的第三.....
  • 微信现在火,火的如火如荼,给我们这些第三方的开发者带来了不少机会,相信现在有不少人在基于微信的公众平台在做二次开发,接下来会一系列的文章来介绍微信的另一种开发模式- 基于微信开发平台的公众号第三方平台...
  • 微信打开第三方app

    2016-01-22 14:22:53
    1. 第三方app必须在应用宝发布,且开通‘微下载’服务 2.把微下载的链接地址分享到微信朋友圈,或者微信好友 3.点击该链接,跳转到应用宝下载页面,如果手机客户端没有安装该app,可以在页面点击下载按钮下载;如...
  • 首先说明一下,此处登录时微信开放平台的第三方登录,和微信公众平台不一样,两个平台貌似是两拨人开发的,虽然双方最后的用户唯一标识都是openId,但是是不互通的。如果开发平台想和公众平台相互通,两个平台得互相...
  • 开发过程中,处于测试阶段(未全网发布),需要在微信第三方平台中设置授权测试公众号列表,填写公众号(或者说小程序)的原始ID。否则,在测试授权的过程中,会提示: 一个微信号可以绑定多个小程序,作为多个...
  • 最近在做微信第三方的业务,把最近做的微信开发相关陆续做一个总结。 第三方平台的申请和上线: 根据微信官方文档开放平台描述,首先需要注册一个开发者账号,按照微信开发文档流程申请审核成功后获取AppID和...
  • 最近公司要做微信的第三方登录,本来打算直接用第三方的框架就算了,就闲的想自己集成试试看。 然后发现被腾讯坑得不省人事。 前提,应用必须要在微信开发平台上注册,并且通过审核,有微信登录的权限。 首先...
  • 第三方平台代微信公众号开发流程 一:准备工作 ㈠ 微信开放平台相关 申请微信开放平台账号后,需前往微信开放平台,创建第三方平台,填写开发相关配置: 填写授权流程相关配置: 注意事项: ⑴ 授权...
1 2 3 4 5 ... 20
收藏数 26,759
精华内容 10,703