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

nodejs 支付宝支付求助

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

    最近被卡在签名验证上了,好烦,不知道哪里错了,服务器加密出来的数据和支付宝工具加密的完全不一样,有没有 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+IinKvYJW1UYR5DxAu/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。
    U7Q5tLAex2FI0o0g
        7
    U7Q5tLAex2FI0o0g  
       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     Solana     1275 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 16:43 PVG 00:43 LAX 08:43 JFK 11:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86