V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zoobop
V2EX  ›  Node.js

nodejs 支付宝支付求助

  •  
  •   zoobop · 2017-05-15 17:10:14 +08:00 · 4852 次点击
    这是一个创建于 2538 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    17 条回复    2017-05-16 11:16:15 +08:00
    fds
        1
    fds  
       2017-05-15 17:17:45 +08:00
    ……公司有保密协议呀,不能随便贴代码。签名不就是 crypto.createSign("RSA-SHA256") 么。你把你代码贴出来俺看看好咯。
    fds
        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 是支付宝给的签名。
    zoobop
        3
    zoobop  
    OP
       2017-05-15 17:29:17 +08:00   ❤️ 1
    @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
        4
    former  
       2017-05-15 17:31:15 +08:00
    可以通过支付宝的签名验证工具来比对啊,验证工具里面会给出每一步的数据,你一步一步对比看看哪一步出问题了
    zoobop
        5
    zoobop  
    OP
       2017-05-15 17:36:05 +08:00
    @former 我就是加密出来和工具不一样,所以纠结。明天再看看,一个人做 2 个项目。很纠结。很烦
    fds
        6
    fds  
       2017-05-15 18:05:03 +08:00
    私钥我加的是 -----BEGIN RSA PRIVATE KEY----- 不是 EC
    排序对吗? biz_content: JSON.stringify({}) 对吗?算加密的时候不用 querystring.escape 值但生成 url 时要 escape。
    littleylv
        7
    littleylv  
       2017-05-15 18:07:53 +08:00
    @zoobop #3 把 key 都贴出来真的好吗 = =
    Srar
        8
    Srar  
       2017-05-15 18:12:16 +08:00
    Jaylee
        9
    Jaylee  
       2017-05-15 19:23:52 +08:00
    @zoobop 如果有中文的话,你应该是少了一个编码参数,曾经我也遇到这样的问题。

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

    verify.update( signstr, "utf8" );
    ```
    zoobop
        10
    zoobop  
    OP
       2017-05-15 20:43:59 +08:00
    @littleylv 没事,还有公钥,到时候会替换下。
    zoobop
        11
    zoobop  
    OP
       2017-05-15 20:44:29 +08:00
    @Jaylee 嗯,明天上班再看看。不懂再问,感谢各位回答
    voocel
        12
    voocel  
       2017-05-16 02:36:43 +08:00 via Android
    为什么有关 node.js 的贴都是黑的
    zoobop
        13
    zoobop  
    OP
       2017-05-16 07:56:36 +08:00
    @voocel 节点 css
    zoobop
        14
    zoobop  
    OP
       2017-05-16 10:10:24 +08:00
    @fds 我把 key EC 改成 RSA 会提示 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
    fds
        15
    fds  
       2017-05-16 11:10:27 +08:00
    o 那还是保留不报错的把 XD 那只能是参数排序编码的问题咯
    zoobop
        16
    zoobop  
    OP
       2017-05-16 11:15:44 +08:00
    @fds 可以了。应该是加密的数据组装、编码的时候错了。现在可以了 感谢各位~
    zoobop
        17
    zoobop  
    OP
       2017-05-16 11:16:15 +08:00
    @fds 恩。刚刚重新写方法。可以啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2886 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 14:33 · PVG 22:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.