支付宝踩坑记

时间的轮回就像无息的风声,嗖的一下就离首次接入支付宝手机安全支付产品有好多年的光景。这个时候,接到一个紧急需求,需要更新支付宝手机安全支付产品密钥。密钥是RSA密钥,意味着我需要生成一对商户的私钥、公钥,将商户公钥提供给支付宝,再将支付宝的公钥拿到手。凭借接入支付宝的丰富经验,直接掉坑里,因为这么坑太坑了,且看我慢慢写。

一、支付宝新旧产品变迁,支付宝bug无情打脸

原签约的支付宝安全支付产品时间比较早,当时估计支付宝的开放平台还没有“诞生”。出于于产品兼容性的问题考虑,大概明白这个产品属于老产品,更新密钥不是在开放平台的应用里。自信满满的帮同事去更新密钥,被支付宝无性的打脸!

 

提示语定格在“系统异常,请稍后再试”!

二、让人无语的机器人客服时代

每次与支付宝打交道都有一种想吐血的节奏,支付宝客服不知道哪里来的自信,总会将我引导到一个机器人客服系统,答非所问,提工单,工单让我找商服,找到商服,商服就是一个自动回复机器人。技术人工客服问半闰,又给我导向了商服,商服又是一个没完没了的自动回复,真的把人气得要吐血。什么AI什么智能机器人,都是忽悠人。若非工作需要,把阿里系的所有东西全卸载都不解气。技术 人工客服唯一有用的一点就是,回复了一个问题,在哪里更新手机安全支付产品密钥,只有支付宝的人才知道,到底是什么产品,到底哪里是密钥更新的,这个答复,还是不错的。于是,我求证了一个密钥的问题,到底是使用java版密钥,还是非java版密钥,客服答复我,使用什么语言就使用什么密钥。听起来是那么的开心,我感觉不会掉坑里了。

三、支付宝支付密钥系统BUG确认

在我满腔怒气不受控制的情况下,我自己在钉钉群里圈了支付宝的对接人,将支付宝后台报错页面发过去,把人工客服答复,把商户机器人答复统统发过去,直接告诉TA,我已经吐血了。我知道钉钉对接群里有很多人,很从同事,我也顾及不了这么多。从上午开始,到下午,换电脑、换浏览器、清缓存、简直就是被耍了一天。支付宝最终确认是自己的系统问题。于是拉了一个小群,让我配合他们进行进一步的排查与处理问题,我到是非常关心更新密钥的事情,于是就接着配合。

四、一个低级的支付宝系统BUG

原以为支付宝出现了重大的系统BUG,新旧产品有重大的兼容问题。实际上却是支付宝产品的调整。更新密钥要求先入驻开放平台,从支付宝排查的结果来看,当点击查看开发者公钥时,会提示“系统异常,请稍后再试”,实际的请求情况如下

{"msg":"开发者未创建","stat":"failed","code":"PERMISSION_DEVELOPER_NOT_CREATED","redirect_url":"https://developers.alipay.com:443/dev/workspace/register?errorCode=PERMISSION_DEVELOPER_NOT_CREATED"}

也就是,支付宝的程序员,在处理业务的时候,并没有正确进行提示,引导用户先去入驻开放平台,导致更新密钥的业务流程卡死了。

五、小心翼翼的掉支付宝的坑里

前面有提到为了防止生成密钥出问题导致我们的业务中断,特意向客服求证了密钥需要生成什么版本的密钥。在支付宝提供的密钥生成工具里,我们可以看如下图所示的提示。

 

PKCS8(Java适用)、PKCS1(非JAVA适用)2个版本提示得很明确,Java或者非Java,我们的服务端是在使用.NET版本,那自然就得使用PKCS8(Java适用),而且客服也确认了,依据自身的开发语言选择。真的是防不胜防,神坑啊!生成PKCS1(非JAVA适用)密钥对,更新完,支付单妥妥的生成失败。通知支付宝的人出问题了,支付宝的人让我去截日志看问题排查问题,我直接跳过了。我想估计还得是使用PKCS8(Java适用),抓住下班前的时间缝隙,拦截了财务人员,更新到PKCS8(Java适用)版本密钥,正常了。就是这么无语的神奇。.Net使用PKCS8(Java适用)密钥,成功了!还好没有相信支付宝的人去找日志,真要是找完日志,估计财务都不在公司了,一个晚上无法支付收钱,相相都是恶梦!

