我的情況: 系統只集成了支付寶。其他情況可能會有不同的及我國,呵呵,這里只把我遇到的問題進行分享
在DEDECMS系統上設置好了商家ID、密鑰、支付寶郵箱之后,理論上應該是直接可以用了,但是我還是遇到了問題
首先就來了一個ILLEGAL_ARGUMENT錯誤。
經過分析post出去的url地址,發現商家ID、密鑰、支付寶郵箱都加載錯誤。經過分析應該是數據加載錯誤。于是分析data目錄下的sys_pay.cache.php文件:
$payment_select = array(0 => “tenpay”,2 => “alipay”,3 => “cbpayment”,4 => “yeepay”);
$payment_userid = array(0 => “********“,1 => “”,2 => “”,3 => “”,4 => “”);
$payment_key = array(0 => “*********“,1 => “”,2 => “”,3 => “”,4 => “”);
$payment_curpay = array(0 => ‘CNY’,1 => ‘CNY’,2 => ‘CNY’,3 => ‘CNY’,4 => ‘CNY’);
$payment_exp = array(0 => “0.01″,1 => “0.00″,2 => “0.01″,3 => “0.01″,4 => “0.00″);
$payment_email = array(0 => “[url=mailto:*******@a.com%22,1]*******@*****.com“,1[/url] => “[url=mailto:webmaster@liehuo.net%22,2]webmaster@liehuo.net”,2[/url] => “[url=mailto:webmaster@liehuo.net%22,3]webmaster@liehuo.net”,3[/url] => “[url=mailto:webmaster@liehuo.net%22,4]webmaster@liehuo.net”,4[/url] => “[url=mailto:“webmaster@liehuo.net]webmaster@liehuo.net[/url]“);
如紅色字所示,這是應該傳遞的三個直接跟支付寶相關的數據,而他們在數組中的位置為0,也就是array[0]位置。
再來看支付寶接口下的alipay_config.php文件
<?php
$partner = $payment_userid[2];
$security_code = $payment_key[2];
$seller_email = $payment_email[2];//賣家郵箱
$_input_charset = $cfg_soft_lang; //字符編碼格式 目前支持 GBK 或 utf-8
$sign_type = “MD5″; //加密方式 系統默認(不要修改)
$transport = “http”;//訪問模式,你可以根據自己的服務器是否支持ssl訪問而選擇http以及https訪問模式(系統默認,不要修改)
$notify_url = $cfg_basehost.”/member/paycenter/alipay/notify_url.php”;// 異步返回地址 需要填寫完整的路徑
$return_url = $cfg_basehost.”/member/paycenter/alipay/return_url.php”; //同步返回地址 需要填寫完整大額路徑
$show_url = “” //你網站商品的展示地址,可以為空
?>
如上紅色字所示,而他的位置為array[2],所以加載數據必定錯誤。(我這是只有支付寶接口的情況,其他情況照此分析即可),將上面的2改為0,數據加載問題解決。
但是,支付寶接口還是不成功。這次提示的錯誤為:ILLEGAL_LOGISTICS_FORMAT
查支付寶文檔,這是由于物流相關問題造成。
經過再次查看url,分析后發現url中缺少了一個參數叫“logistics_fee”。怎么辦呢?原來還有一個支付寶的配置文件,在member/inc/下的config_pay_alipay.php。打開文件:
“service” => “trade_create_by_buyer“, //交易類型,必填實物交易=trade_create_by_buyer(需要填寫物流)
“partner” => $partner, //合作商戶號
“return_url” => $return_url, //同步返回
“notify_url” => $notify_url, //異步返回
“_input_charset” => $_input_charset, //字符集,默認為GBK
“subject” => $ptype, //商品名稱,必填
“body” => $pname, //商品描述,必填
“out_trade_no” => $buyid, //商品外部交易號,必填,每次測試都須修改
“logistics_fee” => 0.00, //物流配送費用
“logistics_payment”=>’BUYER_PAY’, // 物流配送費用付款方式:SELLER_PAY(賣家支付)、BUYER_PAY(買家支付)、BUYER_PAY_AFTER_RECEIVE(貨到付款)
“logistics_type”=>’EXPRESS’, // 物流配送方式:POST(平郵)、EMS(EMS)、EXPRESS(其他快遞)
這里交易類型為實物交易,trade_create_by_buyer,下面三個紅色字部分就是物流信息部分,而不顯示的就是logistics_fee” => 0.00。
解決辦法:只要將后面的0.00加上單引號,問題就解決了,也就是改成logistics_fee” => '0.00′。
解決之后,順利通過。購買點卡成功。
以下為DEDECMS官方 木匠 給與的參考:
正常的 array[2] 才是,可能你只取了支付寶變成array[0]了。
logistics_fee => 0.00 應該被PHP認為是個空值了。
開始的時候logistics_fee默認是沒有的,后來可能弄上去了。
謝謝樓主提出該問題。