支付宝双功能接口部署和担保交易确认发货失败的问题。
前几天空的时候,章郎虫在自己的一个网站部署了支付宝双功能接口,使用支付宝提供的demo代码。在这里我简单说下部署过程和其中碰到的问题。
首先我在windows系统本地测试了支付功能,成功支付。
接下来测试服务器异步通知功能,因为“服务器异步通知页面文件”notify_url.php不能在本机电脑测试,所以我把代码文件上传到了服务器。服务器异步通知我主要想实现的功能主要是这些:如果对方使用担保交易付款成功后,服务器自动发货;如果支付宝通知交易成功(担保交易买家确认付款或者即时交易),自动更新对应账号在网站的相应功能。下面是我的自动发货代码,稍微把确认发货的代码修改了一下,不用demo中的手动提交form表单发货。
require_once("lib/alipay_submit.class.php"); $logistics_name = 'POST'; $transport_type = 'POST'; $parameter = array( "service" => "send_goods_confirm_by_platform", "partner" => trim($alipay_config['partner']), "trade_no" => $trade_no, "logistics_name" => $logistics_name, "invoice_no" => $invoice_no, "transport_type" => $transport_type, "_input_charset" => trim(strtolower($alipay_config['input_charset'])) ); $alipaySubmit = new AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestHttp($parameter); $doc = new DOMDocument(); $doc->loadXML($html_text); if( ! empty($doc->getElementsByTagName( "alipay" )->item(0)->nodeValue) ) { $alipay = $doc->getElementsByTagName( "alipay" )->item(0)->nodeValue; echo $alipay; }
我就在这里出现了问题,测试后发现自动发货功能不能实现。只能确认form表单确认发货的功能,提示错误“Warning:DOMDocument::loadXML() [domdocument.loadxml]: Empty string supplied as input in”。支付宝论坛官方解释是检查服务器是否开放解析远程XML解析对象的功能。首先检查确保环境是否安装了curl和ssl等基本环境,一切正常,还有windows本地测试form表单确认发货正常。然后确认发货中把$parameter变量换成常量,xml解析也没问题。最后发现原来是alipay.config.php配置文件证书路径错误。因为我的服务器是linux系统,默认配置文件证书路径为“$alipay_config['cacert'] = getcwd().'\\cacert.pem';”,这个在linux系统是识别不了的。发现问题后,我把文件证书路径修改为“$alipay_config['cacert'] = getcwd().'/cacert.pem';”,测试自动发货功能正常。
最后一步就是支付宝页面跳转同步通知页面return_url.php文件了,暂时做的比较简单,功能是支付成功后跳转到网站页面。
确认无误后上线,秀下地址http://www.nbhao.org/donate/,期待朋友们的支持。。。
各个参数意思详见支付宝接口官方文档。网址:https://b.alipay.com/order/techService.htm
-
还没有Trackbacks
支付宝双功能接口