微信第三方平台集成

这一段时间集成了微信第三方平台,坑还是蛮多的,记录一下集成过程和遇到的坑

授权流程

这里写图片描述
首先说一下过程,这个过程再微信开放平台上有。开放平台链接戳这
授权给第三方平台首先要获取预授权码,然后用预授权码引导用户授权,最后成功授权返回授权码。
这地方分三部分:
第一部分,如何获取预授权码。
第二部分,通过预授权码引导用户授权。
第三部分,返回授权码获取公众号信息。

一、如何获取预授权码

1、在第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL”每隔10分钟定时推送component_verify_ticket。第三方平台方在收到ticket推送后也需进行解密(详细请见【消息加解密接入指引】),接收到后必须直接返回字符串success。

首先需要了解一个加解密,微信平台会有一个官方demo。接下来就是我遇到的第一个坑了。传过来的xml解析失败。
官网上解析的结果是这样的:
这里写图片描述
想要解析,你得获取微信服务器传过来的xml(传来的timestamp,nonce,encrypt_type,msg_signature可以直接用request.getParameter获取,但是xml需要读取request的body部分)。然后按照demo上那样解析。下面是我的方法:

/**
     * 微信第三方解码
     * @param msgMap
     * @param token
     * @param encodingAesKey
     * @param appId
     * @param timestamp
     * @param nonce
     * @return
     */
    public static String DecryptMsg(Map<String,Object> msgMap, String token, String encodingAesKey, String appId, String timestamp, String nonce){
        String result = null;
        try{
            WXBizMsgCrypt pc = new WXBizMsgCrypt(token, encodingAesKey, appId);
            String msgSignature = (String)msgMap.get("msg_signature");
            String encrypt = (String)msgMap.get("encrypt_type");
            String postXml = (String)msgMap.get("post_xml");
            String format = postXml;
            String fromXML = String.format(format, encrypt);
            result = pc.decryptMsg(msgSignature, timestamp, nonce, fromXML);
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }

接收到的xml:

<xml>
    <AppId><![CDATA[xxxxxxxxxxxxxx]]></AppId>
    <Encrypt><![CDATA[xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]]></Encrypt>
</xml>

解析出来之后:

<xml><AppId><![CDATA[xxxxxxxxxxxxxx]]></AppId>
<CreateTime>1537153589</CreateTime>
<InfoType><![CDATA[component_verify_ticket]]></InfoType>
<ComponentVerifyTicket><![CDATA[xxxxxxxxxxxxxxxxxxxxxxxxxxx]]></ComponentVerifyTicket>
</xml>

然后一直报一个空指针的错误,我发现下面的代码解析失败,因为XMLParse那个类找不到ToUserName的标签。
这里写图片描述
这里写图片描述

就没有<ToUserName>这个页签,所以最后我改成了<AppId>

2、第三方平台component_access_token是第三方平台的下文中接口的调用凭据,也叫做令牌(component_access_token)。每个令牌是存在有效期(2小时)的,且令牌的调用不是无限制的,请第三方平台做好令牌的管理,在令牌快过期时(比如1小时50分)再进行刷新。

这里没啥说的,就是需要做的就是维护好令牌(持久化,启动加载等)。到这就可以获取到预授权码(pre_auth_code)。

二、引导用户授权

这里写图片描述
走到这,你会忽然发现,你跳转的页面完全不能授权,一直提示你的域名不对。因为这就是我遇见的第二个坑。
这边的操作应该是这样的:你需要写一个页面来授权,让用户去点击那个授权按钮,按钮的链接就是你拼接的那个url,废话不多说,代码伺候:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<div>
    <input id="tolink" type="button" name="" value="授权跳转" /></div>
<script>
    var btn=document.getElementById("tolink");
    btn.onclick=function(){
        var ajax = new XMLHttpRequest();
        ajax.open('get','http://abcd.com/authorizedurl');
        ajax.send();
        ajax.onreadystatechange = function () {
            if (ajax.status==200) {
                window.location.href=ajax.responseText
            }
        }
    }
</script>
</body>
</html>

这个url:http://abcd.com/authorizedurl是用来获取拼接后的url的
这里写图片描述
方式二:点击移动端链接快速授权
第三方平台方可以生成授权链接,将链接通过移动端直接发给授权管理员,管理员确认后即授权成功。
这里写图片描述
然后点击页面的授权按钮,就可以正常进行授权了,授权的必须是公众的管理员(绑定公众号的那个),然后就可以授权了。

三、授权码获取公众号信息

该API用于获取授权方的基本信息,包括头像、昵称、帐号类型、认证类型、微信号、原始ID和二维码图片URL。

需要特别记录授权方的帐号类型,在消息及事件推送时,对于不具备客服接口的公众号,需要在5秒内立即响应;而若有客服接口,则可以选择暂时不响应,而选择后续通过客服接口来发送消息触达粉丝。
这里写图片描述
这里写图片描述
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值