1. 程式人生 > >微信支付過程中遇到的問題

微信支付過程中遇到的問題

發現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)這裡引數無法取得資料,所以會有問題,
必須把支付頁面放到支付授權的目錄下。

注:這裡的支付授權目錄在微信後臺設定的。