nodejs 支付宝支付求助

2017-05-15 17:10:14 +08:00
 zoobop

最近被卡在签名验证上了,好烦,不知道哪里错了,服务器加密出来的数据和支付宝工具加密的完全不一样,有没有 V 友已经集成过支付宝支付,求个 demo 例子。项目很急,微信已经搞定了就差支付宝了。万分感谢!!!

4853 次点击
所在节点    Node.js
17 条回复
fds
2017-05-15 17:17:45 +08:00
……公司有保密协议呀,不能随便贴代码。签名不就是 crypto.createSign("RSA-SHA256") 么。你把你代码贴出来俺看看好咯。
fds
2017-05-15 17:25:14 +08:00
你说的是验证签名?不是生成签名?验证签名用的是
const verify = crypto.createVerify("RSA-SHA256")
verify.update(strValues)
return verify.verify(appInfo.public, Buffer.from(strSign, "base64"))
返回的是布尔值表示签名是否正确。strValues 是参数按顺序拼成的字符串,strSign 是支付宝给的签名。
zoobop
2017-05-15 17:29:17 +08:00
@fds
生成我贴下代码
const privateKey =
`-----BEGIN EC PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCZUqn6UL7/PIM0m4r4gZhDNWy6narKRfwZGpmOX3CPxvVFWMu7qmJsRRm7o3Di82YE7y9smwertorEtrptjZNPh+7vkVKGX8njC/IlfJhKWKViYFNlGzCmtXVbA7+bP9GE+62f6PAu1wEmPP8lQd6to6yxNKAnqt1UMagx25KGQaVrhYbuk9ACPb9MzA2VszZwSHEYJ+5g+VKLNikxmvbh6XoUWNmo2+ROYxyFb00v7rYaucxY284p3vUUS4qu40bUPcZ3jIY/S7VSe+CGEjhtrf+jF3zTrjtZj3CXLJs1M3xWnmqW5GEArRMWxIZqmWupWwJ4iswULhS3QjfUdLbvAgMBAAECggEAeqXGtScsci4s4sNeGsZIT9MHxAxl1+K99DL0DRDJkSndf/i1GM0GaIeqOxBWOCXuQRo4fI9TRogCX7OwU/yBj4g0mU1Nj5JGhCpFLLmLdUWOHrDhZSqn82OKmiDYgE8/wjo1vIpwv3dcQwNeMqaLg6k/do2bY7/pxvTmD+QORPgyctVcv+DaQVKbjYuwjpFmPiy62Ro2zj7aoL8R4M3o9JJ7sBk0XH7afBi6dvasIb+Jn0RUX2PgfFw857Lv6QeBIWiUpVgJe138SE09P5Oeo3dR8ioNmbNsHXTjeKTeAN/coawV9o/TsbB7lYTncjFu3x5NIRWEn3Cd0dLD2i2sqQKBgQDseqagDq6r/vtdJyP9B5N10evHgvOdmcxaCFTrcLc5cYvwSf/gGzLNegVrzbuEL8osJPM/DWZxhMMOn+b32uiAyJXFNhneswyPOapZDmgnnYYYHqSyfe5p9/g/GVjmbsDXmp/JQXqKMrb5OvkJDkhDeR00Zi6fmYeXTNYBoOCmswKBgQCl+rsSOyYUzQIMW9+EdLPV2knO9FuA3r5VXdoul4P8tm/KTdFMdhLiETMNeY718rNz5hxSVjb/5JdsajUU72+DwwkEvNtXNUAzTfRc7Rro407PuWbGJ/qwtCK4a6oyMhkPMI1lcD4ZbE1RYpKhWV0A09JfxNTtFgbS4PVuJy/s1QKBgQCUq59p7REfjNSXAe58O3EXl3w2GDv0jyaMS8SnqFtov9wMm1lEmZTc3aPe3J7RQgJGsoxCzbfkEmVXImxg0r1tia2vKI4nFkYFHWndR1Nv5HbTXyCIHufuszjc4qCjbmnKoqlmK8ZQcAXctpiues4vrUsREFSrfihilKnOqEfURQKBgD2Yc84LN1Gm1ujBO4zLRmXJcXSlCEQl5VqGzs5Vmjyxc4EPKeoHM3DD0z9f6ibp36DWN5Jyvkxuh6dLLtHLHYY3XeRtNbUCZQXlGxdVQpRErt21vycwdP8Yin4ILowcPWJ+sSqA4frLT1Ixk5rfL/17nmm+AQrPDs85frtXPZjVAoGBAKTUJrfQs6PrWfUbr0n+oHLa7Fll/z2zrpJvM68cwg6mF734C0lJe5UJ9zSg00DhwrnDr+aKZ1z+ZPZfI4tbD4GyKPwi5PtvQjqlVssTQV+1tOr+hSrbF8Gm+I6inKvYJW1UYR5DxAu/lpSTdONgGZuM6O3VA6/GDF911+ub5iah
-----END EC PRIVATE KEY-----`;
var sign = crypto.createSign('RSA-SHA256');
sign.update(str);
var signstr = sign.sign(privateKey, 'Base64');
我加密出来的和工具的就是不一样,私钥的格式错了么
former
2017-05-15 17:31:15 +08:00
可以通过支付宝的签名验证工具来比对啊,验证工具里面会给出每一步的数据,你一步一步对比看看哪一步出问题了
zoobop
2017-05-15 17:36:05 +08:00
@former 我就是加密出来和工具不一样,所以纠结。明天再看看,一个人做 2 个项目。很纠结。很烦
fds
2017-05-15 18:05:03 +08:00
私钥我加的是 -----BEGIN RSA PRIVATE KEY----- 不是 EC
排序对吗? biz_content: JSON.stringify({}) 对吗?算加密的时候不用 querystring.escape 值但生成 url 时要 escape。
littleylv
2017-05-15 18:07:53 +08:00
@zoobop #3 把 key 都贴出来真的好吗 = =
Srar
2017-05-15 18:12:16 +08:00
Jaylee
2017-05-15 19:23:52 +08:00
@zoobop 如果有中文的话,你应该是少了一个编码参数,曾经我也遇到这样的问题。

```
let verify = crypto.createVerify( "RSA-SHA1", 'utf8' );

verify.update( signstr, "utf8" );
```
zoobop
2017-05-15 20:43:59 +08:00
@littleylv 没事,还有公钥,到时候会替换下。
zoobop
2017-05-15 20:44:29 +08:00
@Jaylee 嗯,明天上班再看看。不懂再问,感谢各位回答
voocel
2017-05-16 02:36:43 +08:00
为什么有关 node.js 的贴都是黑的
zoobop
2017-05-16 07:56:36 +08:00
@voocel 节点 css
zoobop
2017-05-16 10:10:24 +08:00
@fds 我把 key EC 改成 RSA 会提示 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
fds
2017-05-16 11:10:27 +08:00
o 那还是保留不报错的把 XD 那只能是参数排序编码的问题咯
zoobop
2017-05-16 11:15:44 +08:00
@fds 可以了。应该是加密的数据组装、编码的时候错了。现在可以了 感谢各位~
zoobop
2017-05-16 11:16:15 +08:00
@fds 恩。刚刚重新写方法。可以啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361475

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX