Laravel支付宝/微信支付

建议阅读之前多看几遍文档,本文不适合不看文档的程序狗。


流程部分

因为支付流程都很复杂,设计业务逻辑也很多。所以在开发之前应该先熟悉两个支付的流程。熟悉流程之后在进行开发会节省很多debug的时间。
本次使用的laravel包为yansongda/pay

微信

H5支付

在手机浏览器中使用微信支付,通过浏览器唤起微信支付。

(1)请求统一下单接口

用户点击支付之后后台进行统一下单接口请求。其实操作仅仅是在微信支付服务端,产生了一个订单而已。

(2)调起微信客户端付款

这里用的就是上面接口返回数据中的 mweb_url (这个参数只有在 return_code(请求标识) 和 result_code(业务标识) 都为SUCCESS时返回),这个参数就是浏览器调起支付的地址。直接访问即可。
但是在 yansongda/pay 中 return $pay->wap($order); 就会直接重定向到该地址。

(3)支付结束回到浏览器

这里流程应该是这样子:浏览器调起微信->微信支付过程->调起浏览器并打开刚才的网址。
注意这里是:调起浏览器 重新打开刚才的地址
所以在回到浏览器的时候,应该做查询订单状态的操作。比如给用户一个选择,已付款还是付款出现问题。

(4)支付回调

上面的流程前端永远不知道用户到底付款还是没付款。
用户支付成功,微信会通过后台的接口进行更新状态。
所以要在后台进行对订单的改变。记得按照要求return,不然微信会一直发送通知请求。并且在在更新订单前也要确认是否更新过。这都是必要的操作。

常见问题:
1、商家存在未配置的参数,请联系商家解决

1.当前调起H5支付的域名(微信侧从referer中获取)与申请H5支付时提交的授权域名不一致,如需添加或修改授权域名,请登陆商户号对应的商户平台--"产品中心"--"开发配置"自行配置
2.如果设置了回跳地址redirect_url,请确认设置的回跳地址的域名与申请H5支付时提交的授权域名是否一致

2、商家参数格式有误,请联系商家解决

1.当前调起H5支付的referer为空导致,一般是因为直接访问页面调起H5支付,请按正常流程进行页面跳转后发起支付,或自行抓包确认referer值是否为空

3、网络环境未能通过安全验证,请稍后再试

此处有坑! 如果后端是使用docker容器,则会报 「网络环境未能通过安全验证,请稍后再试」的错误。原因就是传递的参数中IP又问题。因为 「yansongda/pay」中自动获取IP是 Request::createFromGlobals()->getClientIp() 在docker中这个获取的是docker局域网IP。所以要在参数重重写 Request::createFromGlobals()->server('HTTP_X_REAL_IP') **

但是这个IP是干嘛的?
下图完美解释。

Laravel支付宝/微信支付_第1张图片
H5传递的IP作用

你可能感兴趣的:(Laravel支付宝/微信支付)