Laravel5.8集成PayPal时return_urls引发400错误的解决问询
问题原因及修复方案
这个MALFORMED_REQUEST错误的根源很明确——你在创建支付请求时用错了字段名!
PayPal REST API 里,用来指定支付成功/取消后跳转地址的字段是redirect_urls,而不是你代码里写的return_urls。PayPal的API对字段名的匹配极其严格,拼写错误或者使用不存在的字段直接就会触发格式错误的报错。
另外还有个细节:redirect_urls里必须同时包含return_url和cancel_url两个字段,只填其中一个也可能导致请求不合法。
给你修改后的代码:
payment: function(data, actions) { return actions.payment.create({ redirect_urls : { return_url : 'https://www.mysite/test/paypal_payment', cancel_url : 'https://www.mysite/test/paypal_cancel' // 一定要加上取消回调的地址 }, transactions: [{ amount: { total: '0.01', currency: 'USD' } }] }); },
最后再提几个需要注意的点:
- 线上环境必须使用HTTPS地址作为回调URL,PayPal官方明确要求线上回调不能用HTTP;本地测试用HTTP没问题,但上线前一定要换成HTTPS
- 确保Laravel里的
paypal_payment和paypal_cancel路由已经正确定义,并且没有被认证中间件或者CSRF防护拦截(如果是GET请求的话,CSRF可以跳过,但建议按PayPal的规范处理) - 虽然这个问题和SDK版本关系不大,但如果后续还有其他问题,可以检查下
paypal/rest-api-sdk-php的版本是否和Laravel 5.8兼容,避免版本冲突导致的其他异常
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

