【phpcms】關(guān)于PHPCMS v9支付模塊在使用新支付寶接口key時(shí)報(bào)錯(cuò)
關(guān)于PHPCMS v9支付模塊在使用新支付寶接口key時(shí)報(bào)錯(cuò)不能正常使用的解決方法
問題描述:
如題,在iphpcms.net的會(huì)員群中有學(xué)員提出當(dāng)前版本的phpcms(v9.5)在使用其支付模塊中的支付寶接口進(jìn)行在線充值支付功能時(shí)存在著問題,表現(xiàn)為“使用三年前申請(qǐng)的支付寶接口key是正常的,但是使用最近剛剛申請(qǐng)的就會(huì)失敗”。
問題分析:
此問題從表現(xiàn)形式來看就知道應(yīng)該是phpcms v9中的支付模塊中的支付寶接口程序某些地方因?yàn)楹芫脹]有更新太過老舊導(dǎo)致的不符合支付寶新版本接口規(guī)則導(dǎo)致的。
好的,那么接下來就是要找到需要更新的地方了,說實(shí)話,本人因?yàn)橹霸诮o客戶做某些項(xiàng)目是遇到過此問題(大約是2013年的事情了),并進(jìn)行了一定的研究,正好把一些主要需要注意修改升級(jí)的地方給大家進(jìn)行說明。
因?yàn)闀r(shí)間太久,現(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)了問題所在,是的,主要問題是支付寶新版接口中更換了請(qǐng)求地址。
這個(gè)請(qǐng)求地址的更高已經(jīng)是2013年的事情了,可是到現(xiàn)在仍然沒有更新,本人只能對(duì)此汗顏了,希望官方盡快更新吧。
另外附上部分當(dāng)時(shí)支付寶開發(fā)者平臺(tái)給出的通知,以便大家了解,因?yàn)闀r(shí)間太“久遠(yuǎn)”很難找到原文地址了,這也是從互聯(lián)網(wǎng)上找到的:
【公告】于2013年3月20日支付寶接口網(wǎng)關(guān)地址切換
尊敬的支付寶用戶:
計(jì)劃于2013年3月20日,支付寶將要停止商戶接口訪問(https://www.alipay.com/cooperate/gateway.do)。
現(xiàn)在,在此通知各位已經(jīng)在使用支付寶接口的商戶,建議您盡快切換您網(wǎng)站支付寶接口的通知網(wǎng)關(guān)。
依據(jù)我們提供的代碼示例,您只需要更改兩處地方:
請(qǐng)求地址——
https://www.alipay.com/cooperate/gateway.do?
替換成:
https://mapi.alipay.com/gateway.do?
通知驗(yàn)證地址——
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形式消息驗(yàn)證地址: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&";
以上為各個(gè)語言的網(wǎng)關(guān)修改方法。
如果您修改后,出現(xiàn)了問題,那么建議您恢復(fù)原代碼繼續(xù)使用。
注意:這個(gè)修改只針對(duì)2012年2月28上午10點(diǎn)半以前已經(jīng)下載接口包在使用的客戶。在此后下載接口包的客戶無需做代碼修改。