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

2018-01-02 02:59:16 +08:00
 Annual

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

3310 次点击
所在节点    PHP
16 条回复
lhx2008
2018-01-02 06:34:21 +08:00
手动拼接也是可以的,按 ascii 顺序
lhx2008
2018-01-02 06:39:55 +08:00
或者就是按教程把所有非空的变量丢进一个数组,然后用 httpbuild
Telegram
2018-01-02 10:04:38 +08:00
先给你讲下大概的原理:
比如说金额 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
2018-01-02 11:49:42 +08:00
3 楼说的很清楚了
就是根据参数 然后 ascii 排序 拼接 md5 得到一个串比对 就行了.
重点 md5 和 ascii 排序 话说 微信那好像有 demo  你可以看看
Annual
2018-01-02 14:55:50 +08:00
只能写成这个样子了,ascii 排序不会。。。
http://mi90.com/20180102145316.png

@Telegram
qiayue
2018-01-02 15:00:40 +08:00
按照参数名排序,如果你已知所有参数,那么直接写死顺序就可以了

一般来讲,都是按照值排序,这样每个请求的顺序都不一样,才需要每次都排序
qiayue
2018-01-02 15:01:17 +08:00
排序直接用 ksort
Annual
2018-01-02 15:14:49 +08:00
@qiayue 就是不懂 ascii 所以才不知道怎么排序来写死。。
qiayue
2018-01-02 15:17:13 +08:00
@Annual “不懂 ascii ”
不懂随便搜索一下就了解了
我感觉你都可以不用干这行了,去搬砖吧
xiangbudaomingzi
2018-01-02 15:19:52 +08:00
@Annual 不懂 ascii。。。。。。你大学是什么专业?
Telegram
2018-01-02 15:36:39 +08:00
@Annual #8 你直接理解成按照 abcdefg 这种字母顺序排序就行了,反正参数不会是数字开头
xiangbudaomingzi
2018-01-02 15:58:50 +08:00
如果是半路转行的话建议还是得补一些计算机基本知识...
Annual
2018-01-02 18:46:09 +08:00
@xiangbudaomingzi 等等,我账号写的大学???
mingyun
2018-01-02 23:54:33 +08:00
github 有代码自己看看
yyup
2018-01-03 10:13:23 +08:00
签名算法是已知的,修改数据之后再重新计算签名就可以篡改金额了,请问微信是如何防御这样的危险的?如何避免中间人获取到这些数据?
Annual
2018-01-03 16:45:08 +08:00
@yyup 需要从微信那边去效验签名

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/419251

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX