微信第三方平台开发流程和总结
创建第三方平台
1).在微信开放平台-管理中心-第三方平台中创建第三方平台账号。创建第三方平台
2).选择“平台型服务商类型”创建第三方平台。填写第三方平台的基本信息. 填写基本信息
3).设置相关权限信息,具体权限集信息可参考:第三方平台权限说明
4).填写开发资料的信息说明, 可参考:第三方平台申请资料说明
开发接入
- 接收第三方验证票据(component_verity_ticket)
在第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL”每隔10分钟定时推送component_verify_ticket。第三方平台方在收到ticket推送后也需进行解密(详细请见【消息加解密接入指引】),接收到后必须直接返回字符串success。
注意1:component_verity_ticket建议每次接受都进行写入缓存/数据库/文件
注意2:微信发送的请求中总共有5个参数,具体如下:
时间戳 timestamp,随机数nonce , encrypt_type(加密类型,为aes)和msg_signature(消息体签名,用于验证消息体的正确性)以及xml内容 详细可以查看
XML内容
注意3:对上述XML内容解密
解密/加密方式都是aes,
需要在创建第三方平台时填写开发资料时填写的:消息验证token,消息加解密key,appid
和微信请求来的参数:msg_signature(签名),timestamp(时间戳),nonce(随机数),postDataStr(post来的数据字符串),进行校验和解密成明文内容。然后提取出ComponentVerifyTicket进行写入缓存/数据库/文件(后续所有的操作都需要用到)
- 获取令牌(component_access_token)
第三方平台component_access_token是第三方平台的下文中接口的调用凭据,也叫做令牌(component_access_token)。每个令牌是存在有效期(2小时)的,且令牌的调用不是无限制的,请第三方平台做好令牌的管理,在令牌快过期时(比如1小时30分)再进行刷新.
接口调用请求说明
http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_component_token
POST数据示例:
{
"component_appid":"appid_value" ,
"component_appsecret": "appsecret_value",
"component_verify_ticket": "ticket_value"
}
- 判断token未过期直接返回(不要频繁的请求token,微信有请求次数限制)
- 判断ticket是否存在或过期
- 拼装请求数据
- 发送Https请求并获取结果
- 解析结果并保存token
- 获取预授权码(pre_auth_code)
该API用于获取预授权码。预授权码用于公众号或小程序授权时的第三方平台方安全验证。
接口调用请求说明
http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx
POST数据示例:
{
"component_appid":"appid_value"
}
步骤:
- 判断pre_auth_code未过期直接返回
- 获取token,如果过期则重新请求
- 替换url中的xxx
- 拼装请求参数
- 发送请求并获取返回结果
- 保存pre_auth_code
- 重定向到授权页,引入用户进入授权页
第三方平台方可以在自己的网站:中放置“微信公众号授权”的入口,引导公众号进入授权页。授权页网址为
https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx,
该网址中第三方平台方需要提供第三方平台方appid、预授权码和回调URI(授权成功后直接跳转的页面),
步骤:
- 在第三方平台指定的域名下做一个简单的页面作为授权页的入口
- 获取pre_auth_code
- 替换重定向的url的参数
- 接收授权方授权请求并保存授权方信息
在第四步后重定向到授权页后,在授权页上会有一个二维码,微信公众号管理员通过的使用本人微信扫描二维码对第三方平台进行授权,在公众号管理员扫描二维码后,第三方平台后台给定的回调地址(redirect_uri),将会收到一条请求,请求中包含了授权方的authorization_code和authorization_code的有效期 ;
- 使用authorization_code换取授权方的authorizer_access_token和authorizer_refresh_token。
接口调用请求说明
http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxxx
POST数据示例:
{
"component_appid":"appid_value" ,//第三方appid
"authorization_code": "auth_code_value" //授权code
}
返回参数如图看微信文档里面
步骤:
- 获取第三方平台的token
- 获取授权方授权信息
- 获取授权方账号信息进行保存
- 接收微信用户发送的事件以及消息
简单讲,就是微信用户在手机上给公众号发的普通文本消息会以上面的格式发到第三方平台的公众号消息与事件接收URL
然后这个xml是加密过的,msg_signature(签名),timestamp(时间戳),nonce(随机数),postDataStr(post来的数据字符串),进行校验和解密成明文内容
注意:被动回复时消息需要进行加密处理
步骤:
- 对post来的数据解密
- 根据解密后的明文处理不同的业务
特别注意:
- component_verity_ticket是获取component_access_token必备参数
- component_access_token是获取公众号(授权方)authorizer_access_token时必备参数。
- authorizer_access_token是代公众号(授权方)处理业务的必备参数。
- component_verity_ticket有效期3600(目前接口推送时返回的)。
- component_access_token有效期时2小时,且不是无限的。需要保存到缓存中(最好设置1小时30分)
- authorizer_access_token有效期是2小时,且不是无限的。需要保存到缓存中(最好设置1小时30分)