记开放平台之第三⽅平台开发流程
背景
⼤家知道,⽹页开发的时候,诸如静默授权,分享朋友圈等操作,会使⽤到的appId跟appSecret,其中会存在accessToken这个有效期凭证的使⽤,那么假如我们在开发中有两个项⽬同时都需要⽤到这个,或者我们需要将两个项⽬中的⽤户数据,根据openId进⾏打通,那么就需要⽤到同⼀个进⾏开发(注:不同同⼀个⽤户的openId是不⼀样的),但是根据传统开发,除⾮使⽤中继服务器,否则两个独⽴的项⽬会互刷accessToken,导致达到接⼝使⽤次数,这种是不可取的。⼜或者是另外⼀种场景,⼀套项⽬想给N个接⼊使⽤逻辑,为了减少重复开发量,接⼊第三⽅平台这个概念。
第三⽅平台官⽅解释
公众平台-第三⽅平台(简称第三⽅平台)开放给所有通过开发者资质认证后的开发者使⽤。在得到或⼩程序运营者(简称运营者)授权后,第三⽅平台开发者可以通过调⽤开放平台的接⼝能⼒,为或⼩程序的运营者提供账号申请、⼩程序创建、技术开发、⾏业⽅案、活动营销、插件能⼒等全⽅位服务。同⼀个账号的运营者可以选择多家适合⾃⼰的第三⽅为其提供产品能⼒或委托运营。
正⽂
第三⽅平台地址:
1.注册登录等操作我就不说了,随后我们点击管理中⼼,第三⽅平台,创建第三⽅平台,在这⾥创建⼀个第三⽅平台
第⼀步为输⼊基本信息,我们选择的是平台型服务商,这⾥我就不多介绍,根据实际情况即可
进⼊下⼀步
最后⼀步是最重要的⼀步,需要根据情况填写,在这⾥我解释下
1. 授权发起页域名,这个指的是你的开发域名了,也就是⽹页授权等业务发起授权时,我们所使⽤的域名(没有域名的可以⾃⼰使⽤内
⽹穿透,具体操作⾃⼰搜下啦)
2. 授权测试/⼩程序列表:这个的意思其实很简单,在这个平台还没有全⽹发布的时候,我们只能使⽤在这个选项填写的进
⾏测试,全⽹发布后,所有的都可以接⼊到你的平台,没有全⽹发布的时候仅可以授权给当前的这个测试或者⼩程序啦,但这⾥填写的并不是的appId哦,切记,⽽是或⼩程序的原始ID(可在公众平台⽹站的设置页或⼩程序设置页到)
3. 授权事件接收URL:⽤于接收取消授权通知、授权成功通知、授权更新通知,也⽤于接收ticket,ticket是验证平台⽅的重要凭据,这
个是⽐较重要的⼀个url,是主动推送事件到我们服务器的⼀个接⼝地址,票据ticket是每⼗分钟都会推送的哦,根据实际情况进⾏填写
4. 消息校验Token和消息加解密Key是⾃⼰随意填写的哦,但是这⾥要注意的是消息加解密Key这个必须为43位长度的字符串,我都是
随机码⽣成的,⾃⼰保管好,后续会⽤到
5. 这个是⽤户发送给消息时,会将该信息推送到你服务器的⼀个接⼝路径,根据场景进⾏回复
6. 做⽹页授权、调⽤JS SDK等⽹页开发⼯作时所⽤的域名,但同时这个在提交的时候,需要下载下⽅那个验证⽂件,你放在服务器上,
⽤nginx指向它即可,鉴权使⽤
7. ip⽩名单不多说啦
提交审核,⼀般是秒过。然后就开始进⾏开发了
开发及踩坑
1.开发票据接收接⼝,也就是授权事件接收URL,在这边其余事件我就不赘述,⾃⼰根据实际情况,我贴上接收票据的代码
@ApiOperation(httpMethod ="POST", value ="主动⼗分钟推送票据")
@PostMapping(value ="/getTicket")
@MethodLog(description ="主动⼗分钟推送票据")
public String getCompanyIntroduce(HttpServletRequest request){
log.info("推送票据");
try{
// 加密签名
String msgSignature = Parameter("msg_signature");
// 时间戳
String timeStamp = Parameter("timestamp");
// 随机数
String nonce = Parameter("nonce");
log.info("msgSignature:{},timeStamp:{},nonce:{}", msgSignature, timeStamp, nonce);
// 从请求中读取整个post数据
InputStream inputStream;
String postData;
inputStream = InputStream();
postData = String(inputStream, Charset.forName("UTF-8"));
log.info("postData:{}", postData);
WXBizMsgCrypt wxBizMsgCrypt =new ComponentToken(),
String msg = wxBizMsgCrypt.decryptMsg(msgSignature, timeStamp, nonce, postData);
log.info("解密后: {}", msg);
Map<String, Object> result = lToMap(msg);
String infoType = ("InfoType").toString();
switch(infoType){
case"component_verify_ticket"://接收票据【component_verify_ticket】
Object componentVerifyTicket = ("ComponentVerifyTicket");
log.info("ComponentVerifyTicket值为:{}", componentVerifyTicket);
//存⼊redis
String redisKey = String.format(CacheConstant.THIRD_COMPONENT_VERIFY_TICKET, ComponentAppId());
stringRedisTemplate.opsForValue().set(redisKey, String(),60*60*10, TimeUnit.SECONDS);
break;
开发程序default:
break;
}
}catch(Exception e){
<("报错:{}", e.getMessage());
}
return"success";
}
WXBizMsgCrypt 这些类都是官⽅解密⼯具类,不过这边有坑,就是他的Base64解密⽅式,请⾃主替换,否则可能会出现解密错误,这是⼀个坑点。第⼆个坑点,除了替换Base64解密⽅法,XML解密的时候会出现空指针的情况,这边我直接给替换的代码,XMLParse类下的extract⽅法
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论