六、支付宝产品密钥防坑总结

支付宝的产品可以划分为新老产品,老的产品采用用md5加密,也有采用rsa密钥加密(1024位)。老的rsa密钥在mapi网关产品密钥中管理。老产品是没有开放平台应用的概念,sdk调用也不需要传appId,新产品需要在开放平台后台配置,需要为每一个应用进行配置,sdk调用需要传appId。新产品密钥支付1027位、2048位。依据目前踩坑的经验来看,老产品的sdk采用的是PKCS8密钥,无论是java语言,还是.net语言都是使用PKCS8密钥。在更新密钥的时候,千万不能被支付宝提供的密钥工具所迷惑,老版本使用的是PKCS8,.Net也是使用PKCS8,支付宝的老版本demo就是这么提供!慎重,这是一个巨大的坑,一不小心,就会出线上生产事故,扣钱扣绩效,背黑锅,太容易掉坑里。

七、跨部门沟通

更新密钥是一件非常重要的事情,协调不同部门的人一起完成一件神坑不断的事情,非常虐心。大家都有手上的活,自然会影响到他人的工作。一点都不影响到别人,那是表面上的友好,其实换位思考也是,背着支付宝的黑锅来回找要验证码、要财务登陆,换浏览器尝试,打断了别人工作,换谁都会有点情绪。我的目标是将支付宝手机安全密钥更新好,别人开心不开心,不管,这是工作,有点耍赖了!人在江湖啊!

八、与支付宝沟通

有支付宝的地方就有江湖!与支付宝的沟通,是非常虐心的工作,没有人愿意干这种事情,就像一只足球,被支付宝从钉钉踢到在线客服,被踢到技术在线客服,被踢到商服在线客服。如果对方能解答问题还好,问题是对方是一个机器人,答非所问。工作没有进展,整个人都不好了。支付宝非常精明的运用了机器人客服,将客户做了一次过滤,基本上小客户就是没有服务的,机器人纯答非所问。同时,支付宝也有一些“灰色”的业务是不会在客服系统里回复的,但是支付宝会有一句让人会意的让人沉思的答复“xxxx,请拨打….”。我非常不喜欢打阿里系的电话,非常抗拒,我知道电话里没完没了的等待,那怕是一秒,都感觉是一种煎熬。

8.1 戏如支付宝

与支付宝的沟通技巧在于,能联系客服经理的,优先联系客服经理。如果客服经理将自己导向在线客服,也不要生气,我们知道在线客服就是浪费时间的,但是这个戏还是要演,把在线客服答非所问的截图发给客服经理,同时,可以提工单,发邮件。因为客服经理可能答复不上来,就会拉技术进来,当技术拉进来之后,基本上问题就能比较快的解决了。

8.2 老接口文档索取

有不少支付宝老产品已经没有公开的入口了,有的老接口文档如果能搜索到,那就是见鬼了,搜索到了,估计也会有一个收费码,要求付费10块钱才可以下载。对于老接口文档,可以向客服经理要,一定要提供签约的pid,具体的接口名称。一般大客户会有此服务,如果连客服经理都没有,说明不是支付宝的重要客户,基本上只有冷冷的机器人服务,你说什么都是很nice的自动回毛复,直到你放弃。

能在财务下班前更新好支付宝手机安全支付产品密钥,虽然过程是那么煎熬与不顺,想想事办成了,还是有些开心。我跟同事聊了聊,觉得这个密钥更新是一个必踩的坑,想想就扎心,这么多同行要更新密钥,这么多同行要踩坑!如果有幸看到,希望你能收藏起来,好好看看,也许能避免一场无辜的线上支付事故!