行业资讯
Laravel集成微信支付宝支付:yansongda扩展包实战
1. 项目概述在电商和移动互联网应用开发中支付功能是必不可少的关键模块。作为PHP开发者我们经常需要在Laravel框架中集成微信支付和支付宝支付功能。这两个支付平台占据了国内移动支付90%以上的市场份额因此掌握它们的集成方法对开发者来说至关重要。我最近在一个电商项目中使用了yansongda/laravel-pay这个扩展包它提供了非常优雅的API来对接微信支付和支付宝支付。相比直接调用官方SDK这个扩展包封装了大量重复性工作让支付集成变得简单高效。2. 环境准备与安装2.1 系统要求在开始之前请确保你的开发环境满足以下要求PHP 8.0Composer已安装Laravel或Lumen 8.02.2 安装扩展包通过Composer安装扩展包非常简单composer require yansongda/laravel-pay:~3.7.0对于Laravel用户发布配置文件php artisan vendor:publish --providerYansongda\LaravelPay\PayServiceProvider --taglaravel-payLumen用户需要手动注册服务提供者$app-register(Yansongda\LaravelPay\PayServiceProvider::class);3. 配置支付参数3.1 支付宝配置在config/pay.php配置文件中找到alipay部分进行配置alipay [ default [ app_id env(ALIPAY_APP_ID, ), private_key env(ALIPAY_PRIVATE_KEY, ), public_key env(ALIPAY_PUBLIC_KEY, ), notify_url env(ALIPAY_NOTIFY_URL, ), return_url env(ALIPAY_RETURN_URL, ), mode env(ALIPAY_MODE, normal), ], ],3.2 微信支付配置微信支付的配置类似wechat [ default [ app_id env(WECHAT_PAY_APP_ID, ), mch_id env(WECHAT_PAY_MCH_ID, ), key env(WECHAT_PAY_KEY, ), cert_client env(WECHAT_PAY_CERT_CLIENT, ), cert_key env(WECHAT_PAY_CERT_KEY, ), notify_url env(WECHAT_PAY_NOTIFY_URL, ), mode env(WECHAT_PAY_MODE, normal), ], ],4. 实现支付功能4.1 支付宝支付实现4.1.1 网页支付use Yansongda\LaravelPay\Facades\Pay; $order [ out_trade_no time(), total_amount 1, subject 测试订单, ]; return Pay::alipay()-web($order);4.1.2 手机网站支付return Pay::alipay()-wap($order);4.1.3 APP支付$result Pay::alipay()-app($order);4.2 微信支付实现4.2.1 公众号支付use Yansongda\LaravelPay\Facades\Pay; $order [ out_trade_no time(), body 测试订单, total_fee 1, openid 用户openid, ]; $result Pay::wechat()-mp($order);4.2.2 小程序支付$result Pay::wechat()-mini($order);4.2.3 APP支付$result Pay::wechat()-app($order);5. 支付回调处理5.1 支付宝回调处理public function alipayNotify(Request $request) { $data Pay::alipay()-verify(); // 处理业务逻辑 if ($data-trade_status TRADE_SUCCESS) { // 支付成功处理 } return Pay::alipay()-success(); }5.2 微信支付回调处理public function wechatNotify(Request $request) { $data Pay::wechat()-verify(); // 处理业务逻辑 if ($data-return_code SUCCESS $data-result_code SUCCESS) { // 支付成功处理 } return Pay::wechat()-success(); }6. 常见问题与解决方案6.1 签名验证失败问题表现回调时出现签名验证失败错误。解决方案检查配置的公钥/私钥是否正确确保没有多余的空格或换行检查证书路径是否正确6.2 支付金额格式问题问题表现支付时提示金额格式不正确。解决方案支付宝要求金额格式为字符串如0.01微信支付要求金额单位为分如1表示0.01元6.3 回调URL配置问题问题表现支付成功后没有收到回调通知。解决方案确保回调URL可公开访问检查服务器防火墙设置在支付平台配置正确的回调域名7. 高级功能实现7.1 订单查询// 支付宝订单查询 $result Pay::alipay()-find([ out_trade_no 订单号 ]); // 微信订单查询 $result Pay::wechat()-find([ out_trade_no 订单号 ]);7.2 退款处理// 支付宝退款 $result Pay::alipay()-refund([ out_trade_no 原订单号, refund_amount 退款金额, out_request_no 退款请求号 ]); // 微信退款 $result Pay::wechat()-refund([ out_trade_no 原订单号, out_refund_no 退款单号, total_fee 订单金额, refund_fee 退款金额 ]);7.3 对账单下载// 支付宝对账单下载 $result Pay::alipay()-download([ bill_type trade, bill_date 2023-01-01 ]); // 微信对账单下载 $result Pay::wechat()-download([ bill_date 20230101, bill_type ALL ]);8. 安全注意事项敏感信息保护不要将支付密钥硬编码在代码中使用环境变量存储敏感信息定期更换密钥防重复支付在回调处理中加入幂等性检查记录已处理订单号使用数据库事务确保数据一致性日志记录记录所有支付请求和回调保存原始请求数据设置日志轮转防止磁盘空间不足9. 性能优化建议异步处理将支付成功后的业务逻辑放入队列处理使用事件监听器解耦支付处理逻辑缓存优化缓存支付平台公钥缓存常用配置信息连接池使用HTTP连接池减少连接建立开销复用支付SDK实例10. 测试与调试10.1 沙箱环境使用支付宝和微信支付都提供了沙箱环境用于测试支付宝沙箱配置mode dev,微信支付沙箱配置mode dev,10.2 调试工具日志记录Pay::alipay()-setLogger(app(log)); Pay::wechat()-setLogger(app(log));HTTP调试Pay::alipay()-setHttpOptions([debug true]); Pay::wechat()-setHttpOptions([debug true]);Mock测试Pay::alipay()-setMock(true); Pay::wechat()-setMock(true);在实际项目中我发现正确处理支付回调是最容易出错的地方。建议在开发阶段使用内网穿透工具如ngrok将本地开发环境暴露到公网方便接收支付平台的回调通知。同时要特别注意处理网络超时和重试机制确保不会因为临时网络问题导致支付状态不一致。
郑州网站建设
网页设计
企业官网