最近被卡在签名验证上了,好烦,不知道哪里错了,服务器加密出来的数据和支付宝工具加密的完全不一样,有没有 V 友已经集成过支付宝支付,求个 demo 例子。项目很急,微信已经搞定了就差支付宝了。万分感谢!!!
1
fds 2017-05-15 17:17:45 +08:00
……公司有保密协议呀,不能随便贴代码。签名不就是 crypto.createSign("RSA-SHA256") 么。你把你代码贴出来俺看看好咯。
|
2
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 是支付宝给的签名。 |
3
zoobop OP @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'); 我加密出来的和工具的就是不一样,私钥的格式错了么 |
4
former 2017-05-15 17:31:15 +08:00
可以通过支付宝的签名验证工具来比对啊,验证工具里面会给出每一步的数据,你一步一步对比看看哪一步出问题了
|
6
fds 2017-05-15 18:05:03 +08:00
私钥我加的是 -----BEGIN RSA PRIVATE KEY----- 不是 EC
排序对吗? biz_content: JSON.stringify({}) 对吗?算加密的时候不用 querystring.escape 值但生成 url 时要 escape。 |
8
Srar 2017-05-15 18:12:16 +08:00
|
9
Jaylee 2017-05-15 19:23:52 +08:00
@zoobop 如果有中文的话,你应该是少了一个编码参数,曾经我也遇到这样的问题。
``` let verify = crypto.createVerify( "RSA-SHA1", 'utf8' ); verify.update( signstr, "utf8" ); ``` |
12
voocel 2017-05-16 02:36:43 +08:00 via Android
为什么有关 node.js 的贴都是黑的
|
14
zoobop OP @fds 我把 key EC 改成 RSA 会提示 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
|
15
fds 2017-05-16 11:10:27 +08:00
o 那还是保留不报错的把 XD 那只能是参数排序编码的问题咯
|