關(guān)于PHPCMS v9支付模塊在使用新支付寶接口key時報錯不能正常使用的解決方法
問題描述:
如題,在iphpcms.net的會員群中有學(xué)員提出當(dāng)前版本的phpcms(v9.5)在使用其支付模塊中的支付寶接口進(jìn)行在線充值支付功能時存在著問題,表現(xiàn)為“使用三年前申請的支付寶接口key是正常的,但是使用最近剛剛申請的就會失敗”。
問題分析:
此問題從表現(xiàn)形式來看就知道應(yīng)該是phpcms v9中的支付模塊中的支付寶接口程序某些地方因為很久沒有更新太過老舊導(dǎo)致的不符合支付寶新版本接口規(guī)則導(dǎo)致的。
好的,那么接下來就是要找到需要更新的地方了,說實(shí)話,本人因為之前在給客戶做某些項目是遇到過此問題(大約是2013年的事情了),并進(jìn)行了一定的研究,正好把一些主要需要注意修改升級的地方給大家進(jìn)行說明。
因為時間太久,現(xiàn)回想查看以前的資料,有些細(xì)節(jié)可能有所遺漏,算是供讀者參考吧~
解決方法:
找到支付寶的接口程序,文件目錄:/phpcms/modules/pay/class/Alipay.class.php 。
在此文件中,主要修改的地方有兩處:
第35行:
$this->config['gateway_url'] = 'https://www.alipay.com/cooperate/gateway.do?_input_charset='.CHARSET;
修改為:
$this->config['gateway_url'] = 'https://mapi.alipay.com/gateway.do?_input_charset='.CHARSET;
第85行:
$verify_result = $this->get_verify('http://notify.alipay.com/trade/notify_query.do?partner=' . $this->config['alipay_partner'] . '¬ify_id=' . $receive_data['notify_id']);
修改為:
$verify_result = $this->get_verify('https://mapi.alipay.com/gateway.do?service=notify_verify&partner=' . $this->config['alipay_partner'] . '¬ify_id=' . $receive_data['notify_id']);
至此,相信大家已經(jīng)發(fā)現(xiàn)了問題所在,是的,主要問題是支付寶新版接口中更換了請求地址。
這個請求地址的更高已經(jīng)是2013年的事情了,可是到現(xiàn)在仍然沒有更新,本人只能對此汗顏了,希望官方盡快更新吧。
另外附上部分當(dāng)時支付寶開發(fā)者平臺給出的通知,以便大家了解,因為時間太“久遠(yuǎn)”很難找到原文地址了,這也是從互聯(lián)網(wǎng)上找到的:
【公告】于2013年3月20日支付寶接口網(wǎng)關(guān)地址切換
尊敬的支付寶用戶:
計劃于2013年3月20日,支付寶將要停止商戶接口訪問(https://www.alipay.com/cooperate/gateway.do)。
現(xiàn)在,在此通知各位已經(jīng)在使用支付寶接口的商戶,建議您盡快切換您網(wǎng)站支付寶接口的通知網(wǎng)關(guān)。
依據(jù)我們提供的代碼示例,您只需要更改兩處地方:
請求地址——
https://www.alipay.com/cooperate/gateway.do?
替換成:
https://mapi.alipay.com/gateway.do?
通知驗證地址——
https://www.alipay.com/cooperate/gateway.do?service=notify_verify&
替換成:
https://mapi.alipay.com/gateway.do?service=notify_verify&
各開發(fā)語言具體修改方法如下:
ASP編程語言:
打開class文件夾下的alipay_notify.asp文件,
修改20行代碼HTTPS_VERIFY_URL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify&"
為:HTTPS_VERIFY_URL = "https://mapi.alipay.com/gateway.do?service=notify_verify&"
PHP編程語言:
打開lib文件夾下的alipay_notify.class.php文件,
修改22行代碼:var $https_verify_url = 'https://www.alipay.com/cooperate/gateway.do?service=notify_verify&';
為:var $https_verify_url = 'https://mapi.alipay.com/gateway.do?service=notify_verify&';
.net編程語言
打開app_code文件夾下的AlipayNotify.cs文件,
修改HTTPS支付寶通知路徑:private string Https_veryfy_url = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify&";
為: private string Https_veryfy_url = "https://mapi.alipay.com/gateway.do?service=notify_verify&";
Java編程語言
打開src\com\alipay\util下面的 AlipayNotify.java文件,
修改HTTPS形式消息驗證地址:private static final String HTTPS_VERIFY_URL = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify&";
為:private static final String HTTPS_VERIFY_URL = "https://mapi.alipay.com/gateway.do? service=notify_verify&";
以上為各個語言的網(wǎng)關(guān)修改方法。
如果您修改后,出現(xiàn)了問題,那么建議您恢復(fù)原代碼繼續(xù)使用。
注意:這個修改只針對2012年2月28上午10點(diǎn)半以前已經(jīng)下載接口包在使用的客戶。在此后下載接口包的客戶無需做代碼修改。