微信公众号第三方开发之二获取预授权码(pre_auth_code)

     首先,我们作为第三方平台,在微信开放平台创建第三方公众号后,接下来首要处理的事情。就是获取预授权码。而微信上讲解一步一步做法,其实就是要写好一个一个方法,在引导授权页上,通过调用方法来得到这些参数。

 

     需要预授权码,首先要有接口调用凭据(component_access_token)

     而接口凭据又需要有微信的"推送component_verify_ticket"协议

 

     1、获取微信推送协议【推送component_verify_ticket】

     通过微信开放平台设置的授权事件url,我们需要写好方法来获取component_verify_ticket。

     首先知道微信推送过来的参数有哪些?经过测试,发现微信推送过来的参数有如下:【signature=d1b24f7072876ffe41c442dfa9bede8timestamp=1460691113 nonce=490874248 encrypt_type=aesmsg_signature=b2afd8c37040bace57c403c2d1

      但是,怎么都没发现什么加密过的消息体呢?几经破折,终于找到如下:


微信公众号第三方开发之二获取预授权码(pre_auth_code)_第1张图片


这里提到消息加解密做法有2歩:因此我们使用QueryString获取的只是一些额外参数,真正的消息体是在postdata【这个并不是参数名】里头。那么,到底怎么得到呢?我使用如下方法:

Stream inputStream =Request.InputStream;//

if (inputStream !=null)

{

    using(StreamReader sr = newStreamReader(inputStream))

    {

        p_req= sr.ReadToEnd();

    }

}

 

这里我建立了一张log表来检测授权流程获取的一系列字符串

微信公众号第三方开发之二获取预授权码(pre_auth_code)_第2张图片


因为Component_access_token有效期2小时,而且上限是2000次,这里我预先创建了3条记录,分别存储Component_verify_ticket、Component_access_token、pre_auth_code记录

以此进行以后的操作

 

特别是component_access_token存储的时候我直接将时间推迟了1.5小时,通过和当前系统时间比对,如果还在有效期内,就不再重新获取token串。具体做法如下:

 

存储方式是我自己研究想到这么做的,至于其他的核心方法实现都是参照上章节提到的博主的源码,请自行前往下载。

 

首先获取ticket:

微信公众号第三方开发之二获取预授权码(pre_auth_code)_第3张图片


其次,获取token值:

微信公众号第三方开发之二获取预授权码(pre_auth_code)_第4张图片

最后,获取预授权码:

微信公众号第三方开发之二获取预授权码(pre_auth_code)_第5张图片

最后,预授权码获取到这里结束了,当然上面代码只是参考,最终方案取决于你自己需求设计。

祝食用愉快,额,,讲解不到位之处,轻喷~~


你可能感兴趣的:(微信)