Annual
V2EX  ›  PHP

学习支付过程中遇到的问题

  •  
  •   Annual · Jan 2, 2018 · 3846 views
    This topic created in 3142 days ago, the information mentioned may be changed or developed.

    lz 现在是学习 PHP 阶段,有很多不懂,期望不要吐槽 233 正文: 现在在学习使用前几天的个人微信支付接口 帖子 /t/416924 目前卡在了异步验证,POST 返回之后做成变量,如何根据他的方式计算出签名? http://mi90.com/20180102025127.png http://mi90.com/20180102025559.png

    16 replies    2018-01-03 16:45:08 +08:00
    lhx2008
        1
    lhx2008  
       Jan 2, 2018 via Android
    手动拼接也是可以的,按 ascii 顺序
    lhx2008
        2
    lhx2008  
       Jan 2, 2018 via Android
    或者就是按教程把所有非空的变量丢进一个数组,然后用 httpbuild
    Telegram
        3
    Telegram  
       Jan 2, 2018   ❤️ 2
    先给你讲下大概的原理:
    比如说金额 je=100 订单号 ddh=123456,支付时间 sj=20180101 这 3 个参数,
    如果不签名的话,我可以直接修改金额 je=9999,然后提交给服务器,那我账户就白白多充值了 9999 余额。

    所以需要签名,用来验证前面参数是否被修改过。
    按照你的这个接口,方法是先根据参数名的 ascii 排序,ddh,je,sj 这个顺序
    所以拼接后市 ddh=123456&je=100&sj=20180101
    再加一个 key,比如说是 IGDIGI#**D*S&#@
    拼接后就是
    ddh=123456&je=100&sj=20180101&key=IGDIGI#**D*S&#@

    然后对这个字符串 MD5 运算,得到:B71C6C22BD69675BCD1302D2EDCD9F3C

    最后提交服务器就是:
    ddh=123456&je=100&sj=20180101&sign=B71C6C22BD69675BCD1302D2EDCD9F3C

    这样一来,服务器只要收到后自己再验算一遍,看看算出来的 sign 是不是一样,就知道你改没改参数了。
    只要你随便改其中某一个参数,后面的 sign 就对不上。
    Light3
        4
    Light3  
       Jan 2, 2018
    3 楼说的很清楚了
    就是根据参数 然后 ascii 排序 拼接 md5 得到一个串比对 就行了.
    重点 md5 和 ascii 排序 话说 微信那好像有 demo  你可以看看
    Annual
        5
    Annual  
    OP
       Jan 2, 2018
    只能写成这个样子了,ascii 排序不会。。。
    http://mi90.com/20180102145316.png

    @Telegram
    qiayue
        6
    qiayue  
       Jan 2, 2018
    按照参数名排序,如果你已知所有参数,那么直接写死顺序就可以了

    一般来讲,都是按照值排序,这样每个请求的顺序都不一样,才需要每次都排序
    qiayue
        7
    qiayue  
       Jan 2, 2018
    排序直接用 ksort
    Annual
        8
    Annual  
    OP
       Jan 2, 2018
    @qiayue 就是不懂 ascii 所以才不知道怎么排序来写死。。
    qiayue
        9
    qiayue  
       Jan 2, 2018
    @Annual “不懂 ascii ”
    不懂随便搜索一下就了解了
    我感觉你都可以不用干这行了,去搬砖吧
    xiangbudaomingzi
        10
    xiangbudaomingzi  
       Jan 2, 2018
    @Annual 不懂 ascii。。。。。。你大学是什么专业?
    Telegram
        11
    Telegram  
       Jan 2, 2018 via iPhone
    @Annual #8 你直接理解成按照 abcdefg 这种字母顺序排序就行了,反正参数不会是数字开头
    xiangbudaomingzi
        12
    xiangbudaomingzi  
       Jan 2, 2018
    如果是半路转行的话建议还是得补一些计算机基本知识...
    Annual
        13
    Annual  
    OP
       Jan 2, 2018 via Android
    @xiangbudaomingzi 等等,我账号写的大学???
    mingyun
        14
    mingyun  
       Jan 2, 2018
    github 有代码自己看看
    yyup
        15
    yyup  
       Jan 3, 2018
    签名算法是已知的,修改数据之后再重新计算签名就可以篡改金额了,请问微信是如何防御这样的危险的?如何避免中间人获取到这些数据?
    Annual
        16
    Annual  
    OP
       Jan 3, 2018
    @yyup 需要从微信那边去效验签名
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3054 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:54 · PVG 21:54 · LAX 06:54 · JFK 09:54
    ♥ Do have faith in what you're doing.