公眾號支付只能用在微信里,也就是微信內部瀏覽器.
1.到WxPayHubHelper.php文件 JsApi_pub()類下createOauthUrlForCode($redirectUrl)方法, 第二個參數
改為 $urlObj["redirect_uri"] = urlencode($redirectUrl); //對$url變量進行url編碼 不然header重定向時無法獲取訂單號和金額
2.wx.jsapi.php這個文件在header重定向后,get,post等方式傳遞的參數就沒有了,不過重定向的URL里面有個STATE,可以把數據放里面,就OK了.具體看代碼.
文件為wx.jsapi.php
if (!isset($_GET['code'])) { //觸發微信返回code碼 $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL); //重定向的URL里面有個STATE,把GET到的數據參數放在一個數組后轉換成json格式的字符串 $state = json_encode(array( "bill_no" => $data["bill_no"], //訂單號 "title" => $data["title"], //標題 "return_url" => $data["return_url"], //返回地址 "total_fee" => $data["total_fee"] //金額 )); //替換這個STATE $url = str_replace("STATE", $state, $url); //重定向后會帶上state參數,開發者可以填寫a-zA-Z0-9的參數值,最多128字節 Header("Location: $url"); } else { //獲取code碼,以獲取openid $code = $_GET['code']; $jsApi->setCode($code); $openid = $jsApi->getOpenId(); $state = $_GET['state']; $state = str_replace("\\", "", $state); //去掉\\要不解析不了 $param = json_decode($state, true); //解析 $data["bill_no"] = $param['bill_no']; //訂單號 $data["total_fee"] = $param['total_fee']; //金額 $data["title"] = $param['title']; //標題 $data["return_url"] = $param['return_url']; //返回地址 } $data["openid"] = $openid;