我们正在开发自己的 woocommerce 支付网关插件(用于支付宝)。用户在结账页面点击“Proceed to Alipay”后,支付宝API获取订单信息(金额、姓名、地址、订单号等),创建表单,自动提交至支付宝网关。这是它的样子:
'<form id=\'alipaysubmit\' name=\'alipaysubmit\' action=\'https://openapi.alipaydev.com/gateway.do?charset=UTF-8\' method=\'POST\'><input type=\'hidden\' name=\'biz_content\' value=\'{"product_code":"FAST_INSTANT_TRADE_PAY","body":"","subject":"Wendy Wang","total_amount":"21.50","out_trade_no":"1724"}\'/><input type=\'hidden\' name=\'app_id\' value=\'2016090900467784\'/><input type=\'hidden\' name=\'version\' value=\'1.0\'/><input type=\'hidden\' name=\'format\' value=\'json\'/><input type=\'hidden\' name=\'sign_type\' value=\'RSA\'/><input type=\'hidden\' name=\'method\' value=\'alipay.trade.page.pay\'/><input type=\'hidden\' name=\'timestamp\' value=\'2017-11-13 04:50:57\'/><input type=\'hidden\' name=\'alipay_sdk\' value=\'alipay-sdk-php-20161101\'/><input type=\'hidden\' name=\'notify_url\' value=\'https://sv.icubeinfo.com/wp-content/plugins/onepigeon-alipay/notify_url.php\'/><input type=\'hidden\' name=\'return_url\' value=\'https://sv.icubeinfo.com/wp-content/plugins/onepigeon-alipay/return_url.php\'/><input type=\'hidden\' name=\'charset\' value=\'UTF-8\'/><input type=\'hidden\' name=\'sign\' value=\'ahegEWInBM8h9Gav6oNOirp881D7j8/x1gjpgSdXfgzHA81vOrDQQOdJqO2rMMj9bmm7/etVQI6MSFY1kPN9KDbPhvPeAIeygHTcDksz0k2PyNhm1P35zgctT20fWptskhZwz1vAjGVTcWOqsG7V4O9pkvnYsKm4cY83yEbFZN3G5hQHj4ZCKD/ixJFDLTtu65DonIwGV9o6qI26YCjMzUSOHVIfVFx/531R1SlGcaqhpzUzaFkMGFFLcI/F349bExDEVuXM1earg9EKZyCq/m8ZihiutPiMQkbGJnYks/casUAyA3l3m1iuWg2DqvA5tT/6psWOiIPiZSEViioMMA==\'/><input type=\'submit\' value=\'ok\' style=\'display:none;\'\'></form><script>document.forms[\'alipaysubmit\'].submit();</script>'
所以这就是支付宝 API 返回的内容,它被存储为一个字符串$result
。要运行它,我们只需执行echo $result;
echo
当我们在自己的笔记本电脑(XAMPP 托管)上进行测试时,这一切都很好:页面重定向到支付宝的页面,用户可以选择使用二维码支付或登录支付(我认为重定向是因为; 稍后当用户完成付款时,它会重定向回 woocommerce 的付款完成页面。
但是,当我们尝试将相同的代码部署到我们的服务器(IIS 托管)时,它就不起作用了。
我们尝试使用日志来跟踪代码执行行为;命令之前和之后的所有代码都echo
被记录下来,这意味着echo
应该已经执行了,但是我们不明白为什么它没有生效。没有发生重定向,所以 woocommerceprocess_checkout()
函数将继续运行,直到它命中send_ajax_failure_response()
函数,然后导致错误消息“错误处理结帐。请重试。”
任何人都知道这里的问题是什么?
顺便说一句,echo
即使在简单的echo '1234';
命令情况下也失败了。
此外,当我们在加载结帐页面时尝试echo
使用简单的字符串时,效果很好。该字符串将打印在页面上;但不是在按下“继续支付宝”按钮后。
“进行支付宝”好像是用AJAX实现的;echo
这是失败的原因吗?如果是,为什么它可以在我的笔记本电脑上运行,但不能在我们的服务器上运行?我怎样才能让它工作?
谢谢。