因业务需要,我们使用一个库来获取用户手机号,但是在对接第三方接口的时候,发现有以下两个点需要注意的:
- 提供给前端使用的接口,请求的参数居然要 rsa 来签名,这就意味着需要把私钥放在前端,这么私密的东西居然放前端,你们细品吧。于是我们把这块逻辑挪到后端去处理了,实在是不敢放在前端理呀。
前端如何用 rsa 签名请看后文。
- 接口文档不完善,出现问题的时候,一定要有个群去找他们对接,比如文档没更新,但是他们接口加了参数之类的,都是坑。
期间出现了一个问题,我在请求他们的接口的时候,报跨域了,于是用 jsonp 去请求,依然请求不了。
问题的原因是他们的那个接口地址是动态的,而且 url 上附带了 callback 参数,我拿到这个地址去做跨域请求的时候,就请求不了,这坑人坑的,后来经过跟他们协调,最后确认了 callback 上的参数值,终于才请求成功,这事才算完了。
最后给我的感觉是,第三方在提供这些服务的时候,应该是没有做过实际的测试,一切都是雾里云里的,我在跟他们对接的时候非常想说这句话:“你们有没有做过实际的使用测试呀?”,最后居然还是我发现他们的文档不完善了,告知他们后,他们才补上的。
所以以后对接第三方的时候,按照文档一路走下来,结果中途某个地方卡克了,千万别犹豫,马上跟第三方说,你们有没有做过整理的流程测试?我遇到的这个阻碍问题怎么继续走下去?
前端使用 rsa 签名
// 前端使用 rsa 签名
var rs = require('jsrsasign');
var prvKey = `
-----BEGIN PRIVATE KEY-----
8lZ8iTbxfmyA7W5JIquoymC/7cDWu5Z/EFK/HGHdI2e...
-----END PRIVATE KEY-----
`;
var sig = new rs.Signature({ alg: 'SHA256withRSA' });
sig.init(prvKey);
sig.updateString('a=1&b=2&c=3');
var sigVal = sig.sign();
console.log(sigVal);