首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
华为云
V2EX  ›  PHP

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

  •  
  •   Annual · 291 天前 · 2001 次点击
    这是一个创建于 291 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    16 回复  |  直到 2018-01-03 16:45:08 +08:00
        1
    lhx2008   291 天前 via Android
    手动拼接也是可以的,按 ascii 顺序
        2
    lhx2008   291 天前 via Android
    或者就是按教程把所有非空的变量丢进一个数组,然后用 httpbuild
        3
    Telegram   291 天前   ♥ 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 就对不上。
        4
    Light3   291 天前
    3 楼说的很清楚了
    就是根据参数 然后 ascii 排序 拼接 md5 得到一个串比对 就行了.
    重点 md5 和 ascii 排序 话说 微信那好像有 demo  你可以看看
        5
    Annual   291 天前
    只能写成这个样子了,ascii 排序不会。。。
    http://mi90.com/20180102145316.png

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

    一般来讲,都是按照值排序,这样每个请求的顺序都不一样,才需要每次都排序
        7
    qiayue   291 天前
    排序直接用 ksort
        8
    Annual   291 天前
    @qiayue 就是不懂 ascii 所以才不知道怎么排序来写死。。
        9
    qiayue   291 天前
    @Annual “不懂 ascii ”
    不懂随便搜索一下就了解了
    我感觉你都可以不用干这行了,去搬砖吧
        10
    xiangbudaomingzi   291 天前
    @Annual 不懂 ascii。。。。。。你大学是什么专业?
        11
    Telegram   291 天前 via iPhone
    @Annual #8 你直接理解成按照 abcdefg 这种字母顺序排序就行了,反正参数不会是数字开头
        12
    xiangbudaomingzi   291 天前
    如果是半路转行的话建议还是得补一些计算机基本知识...
        13
    Annual   291 天前 via Android
    @xiangbudaomingzi 等等,我账号写的大学???
        14
    mingyun   291 天前
    github 有代码自己看看
        15
    yyup   290 天前
    签名算法是已知的,修改数据之后再重新计算签名就可以篡改金额了,请问微信是如何防御这样的危险的?如何避免中间人获取到这些数据?
        16
    Annual   290 天前
    @yyup 需要从微信那边去效验签名
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1001 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 17:54 · PVG 01:54 · LAX 10:54 · JFK 13:54
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1