系统升级到最新的2.17.1,fecro升到到最新的1.7.1,配置之后,在购物车页点击“PayPal Buy Now”按钮,弹窗打开后会瞬间关闭,异步请求中有报错。
购物车页点击按钮

异步请求中的报错
URL: http://xxx.com/payment/paypal/express/button
"EC-0E965223CB5085024"
An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in xxxx\vendor\fancyecommerce\fecshop\app\appfront\modules\Payment\block\paypal\express\Start.php on line 34. in xxxx\vendor\yiisoft\yii2\web\Response.php:373
Stack trace:
#0 xxxx\vendor\yiisoft\yii2\web\Response.php(346): yii\web\Response->sendHeaders()
#1 xxxx\vendor\yiisoft\yii2\web\ErrorHandler.php(136): yii\web\Response->send()
#2 xxxx\vendor\yiisoft\yii2\base\ErrorHandler.php(135): yii\web\ErrorHandler->renderException(Object(yii\web\HeadersAlreadySentException))
#3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\HeadersAlreadySentException))
#4 {main}
Previous exception:
yii\web\HeadersAlreadySentException: Headers already sent in xxxx\vendor\fancyecommerce\fecshop\app\appfront\modules\Payment\block\paypal\express\Start.php on line 34. in xxxx\vendor\yiisoft\yii2\web\Response.php:373
Stack trace:
#0 xxxxx\vendor\yiisoft\yii2\web\Response.php(346): yii\web\Response->sendHeaders()
#1 xxxxx\vendor\yiisoft\yii2\base\Application.php(398): yii\web\Response->send()
#2 xxxx\appfront\web\index.php(66): yii\base\Application->run()
#3 {main}
修复方法
文件路径:vendor/fancyecommerce/fecshop/app/appfront/modules/Payment/block/paypal/express/Start.php
public function startButtonPayment()
{
$methodName_ = 'SetExpressCheckout';
$nvpStr_ = Yii::$service->payment->paypal->getExpressTokenNvpStr();
//echo $nvpStr_;exit;
$checkoutReturn = Yii::$service->payment->paypal->PPHttpPost5($methodName_, $nvpStr_);
//var_dump($checkoutReturn);
if (strtolower($checkoutReturn['ACK']) == 'success') {
$token = $checkoutReturn['TOKEN'];
if($token){
if(!Yii::$service->order->generatePPExpressOrder($token)){
return false;
}
echo '"'.$token.'"';
}
} elseif (strtolower($checkoutReturn['ACK']) == 'failure') {
echo $checkoutReturn['L_LONGMESSAGE0'];
} else {
var_dump($checkoutReturn);
}
}
===>
public function startButtonPayment()
{
$methodName_ = 'SetExpressCheckout';
$nvpStr_ = Yii::$service->payment->paypal->getExpressTokenNvpStr();
//echo $nvpStr_;exit;
$checkoutReturn = Yii::$service->payment->paypal->PPHttpPost5($methodName_, $nvpStr_);
//var_dump($checkoutReturn);
if (strtolower($checkoutReturn['ACK']) == 'success') {
$token = $checkoutReturn['TOKEN'];
if($token){
if(!Yii::$service->order->generatePPExpressOrder($token)){
return false;
}
echo '"'.$token.'"';
}
} elseif (strtolower($checkoutReturn['ACK']) == 'failure') {
echo $checkoutReturn['L_LONGMESSAGE0'];
} else {
var_dump($checkoutReturn);
}
exit;
}
startButtonPayment
函数最后添加exit;
就正常了。
本文由 chrispoo 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。