废话很少说, 下图是微信支付官方的支付流程图:前端
微信支付的官方Demo就不吐槽了, 可是不能否认, 这个流程图画的仍是至关不错的, 很是的详细, 认真弄懂这张图, 那么你对支付的大概流程就已经差很少了解了. 支付宝的支付过程和微信支付的过程大致上是类似的, 彻底能够用相同的处理方式来处理.git
在咱们的项目中, 咱们是这么来处理的:github
无论是微信支付仍是支付宝支付, 咱们都向服务器请求一次数据, 参数中标示此次要发起的支付动做是微信支付仍是支付宝支付, 服务器获得消息后, 若是是你微信支付, 那么就按照微信支付的流程向微信支付服务器请求数据, 返回给用户端prepay_id, sign等信息, 用户端根据prepay_id和sign等信息调起移动端的微信客户端, 进入支付页面进行支付操做, 支付完成以后跳回咱们的用户端, 用户端根据回调信息, 从新向咱们本身的服务器请求订单支付状态, 究竟是支付成功仍是失败; 支付宝支付也是同样的, 调起支付宝客户端以前, 咱们须要先向咱们本身的服务器请求数据, 若是是支付宝的支付那么久给咱们返回支付宝支付的partner, seller, privateKey等信息, 获得结果后, 调起支付宝客户端, 支付成功后, 在回调中请求咱们本身的服务器, 判断订单是够支付成功.
**总结: 说到底, 订单究竟是支付成功仍是失败, 不能根据应用收到的回调信息来判断, 应该以咱们本身服务器端的信息为准. **后端
微信支付和支付宝支付流程, 对于移动端来讲, 能够统一用如下图示的流程来解决:安全
用户点击付款, 商户APP向商户服务器发送支付请求;服务器
商户APP获取支付必须的信息, 如 : prepay_id, sign, seller等信息;微信
调起微信或者支付宝, 等待用户校验付款;测试
微信APP向微信服务器发起付款的请求;微信支付
商户APP获得微信或者支付宝支付结果的回调;加密
商户APP收到回调, 向本身的服务器请求支付成功或者失败的结果;
获得支付结果后, 向用户展现支付成功或者失败;
支付是一个安全性要求比较高的操做, 像密钥, 商户ID, 签名等安全性要求比较高的, 而且可能不是一成不变的信息, 最好仍是放在服务器端来比较好, 用户端须要的时候就经过加密的接口来从服务器请求.
github: https://github.com/hell03W/WHPay
咱们把须要的商品金额发给后段,后端比对以后加密返回给我全部的订单信息,包括回调什么的,后端统一管理 而后咱们把收到的加密后的信息,发给支付宝,该怎么支付怎么支付, 支付完成以后,支付宝会给移动端和后端分别发送支付信息 而后前端把收到的信息发给后端进行比对 后端比对成功,更改本身订单状态