微信支付過程中遇到的問題
發現demo裡有幾處需要修改的。
第一問題:
Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99
Fatal error: Uncaught exception ‘WxPayException‘
with message ‘curl出錯,錯誤碼:60‘ in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php:564 Stack trace: #0 D:\wwwroot\weixinpaytest\lib\WxPay.Api.php(62):
WxPayApi::postXmlCurl(‘<xml><appid><![...‘, ‘https://api.mch...‘, false, 6) #1 D:\wwwroot\weixinpaytest\pay\jsapi.php(36):
WxPayApi::unifiedOrder(Object(WxPayUnifiedOrder)) #2 {main} thrown in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php on line 564
第一個問題,這個問題完全是微信團隊的問題,給出的example就是錯的:
Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99
找到WxPay.JsApiPay.php檔案的99行,curl_setopt($ch, CURLOP_TIMEOUT, 30);
微信團隊example程式碼裡少了一個“T”,正確程式碼應該是 curl_setopt($ch, CURLOPT_TIMEOUT, 30);
注:這裡前提是PHP支援CURL(這裡我就不介紹如何使PHP支援CURL了)。
第二問題:
Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出錯,錯誤碼:60‘ in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php:564 Stack trace: #0 D:\wwwroot\weixinpaytest\lib\WxPay.Api.php(62):
WxPayApi::postXmlCurl(‘<xml><appid><![...‘, ‘https://api.mch...‘, false, 6) #1 D:\wwwroot\weixinpaytest\pay\jsapi.php(36):
WxPayApi::unifiedOrder(Object(WxPayUnifiedOrder)) #2 {main} thrown in D:\wwwroot\weixinpaytest\lib\WxPay.Api.php on line 564
這個錯誤通過修改檔案WxPay.Api.php 解決,具體如下:
第537行
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴格校驗
to
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//嚴格校驗2
第三個問題:
例如,原始URL為:http://weixin.qq.com,顯示安全支付標題的URL為:http://weixin.qq.com?showwxpaytitle=1。此時,會出現下面的錯誤:
根據錯誤裡顯示的請求URL, 發現引數前面並沒有"?",
檢視原始碼,發現在WxPay.JsApiPay.php檔案裡的GetOpenid方法
<span style="font-size:14px;">
public function GetOpenid()
{
//通過code獲得openid
if (!isset($_GET['code'])){
//觸發微信返回code碼
$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);
//echo $baseUrl;
$url = $this->__CreateOauthUrlForCode($baseUrl);
Header("Location: $url");
exit();
} else {
//獲取code碼,以獲取openid
$code = $_GET['code'];
$openid = $this->getOpenidFromMp($code);
return $openid;
}
<span style="color:#333333;"> }</span></span>
正確的方法是這裡拼接URL的時候新增"?"
$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']);
這樣這個問題就解決了。
第四個問題:
測試的時候把支付頁面放在支付授權目錄的子目錄 就會出現下面的錯誤:
PHP Fatal error: Uncaught exception 'WxPayException' with message '引數錯誤' in C:\inetpub\wwwroot\dhrz\wxpay\WxPay.JsApiPay.php:75
Stack trace:
#0 C:\inetpub\wwwroot\dhrz\wxpay\jsapi.php(39): JsApiPay->GetJsApiParameters(Array)
#1 {main}
thrown in C:\inetpub\wwwroot\dhrz\wxpay\WxPay.JsApiPay.php on line 75
這時候在C:\inetpub\wwwroot\dhrz\wxpay\jsapi.php(39):裡
JsApiPay->GetJsApiParameters(Array)這裡引數無法取得資料,所以會有問題,
必須把支付頁面放到支付授權的目錄下。
注:這裡的支付授權目錄在微信後臺設定的。