这篇文章不贴代码,很多文章贴出代码也看不懂(我的感受)。主要讲讲支付的流程。
对签名不太理解的朋友,建议先看这篇文章https://blog.csdn.net/yt_php/article/details/80522303
不然很难往下进行。
开发中需要的配置:(对应上图)
RETURNURL //同步通知地址 return回调
NOTIFYURL //异步通知地址 notify通知
APPID = // 应用ID app应用
PRIKEY = //商户私钥 private私有 key钥
ALIPUBKEY = //支付宝公钥 ali阿里 pub公共 key钥
PAYWAY = //支付网关 pay支付 way路径
步骤:
引导用户到结算页面
->买家点击结算->商家服务器:
(1)整合业务参数,商户订单号、支付金额等。
(1)组装请求参数:包括应用id,告诉支付宝我们是哪个商家,支付宝好读取上图我们的配置,主要是读取我们上传的公钥,用来验证我们的签名。包括同异步地址,告诉支付宝支付成功后通知我们的服务器地址。包括业务参数。
(2)生成签名:用原参数+我们的私钥,生成签名(字符串)。
(3)把签名作为一个参数添加进去 'sign'=>123rgroifjwoe
(4)请求支付网关:https://openapi.alipay.com/gateway.do?请求参数=...&sign=...
->转到支付宝支付页面(和我们服务器无关):
->买家确认付款->支付宝后台->收到支付请求:
(1)读取参数中应用id对应的配置信息,找到我们上传的公钥。
(2)用请求参数+上传的公钥,生成签名,与我们发送的签名,作对比,相等说明数据正确完整。
(3)根据我们的业务参数等,对商家和买家发起交易。
->交易成功,同步回调(给用户看支付结果这里不做介绍)、异步回调(商家服务器<-->支付宝之间一些数据验证)
异步回调notify.php:
支付宝返回的数据格式,通知参数+签名+通知id+支付状态
1/验证签名:商家用 除了签名的其他参数(通知参数+通知id+支付状态)+支付宝公钥 生成签名,与支付宝发送过来的签名作对比,如果相等说明数据完整准确。
2/验证是否来自支付宝的通知:同时发送过来一个通知id,防止请求被拦截,返回伪造的异步回调,商家用获得的 通知id 发送到支付宝。请求url为'https://mapi.alipay.com/gateway.do?service=notify_verify&partner=PID '¬ify_id='通知id,返回true,则验证成功。
3/查看支付状态,'trade_status' == 'TRADE_SUCCESS' 交易状态:支付成功。或者 'trade_status' == 'TRADE_FINISHED'交易状态:交易完成。则完成支付。
4/修改数据库操作。
5/echo 'success' 支付宝接收到我们确认成功的字符串,交易结束,如果支付宝收不到确认字符串,将重复发送请求,直到有响应为止。
end;