if (!-e $request_filename){ rewrite ^/(.*)$ /index.php/$1 last; }
1. 登陸 微信公衆平臺 ;javascript
2. 點擊左邊菜單裏面的微信支付查看相關商戶號,肯定該公衆號支付針對由哪一個商戶號進行收款;php
3. 登陸步驟2中的商戶平臺,點擊產品中心,開啓支付產品-公衆號支付(若是已開通能夠忽略該步驟);html
4. 繼續點擊商戶平臺->產品中心->開發配置,肯定商戶號是否和即將開發的公衆號支付一致。查看支付配置->公衆號支付java
添加相應的JSAPI受權目錄,添加規則具體參見:微信公衆號支付開發當前URL未註冊解決辦法web
5. 回到公衆平臺,設置->公衆號設置->功能設置,添加JS接口安全域名和網頁受權域名;api
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>openId : {$openId}</h1> <button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" >當即支付</button> <script type="text/javascript"> function callpay(){ if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } }else{ jsApiCall(); } } //調用微信JS api 支付 function jsApiCall(){ WeixinJSBridge.invoke( 'getBrandWCPayRequest', <?php echo $jsApiParameters; ?>, function(res){ WeixinJSBridge.log(res.err_msg); alert(res.err_code+res.err_desc+res.err_msg); } ); } </script> <script type="text/javascript"> //獲取共享地址 function editAddress() { WeixinJSBridge.invoke( 'editAddress', <?php echo $editAddress; ?>, function(res){ var value1 = res.proviceFirstStageName; var value2 = res.addressCitySecondStageName; var value3 = res.addressCountiesThirdStageName; var value4 = res.addressDetailInfo; var tel = res.telNumber; alert(value1 + value2 + value3 + value4 + ":" + tel); } ); } window.onload = function(){ if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', editAddress, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', editAddress); document.attachEvent('onWeixinJSBridgeReady', editAddress); } }else{ editAddress(); } }; </script> </body> </html>
H5支付是指商戶在微信客戶端外的移動端網頁展現商品或服務,用戶在前述頁面確認使用微信支付時,商戶發起本服務呼起微信客戶端進行支付。瀏覽器
主要用於觸屏版的手機瀏覽器請求微信支付的場景。能夠方便的從外部瀏覽器喚起微信支付。安全
提醒:H5支付不建議在APP端使用,如須要在APP中使用微信支付,請接APP支付,文檔詳見微信支付開發文檔。服務器
申請入口:登陸商戶平臺-->產品中心-->個人產品-->支付產品-->H5支付微信
https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_5
1. 登陸商戶平臺,查看開發配置->查看商戶號和H5支付域名。
2. 登陸開發平臺,肯定APPID,APPID必須是移動應用中所使用的APPID
更正:APPID 能夠是公衆號ID,注意是
3. 查看相關的商戶號、和支付KEY(用於簽名)。查看key步驟:商戶平臺->帳戶中心->帳戶設置->API安全->而後在該頁的「API密鑰」部分,點擊「設置密鑰」,能夠看到密鑰內容,該密鑰就是咱們須要的「支付Key」。本步操做只能在開發階段、產品沒有上線前操做,產品上線後切忌點擊「設置密鑰」,不然會影響線上的支付功能。
4. 調用統一下單便可獲得 mweb_url ,打開支付窗口,進行支付。統一下單接口請參考https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1
5. 能夠對 mweb_url 進行設置重定向頁面
// 判斷是否統一下單成功 if($result['return_code'] != 'SUCCESS'){ throw new PayException("統一下單失敗:".$result['return_msg'], 320); } // 判斷是否存在重定向界面 if(WxH5Config::REDIRECT_URL !== ""){ $result['mweb_url'] = $result['mweb_url']."&redirect_url=".urlencode(WxH5Config::REDIRECT_URL."?out_trade_no=".$inputObj['out_trade_no']); }
補充:redirect_url 必須是當前域名下指定的地址,好比發起支付H5域名是domain,重定向頁面地址最好是domain,不然未配置的狀況下會報商家存在未配置的參數,請聯繫商家解決
6. 支付成功或者取消或者失敗都會重定向 redirect_url 地址,支付成功會異步執行通知notify_url。
1. 登陸開發平臺,查看APPID;
2. 登陸商戶平臺,查看對應的商戶號;
3. 密匙KEY同微信H5支付步驟3;
4. 而後調用APP統一下單;
注意:
1. 解決微信App支付服務端,App上提示「商戶支付下單id非法」
統一下單接口,返回的字段名是「prepay_id」
調起支付接口,傳入的字段名是「prepayid」
坑爹的微信支付!!
同時呼籲你們必定要養成命名規範。。。
2.關於微信APP支付,提示支付驗證簽名失敗
最近作微信APP支付,在「統一下單」里加籤沒有問題,調用成功,可是在 「調起支付」後卻提示 支付驗證簽名失敗。
先說一下請求的參數,參數一共有七個:
prepayid(統一下單裏返回的標識符),
partnerid(商戶號),
appid,
package(微信要求必須有,內容是「Sign=WXPay」),
noncestr(隨機數,不適用微信返回的,是從新生成一個,注意統一下單裏的參數是nonce_str),
timestamp(時間戳,十位,注意統一下單裏的時間是完整的時間,這裏是時間戳),
sign(簽名,將上述字段從新簽名,而不是用統一下單返回的sign)。
這個問題折磨了我一上午,覺得統一下單裏簽名沒問題,那麼調起支付就不會在加簽上出錯,最後用微信的簽名生成工具對比了一下簽名結果發現 程序生成的簽名與官網生成的不同,而後把簽名過程輸出了下,發現 package 這裏出現了問題。
Sign=WXPay,我在加簽裏對內容進行了utf-8編碼,而恰巧,一不當心 「=」 也參與了編碼,因而 就變成了 Sign%3DWXPay,而後 錯誤的package進行了錯誤的加簽,致使簽名出錯。
解決方案:在加簽過程裏修改,若是map匹配到 package,那麼map的值不參與編碼。官方簽名校驗工具地址:https://pay.weixin.qq.com/wiki/tools/signverify/。
(吐槽一句,微信支付的文檔真是一團糟,要啥啥沒有,找啥找不到,並且還出現了 多個標準。固然,也多是我水平太差。。)
5. 支付完成,等待通知回調。
補充:微信掃碼支付
公衆號支付是手機端的微信公衆號H5頁面支付,這種支付方式必須是在微信內置瀏覽器發起。
掃碼支付分爲模式一和模式二,模式一主要爲線下服務,該模式是先掃碼,再生成訂單,商戶先爲本身的商品生成二維碼鏈接,而後用戶掃碼以後決定是否購買,二維碼無過時時間,好比自動售賣機大多采用這種模式;模式二主要爲線上電商服務,用戶選擇商品後生成訂單,根據訂單生成二維碼,而後支付,該二維碼爲臨時二維碼。
申請入口:登陸商戶平臺-->產品中心-->個人產品-->支付產品-->掃碼支付
設置掃碼支付回調連接:登陸商戶平臺-->產品中心-->開發配置
採用模式二:
$param->appid = $this->wxConfig[$business_code]['APP_ID']; $param->mch_id = $this->wxConfig[$business_code]['MCH_ID']; $param->nonce_str = $this->getNonceStr(); $param->body = "xxx"; $param->notify_url = $this->wxConfig[$business_code]['notify_url']; $param->trade_type = 'NATIVE'; $param->sign = $this->MakeSign($param->getParam()); $xml = $this->ToXml($param->getParam()); $response = $this->postXmlCurl($xml,WxConf::UNIFIEDOR_ORDER_URL,false,6); return $this->FromXml($response);
統一下單後會生成一個 code_url : weixin://wxpay/bizpayurl?pr=DBJQsA6
利用第三方二維碼工具生成二維碼
最好掃碼進行支付回調OK