zoukankan      html  css  js  c++  java
  • 微信三方平台接入

      首先此文需要对照着官网的文档看,因为没有一yi一yi说明调哪个服务,传参,和返回参数是啥,只是写了有哪些步骤和每一步注意的东西!!!

    一、创建三方平台

    1、授权流程相关

     

      授权测试公众号列表需要填写的内容是:你的公众号后台管理界面-公众号设置-账号详情-注册信息里面的原始id

    2授权后实现业务

    3其他

     

     

      比较简单的方法就是先不填 然后做测试的时候会提示你xxx.xxx.xxx.xxx不在白名单然后填一下就行了。

     

    二、开发

    1、授权流程

    步骤 1:第三方平台方获取预授权码(pre_auth_code

    1)* 获取票据

      验证票据(component_verify_ticket),在第三方平台创建审核通过后,微信服务器会向其 ”授权事件接收URL” 每隔 10 分钟以 POST 的方式推送 component_verify_ticket

    接收 POST 请求后,只需直接返回字符串 success。这个接口地址就是前面在创建三方平台时候填写的授权事件接收url:

    /**
         * 授权事件接收url
         */
        @ApiOperation(value = "授权事件接收url")
        @PostMapping("/authEvent")
        public String getComponentVerifyTicket(@RequestParam("timestamp") String timestamp,
                                               @RequestParam("nonce") String nonce,
                                               @RequestParam("msg_signature") String msgSignature,
                                               @RequestBody String postData) throws Exception {
            if (msgSignature != null) {
                if (!redisTemplate.hasKey("component_verify_ticket")) {
                    log.info(timestamp);
                    log.info(nonce);
                    log.info(msgSignature);
                    log.info(postData);
                    WXBizMsgCrypt pc = new WXBizMsgCrypt(CHECK_TOKEN, ENCODING_AES_KEY, APP_ID);
                    String xml = pc.decryptMsg(msgSignature, timestamp, nonce, postData);
                    Map<String, String> result = WXXmlToMapUtil.xmlToMap(xml);// 将xml转为map
                    String componentVerifyTicket = MapUtils.getString(result, "ComponentVerifyTicket");
                    if (StringUtils.isNotEmpty(componentVerifyTicket)) {
                        //存储平台授权票据,保存ticket
                        redisTemplate.opsForValue().set("component_verify_ticket", componentVerifyTicket, 110, TimeUnit.MINUTES);
                        String verifyTicket = redisTemplate.opsForValue().get("component_verify_ticket").toString();
                        log.info(verifyTicket);
                    }
                }
            }
            return "success";
        }

      里面用到的工具类 是一个腾讯提供的demo里面的:示例下载 。

    注意:XMLParse 类的 extract 方法这部分要改一下因为传过来的xml里面可能会没有ToUserName官网的示例好像是个老版本的,现在这字段叫AppId了 腾讯真坑~

    2)获取令牌

      令牌(component_access_token)是第三方平台接口的调用凭据。令牌的获取是有限制的,每个令牌的有效期为 2 小时,请自行做好令牌的管理,在令牌快过期时(比如1小时50分),重新调用接口获取。

    3)获取授权码

      预授权码(pre_auth_code)是第三方平台方实现授权托管的必备信息,每个预授权码有效期为 10 分钟。需要先获取令牌才能调用

    *步骤2引入用户进入授权页

    方式一:授权注册页面扫码授权pc

      从授权发起页域名下的一个页面发送请求到后端接口。后端接口发送请求:https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx到微信服务器。

    其中redirect_uri为设置好的扫码后回调地址,微信服务器会在回调时在回调地址后面以?auth_code=xxx&expires_in=600的形式拼接公众号授权码。

    String redirect_uri = "http://testwebb.xxx.xxxxx.cn/xxxx/xxx";

    注意几点:

    1. 在填写授权发起页域名的时候前面是不加http://https://的,在代码里面要加上。
    2. /#/格式的uri不行。因为/#/后面接的是路由地址,微信服务器会把?Auth_code......拼接在/#/前。
    3. uri要进行encode.

    方式二:点击移动端链接快速授权 (mobile)

      三方平台方可以生成授权链接,将链接通过移动端直接发给授权管理员,管理员确认后即授权成功。未研究等需要时候再说。

    步骤3使用授权码(auto_code)获取授权信息

      当用户在第三方平台授权页中完成授权流程后,第三方平台开发者可以在回调 URI 中通过 URL 参数获取授权码。使用以下接口可以换取公众号/小程序的授权信息。建议保存授权信息中的刷新令牌(authorizer_refresh_token。这个接口会返回两个重要的东西:一个是authorizer_access_token接口调用令牌),一个是authorizer_refresh_token刷新令牌(在授权的公众号具备API权限时,才有此返回值),刷新令牌主要用于第三方平台获取和刷新已授权用户的 authorizer_access_token。一旦 authorizer_refresh_token 丢失,只能让用户重新授权,才能再次拿到新的刷新令牌。用户重新授权后,之前的刷新令牌会失效)。authorizer_access_token 过期了就用:获取/刷新接口调用令牌 去刷新获得,不赘述了。

    步骤4:使用authorizer_access_token调用第三方接口

      公众号调接口用到的access_token替换成authorizer_access_token然后正常调用接口就行了。

  • 相关阅读:
    【面试题总结】第三篇
    Django 多账号登录
    Zabbix3.2 监控搭建
    2017.09.24校内训练
    2017.09.06校内训练
    tyvj P1001 第K极值
    洛谷P1020导弹拦截
    洛谷P1006传纸条
    2017.09.10校内训练
    hdu_1086 You can Solve a Geometry Problem too
  • 原文地址:https://www.cnblogs.com/xcgShare/p/12752559.html
Copyright © 2011-2022 走看看