我正在使用外部支付网关构建一个简单的支付流程。
- 用户选择一个产品,点击购买
- 服务器发出POST请求,从第三方网站加载支付页面
支付网关不知道什么是";产品";是,并且期望具有实际价格值的请求。这让我很恼火,因为这意味着能够查看源的人将看到请求字段和值。有些人可能会想把价值观和订购系统搞砸。这并不是一个大问题,订单确认无论如何都会通过代币进行验证,但这不会阻止聪明人扰乱价值并付款。
有没有办法通过从服务器发布数据并在用户浏览器中打开结果来请求网关页面
如果他们必须通过用户的浏览器,还有什么更模糊的方法呢?在响应中播放HTTP标头?用AJAX调用发帖?
谢谢。
附言:这不是关于制作一个默认的服务器帖子(即使用curl),生成的页面必须在用户的浏览器中打开。
PPS:好吧,在使用支付网关API(确切地说是Payline.com)玩了更多之后,我发现他们确实提供了一种机制,即由服务器发布帖子,返回令牌,用户进入填写了所有内容的页面。浏览器不发送数据,这正是我想要的。这是我问题的解决办法,但不是这个问题的答案。我不会把这个作为答案发布,我仍然认为有一个答案会很好。
这是可能的,但它高度依赖于支付网关供应商的API,因此无法为您提供量身定制的答案。话虽如此,有几种方法可以做到这一点
HTTP头不是实现这一点的方法,AJAX调用也是如此。两者都非常容易被篡改。最好的办法就是简单地用收到的金额来验证订单,如果它们不匹配超过一个小的(+/-1%)误差范围,就取消收费,以考虑四舍五入等等。如果有人把结果搞砸了,他们的钱会在几天后回来(因为退款通常比收费慢。)
第二种方法是使用curl让(正如你所说的)默认服务器发布,然后将结果返回给用户——实际上是作为支付网关和客户之间的代理。这可能不如第一个解决方案好。
基本上,解决这一问题的方法是强记账任何通过用户浏览器的东西都会在某个时刻被篡改,无论你如何保护你的通信。只要确保你的系统足够智能,在有趣的业务发生时就能闻到它的味道。
您可以通过自己的服务器代理POST请求。向用户显示带有价格和所有字段的支付页面,但Submit
操作不直接进入支付网关,您可以在服务器上拦截提交操作,然后在验证后向支付网关服务器端提出请求。