支付宝,openssl_sign(): supplied key param cannot be coerced into a private key

2018/01/27 08:46 于 技术

微信 微博 豆瓣 人人

这篇文章前提排除了openssl自身的问题(好多年没有写东西,应该咋说?)

新版本的支付宝API不再用老的MD5进行签名,出现这个问题后
检查配置文件中的私钥是否是一行乱码(不带-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----)
如果没问题,那就注意一下,可能是下面这个情况:
你用他自己的生成工具生成的公钥和私钥,是否用的PHP但是选成了Java用的用一种padding对私钥进行了填充的选项(那个PKCS8Java用,非PKCS1Java用)

为什么会出现这个脑残的原因,也不会有人往这上面考虑的原因在哪:

选择PKCS8处理后的私钥,在windows上和openssl1.0.0版本上面是可以通过openssl_sign()的,没有问题可以签名成功。
但是在低版本的openssl上要出现openssl_sign(): supplied key param cannot be coerced into a private key

所以,
生成一对正确的秘钥就可以了。
也可以用你服务器上的openssl生成然后填充。

支付宝新API官方的SDK太臃肿了,又不是阿里云那种一堆服务,再说连阿里云的SDK也不只带runtime啊................,如果仅仅用一两个功能的话,最好自己简化一下。

微信带参数二维码上面的坑

2017/06/16 00:41 于 技术

微信 微博 豆瓣 人人

临时的可以用数字,永久的也可以用数字
扫描的时候服务端通过scene_id分辨不出来是临时还是永久的二维码,只能从ticket上(一个长度近100的字符串,检索效率肯定不行)

如果永久和临时同时使用,永久的参数就不要用存数字了...
如果业务量小,预计不会使用到临时的(永久的限量100000),忽略以上建议

js小数的精度问题

2017/06/05 21:17 于 技术

一般在换算的时候出现问题
比如

console.log(2+(-2.06))

function fixnum(_v)
{
if (isNaN(_v) || _v=="" || _v==0) {
return 0.00;
}
_v = parseFloat(_v);
//js小数失精度
_v = parseFloat(_v.toFixed(2) );
return _v;
}

在计算的时候也不要
r+=fixnum(_v);
使用
r=fixnum(r+fixnum(_v));

G17使用效果

2017/05/15 17:54 于 活着

有效果,明显减少细微抖动感。
不过宝马的加油口比较细,用起来很麻烦,用完一箱就不用了。

我现在做法是每两三万公里做一次四轮定位,连续用机箱宝马自己的添加剂。零下温度也不会有抖动。

1