關于PHPCMS v9支付模塊在使用新支付寶接口key時報錯不能正常使用的解決方法
問題描述:
如題,在iphpcms.net的會員群中有學員提出當前版本的phpcms(v9.5)在使用其支付模塊中的支付寶接口進行在線充值支付功能時存在著問題,表現為“使用三年前申請的支付寶接口key是正常的,但是使用最近剛剛申請的就會失敗”。
問題分析:
此問題從表現形式來看就知道應該是phpcms v9中的支付模塊中的支付寶接口程序某些地方因為很久沒有更新太過老舊導致的不符合支付寶新版本接口規則導致的。
好的,那么接下來就是要找到需要更新的地方了,說實話,本人因為之前在給客戶做某些項目是遇到過此問題(大約是2013年的事情了),并進行了一定的研究,正好把一些主要需要注意修改升級的地方給大家進行說明。
因為時間太久,現回想查看以前的資料,有些細節可能有所遺漏,算是供讀者參考吧~
解決方法:
找到支付寶的接口程序,文件目錄:/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']);
至此,相信大家已經發現了問題所在,是的,主要問題是支付寶新版接口中更換了請求地址。
這個請求地址的更高已經是2013年的事情了,可是到現在仍然沒有更新,本人只能對此汗顏了,希望官方盡快更新吧。
另外附上部分當時支付寶開發者平臺給出的通知,以便大家了解,因為時間太“久遠”很難找到原文地址了,這也是從互聯網上找到的:
【公告】于2013年3月20日支付寶接口網關地址切換
尊敬的支付寶用戶:
計劃于2013年3月20日,支付寶將要停止商戶接口訪問(https://www.alipay.com/cooperate/gateway.do)。
現在,在此通知各位已經在使用支付寶接口的商戶,建議您盡快切換您網站支付寶接口的通知網關。
依據我們提供的代碼示例,您只需要更改兩處地方:
請求地址——
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&
各開發語言具體修改方法如下:
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&";
以上為各個語言的網關修改方法。
如果您修改后,出現了問題,那么建議您恢復原代碼繼續使用。
注意:這個修改只針對2012年2月28上午10點半以前已經下載接口包在使用的客戶。在此后下載接口包的客戶無需做代碼修改。